使用 LSTM 迭代不同的数据集而不保留之前训练的记忆

时间:2021-05-31 13:21:35

标签: loops tensorflow keras memory lstm

我对 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 个模型,所以这真的很烦人..

有没有人遇到过同样的问题并且有解决这个问题的想法?非常感谢所有帮助。另外,这是我第一次在这里发帖,所以如果我的帖子没有正确遵守规则,我深表歉意,请帮助我调整帖子的格式,不要删除它:(。谢谢!

0 个答案:

没有答案