【发布时间】:2023-03-03 08:40:21
【问题描述】:
我对 NN 还很陌生,我正在用 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?可以发一下训练日志吗?
-
我使用 Keras 2.0.3
标签: machine-learning tensorflow keras lstm adam