gpt4 book ai didi

machine-learning - LSTM 训练模式

转载 作者:行者123 更新时间:2023-11-30 08:37:13 25 4
gpt4 key购买 nike

我对神经网络相当陌生,我正在用 LSTM 做我自己的“Hello World”,而不是复制一些东西。我选择了一个简单的逻辑如下:

输入 3 个时间步长。第一个是 1 或 0,另外 2 个是随机数。预期输出与输入的第一个时间步相同。数据源如下所示:

_X0=[1,5,9] _Y0=[1] _X1=[0,5,9] _Y1=[0] ... 200 more records like this. 

这个简单的(?)逻辑经过训练可以达到 100% 的准确度。我进行了多次测试,发现最有效的模型是 3 个 LSTM 层,每个层有 15 个隐藏单元。 22 个 epoch 后返回了 100% 的准确率。

但是我注意到一些我难以理解的事情:在前 12 个时期中,根据准确度衡量,模型根本没有取得任何进展(acc. 保持 0.5),并且通过分类交叉熵衡量,仅取得边际进展(从 0.69 到 0.65) 。然后从 epoch 12 到 epoch 22 训练速度非常快,达到准确度 1.0。问题是:为什么训练会这样?为什么前 12 个 epoch 没有取得任何进展,而第 12-22 个 epoch 效率如此之高?

这是我的完整代码:

from keras.models import Sequential
from keras.layers import Input, Dense, Dropout, LSTM
from keras.models import Model
import helper
from keras.utils.np_utils import to_categorical

x_,y_ = helper.rnn_csv_toXY("LSTM_hello.csv",3,"target")
y_binary = to_categorical(y_)

model = Sequential()
model.add(LSTM(15, input_shape=(3,1),return_sequences=True))
model.add(LSTM(15,return_sequences=True))
model.add(LSTM(15, return_sequences=False))
model.add(Dense(2, activation='softmax', kernel_initializer='RandomUniform'))

model.compile(optimizer='adam',
loss='categorical_crossentropy',
metrics=['acc'])
model.fit(x_, y_binary, epochs=100)

最佳答案

很难给出具体答案,因为这取决于很多因素。训练神经网络时发挥作用的一个主要因素是您选择的优化器的学习率。

在您的代码中,您没有设置特定的学习率。 Keras 2.0.3 中 Adam 的默认学习率为 0.001。 Adam 使用基于初始学习率 (0.001) 和当前时间步的动态学习率 lr_t,定义为

lr_t = lr * (sqrt(1. - beta_2**t) / (1. - beta_1**t)) .

beta_2beta_1 的值通常分别保留为默认值 0.9990.9。如果你绘制这个学习率,你会得到这样的图片:

Adam dynamic learning rate for epoch 1 to 22

这可能是更新权重以找到局部(可能是全局)最小值的最佳位置。过高的学习率通常没有什么区别,它只是“跳过”会降低错误的区域,而较低的学习率会在错误景观中采取较小的步骤,让您找到错误较低的区域。

我建议您使用假设较少的优化器,例如随机梯度下降 (SGD),并使用较低的学习率来测试该假设。

关于machine-learning - LSTM 训练模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43442560/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com