我是我正在尝试使用Keras ans的新手。 我试图了解Keras LSTM中的“有状态”选项,所以我建立了以下网络。 :
rdrop = 0.3
rdrop2 = 0
model = Sequential()
model.add(LSTM(1600, return_sequences=False, batch_input_shape=(n_win, L, N), stateful=True, dropout=rdrop))
model.add(Dense(1600, activation='linear'))
model.add(Dropout(0.4))
model.add(RepeatVector(L))
model.add(LSTM(1600, return_sequences=True, stateful=False, dropout=rdrop))
model.add(TimeDistributed(Dense(N, activation='softmax')))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['acc'])
具有以下fit()选项:
for i in range(30):
model.fit(data_input3, data_input3,
shuffle=False,
epochs=1,
batch_size=n_win))
model.reset_states()
我得到的结果还不错,但是我发现,使用相同输入的结果,我更预测()最糟的是结果。
例如,以下代码的所有结果都是不同的,并且运行的次数越多,得到的效果越差。
t = np.zeros(100)
for i in range(100):
data_out2 = model.predict(data_input3[0:n_win, :, :], batch_size=n_win)
t = np.sum(np.abs(data_out2 - data_input3[0:n_win, :, :]))
这不是计算距离的好方法,但是当我目视检查结果时,两次调用model.predict()
后,它开始变得很糟糕(第一次很好)。
在预测阶段权重是否有变化?我检查了辍学情况,它似乎仅在培训中使用。 我已经测试了Keras 2.2.3和2.2.4,它们都使用TF 1.10
运行预先,谢谢您的帮助!