感知器的输入是否需要修改?
Do the inputs into a perceptron need to be modified?
我想要一个感知器来告诉我明天的股价是上涨还是下跌,但权重会变得非常高或非常低,比如大约 1000 或 -1000。这是正常的还是我需要修改输入数据使其在一个范围内?
代码
https://colab.research.google.com/drive/1XeP5UjtZVq2eKozmoiFfGy_8Zyg8X5Y7?usp=sharing
您的代码中存在梯度下降问题。
从你的方法“makeGuess”我得出你的网络来计算
A 是激活函数,A(y) 是网络对给定输入向量(x1、x2、x3、...)的输出。作为激活函数,您在尝试使用梯度下降作为优化方法时使用特定的阶梯函数。问题是对于阶跃函数,使用梯度下降没有任何意义。有关此的更多背景信息,请阅读:https://stats.stackexchange.com/questions/271701/why-is-step-function-not-used-in-activation-functions-in-machine-learning
在你的“训练”方法中,你尝试使用梯度下降,但你以错误的方式使用它,因为在这里你忽略了前向路径中的激活函数。考虑使用 tanh 作为非线性激活。然后得到区间 (-1, 1) 内的输出值。那么如果你使用得当,你也可以应用梯度下降。
而且你应该考虑更好的权重初始化。例如,Keras 默认使用 glorot_uniform 初始化,这是一个很好的开始选项。也许你也想看看这个话题。现在你正在使用 uniform(-1,1) 这不是最好的主意。
如果您完成所有这些操作,您可以考虑缩放输入数据。您可以使用包 sklearn 中的 MinMaxScaler 并尝试使用不同的最小值和最大值(例如 -1 和 1),看看在哪里可以获得最佳结果。
我想要一个感知器来告诉我明天的股价是上涨还是下跌,但权重会变得非常高或非常低,比如大约 1000 或 -1000。这是正常的还是我需要修改输入数据使其在一个范围内?
代码 https://colab.research.google.com/drive/1XeP5UjtZVq2eKozmoiFfGy_8Zyg8X5Y7?usp=sharing
您的代码中存在梯度下降问题。 从你的方法“makeGuess”我得出你的网络来计算
A 是激活函数,A(y) 是网络对给定输入向量(x1、x2、x3、...)的输出。作为激活函数,您在尝试使用梯度下降作为优化方法时使用特定的阶梯函数。问题是对于阶跃函数,使用梯度下降没有任何意义。有关此的更多背景信息,请阅读:https://stats.stackexchange.com/questions/271701/why-is-step-function-not-used-in-activation-functions-in-machine-learning
在你的“训练”方法中,你尝试使用梯度下降,但你以错误的方式使用它,因为在这里你忽略了前向路径中的激活函数。考虑使用 tanh 作为非线性激活。然后得到区间 (-1, 1) 内的输出值。那么如果你使用得当,你也可以应用梯度下降。
而且你应该考虑更好的权重初始化。例如,Keras 默认使用 glorot_uniform 初始化,这是一个很好的开始选项。也许你也想看看这个话题。现在你正在使用 uniform(-1,1) 这不是最好的主意。
如果您完成所有这些操作,您可以考虑缩放输入数据。您可以使用包 sklearn 中的 MinMaxScaler 并尝试使用不同的最小值和最大值(例如 -1 和 1),看看在哪里可以获得最佳结果。