繁体   English   中英

如何以MSE最小化的方式收敛权重?

[英]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

下面是结果

1个

我什么都没改变。

我只跑了循环。

如图所示,即使我刚刚运行了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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM