我对 Tensorflow 和 LSTM 比较陌生,只用了几个月。目前,我正在研究多元 LSTM,我想使用相同的模型配置并循环遍历不同的数据集。
我遇到的问题是内存以某种方式保留了下来,这意味着接下来的训练结果会受到之前训练的影响。因此,例如,如果我循环训练模型 1 和模型 2,并分别训练模型 2,那么这两次试验中模型 2 的结果是不同的。以下是我的代码:
seed(1)
tf.random.set_seed(2)
#model configuration
epochs = 20
batch_size=100
no_models=24
for i in range(0,no_models):
#Select X train and Y train from list
#Select X test and Y test from list
#model
model = Sequential()
model.add(LSTM(200, activation="sigmoid",#recurrent_activation="sigmoid",
input_shape=(X_train.shape[1], X_train.shape[2]),
return_sequences=False,stateful=False,return_state=False))
model.add(Dense(1,activation="sigmoid"))
# compile model
model.compile(optimizer='adam', loss='mse', metrics=rmse)
for trn, val in kfold.split(X_train, Y_train):
# fit model
history = model.fit(X_train[trn], Y_train[trn], epochs=epochs,
batch_size=batch_size, verbose=1)
#make prediction
model.fit(X_train,Y_train)
Y_pred = model.predict(X_test)
我尝试了一些方法来解决这个问题:
我已经使用随机种子来为每次运行获得相同的结果。
我确实尝试将 LSTM 模型创建为函数,在该函数中包含所有 model.add()
、model.compile()
、model.fit()
、model.evaluate()
和 model.fit()
, 最后返回 Y_pred。
与keras.clear_session()
清除会话
在循环末尾添加 model = None
在循环结束时使用 model.reset_states()
清除 LSTM 状态
将 del model
放在循环的末尾
一切都无济于事。不知何故,LSTM 仍然保留了记忆并影响了后续的训练。
我可以做一些乏味的事情,比如单独运行所有模型而不是循环,但我有 24 个模型,所以这真的很烦人..
有没有人遇到过同样的问题并且有解决这个问题的想法?非常感谢所有帮助。另外,这是我第一次在这里发帖,所以如果我的帖子没有正确遵守规则,我深表歉意,请帮助我调整帖子的格式,不要删除它:(。谢谢!