Python 如何使权重以MSE最小化的方式收敛?
这是我的密码Python 如何使权重以MSE最小化的方式收敛?,python,machine-learning,keras,deep-learning,lstm,Python,Machine Learning,Keras,Deep Learning,Lstm,这是我的密码 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(l
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()
总参数
:330241
示例
:2264
下面是结果
我什么都没变
我只跑了一圈
正如您在图中所看到的,MSE的结果是巨大的,尽管我刚刚运行了for循环
我认为这个问题的根本原因是优化器不能找到全局最大值和局部最大值并收敛。原因是,在检查所有损失图后,损失不再显著减少。(20次之后)为了解决这个问题,我必须找到全局最小值。我该怎么做
我试着调整批量大小的数量,历元。此外,我尝试了隐藏层大小、LSTM单位、添加kerner_初始值设定项、更改优化器等,但没有得到任何有意义的结果
我想知道我怎样才能解决这个问题
非常感谢您的宝贵意见和想法
如果你想看到完整的源代码,这里是链接如果你想总是从同一点开始,你应该设置一些种子。如果在Keras中使用Tensorflow后端,您可以这样做:
from numpy.random import seed
seed(1)
from tensorflow import set_random_seed
set_random_seed(2)
如果您想了解为什么在ML/DL模型中会得到不同的结果,我推荐这篇文章。从您的示例中,问题仅仅来自这样一个事实,即您的参数是示例的100多倍。如果您减小模型的大小,您将看到较少的差异 你要问的更广泛的问题实际上非常有趣,教程中通常没有提到。几乎所有的机器学习模型本质上都是随机的,每次运行时,输出预测都会发生轻微的变化,这意味着您总是要问一个问题:我应该将哪个模型部署到生产中 在我看来,你可以做两件事:
- 选择针对所有数据训练的第一个模型(交叉验证后,…)
- 构建具有相同超参数的模型集合,并实施简单的投票策略