loops - 使用 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 个模型,所以这真的很烦人..
有人遇到过同样的问题并有解决此问题的想法吗?非常感谢所有帮助。另外,这是我第一次在这里发帖,如果我的帖子没有正确遵守规则,我深表歉意,请帮助我调整帖子的格式,不要删除它:(。谢谢!
解决方案
推荐阅读
- mule - 如何在 Mule Dataweave 中循环和合并
- java - 无限循环的集成测试
- oracle - 如何引用表单数据以在 Apex Oracle 中的表单本身中使用它
- c# - 在 NLog 中使用多个依赖注入容器时没有输出
- java - 无法使用 Spring Data Couchbase 将 JSON 对象从 Couchbase 映射到 DTO 实体
- elasticsearch - 标准分析器的 Elasticsearch 自定义分隔符
- python - 过滤轴对象中的数据
- reactjs - 反应自定义钩子
- discord - 什么是discord中的公会ID?
- c - 无法解释 linux 中的控制运算符