Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使权重以MSE最小化的方式收敛?_Python_Machine Learning_Keras_Deep Learning_Lstm - Fatal编程技术网

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多倍。如果您减小模型的大小,您将看到较少的差异

你要问的更广泛的问题实际上非常有趣,教程中通常没有提到。几乎所有的机器学习模型本质上都是随机的,每次运行时,输出预测都会发生轻微的变化,这意味着您总是要问一个问题:我应该将哪个模型部署到生产中

在我看来,你可以做两件事:

  • 选择针对所有数据训练的第一个模型(交叉验证后,…)
  • 构建具有相同超参数的模型集合,并实施简单的投票策略
参考资料:


这不是“固定的”,权重是随机初始化的,因此每次您对模型进行实例和训练时,无法保证权重会收敛到相同的值。我如何才能将权重收敛到MSE最小化的方向?我认为这对我来说不是合适的解决方案。你为什么这么认为?因为我想得到准确的训练数据,而不是固定的结果。很明显,你没有对此做太多研究。但好吧,想想看。神经网络从空间中的随机点开始(因为随机初始化)。所以每次运行它时,都会得到不同的结果。但是如果你能确定起点,你可以在空间中找到一个好的起点,网络将从那里开始并获得良好的准确性。准确性取决于很多东西,你不能只是说“好吧,我如何才能获得良好的准确性?”没有银弹解决方案,从某种意义上说,这更像是反复试验,你必须幸运,良好的网络架构和充分准备的数据与网络中各层权重的良好随机初始化结合在一起,以产生良好的结果。即使这样,你的起点也可能不好,你的网络也不会表现得那么好。如果在几次尝试中表现不好,你的态度是扔掉它。