[英]How can I get weights converged in a way that MSE minimizes?
这是我的代码
for _ in range(5):
K.clear_session()
model = Sequential()
model.add(LSTM(256, input_shape=(None, 1)))
model.add(Dropout(0.2))
model.add(Dense(256))
model.add(Dropout(0.2))
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='RmsProp', metrics=['accuracy'])
hist = model.fit(x_train, y_train, epochs=20, batch_size=64, verbose=0, validation_data=(x_val, y_val))
p = model.predict(x_test)
print(mean_squared_error(y_test, p))
plt.plot(y_test)
plt.plot(p)
plt.legend(['testY', 'p'], loc='upper right')
plt.show()
Total params
:330,241个samples
:2264
下面是结果
我什么都没改变。
我只跑了循环。
如图所示,即使我刚刚运行了for循环,MSE的结果也非常巨大。
我认为此问题的根本原因是优化器无法找到全局最大值,而无法找到局部最大值并收敛。 原因是检查完所有损耗图后,损耗不再显着降低。 (经过20次)所以为了解决这个问题,我必须找到全局最小值。 我应该怎么做?
我试过调整batch_size,epoch的数量。 另外,我尝试了隐藏层大小,LSTM单位,kerner_initializer添加,优化器更改等,但是无法获得任何有意义的结果。
我想知道如何解决这个问题。
您的宝贵意见和想法将不胜感激。
如果您想在此处查看完整的源代码,请链接https://gist.github.com/Lay4U/e1fc7d036356575f4d0799cdcebed90e
从您的示例来看,问题仅源于您拥有的参数比样本多100倍的事实。 如果减小模型的大小,则差异会减小。
您提出的更广泛的问题实际上是非常有趣的,通常在教程中没有涉及。 几乎所有的机器学习模型本质上都是随机的,每次运行时输出预测都会稍有变化,这意味着您将始终不得不问一个问题:我将哪种模型部署到生产环境中?
您可以做两件事:
参考文献:
如果要始终从同一点开始,则应设置一些种子。 如果在Keras中使用Tensorflow后端,则可以这样做:
from numpy.random import seed
seed(1)
from tensorflow import set_random_seed
set_random_seed(2)
如果您想了解为什么在ML / DL模型中得到不同的结果,我推荐这篇文章。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.