Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 使用LSTM迭代不同的数据集,而不保留以前训练的记忆_Loops_Tensorflow_Keras_Memory_Lstm - Fatal编程技术网

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

Loops 使用LSTM迭代不同的数据集,而不保留以前训练的记忆,loops,tensorflow,keras,memory,lstm,Loops,Tensorflow,Keras,Memory,Lstm,我对Tensorflow和LSTM比较陌生,只工作了几个月。目前,我正在研究多元LSTM,我希望在不同的数据集上使用相同的模型配置和循环 我遇到的问题是,记忆在某种程度上被保留了下来,这意味着下一次训练的结果将受到上一次训练的影响。因此,例如,如果我在一个环路中训练模型1和2,并且分别训练模型2,那么模型2在这两个试验中的结果是不同的。以下是我的代码: seed(1) tf.random.set_seed(2) #model configuration epochs = 20 batch_si

我对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清除会话。清除会话()

  • 在循环末尾添加
    model=None

  • 使用
    模型清除LSTM状态。在循环结束时重置状态()

  • del model
    放在循环的末尾

都没有用。无论如何,LSTM仍然保留了记忆,并影响后续的训练

我可以做一些乏味的事情,比如单独运行所有的模型,而不是做一个循环,但是我有24个模型,所以这真的很烦人


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

您需要将模型放在第二个for循环中,因此它只为每个折叠定义。我认为这将需要更多的计算时间,因为两个循环中的模型配置相同。我编辑了代码,在交叉验证之后,我用所有数据再次训练了模型,但我没有意识到我最初的帖子是missi没关系,在模型上调用fit并不能训练scratch,你需要为此创建一个新模型。