【发布时间】:2020-05-19 01:52:18
【问题描述】:
我已经在 keras、LSTM 上工作了一段时间,但还是相当新的。
我面临一个问题,每次我使用 keras LSTM 进行训练和预测时都需要重新启动 Jupyter Notebook。
当我需要使用相同的 LSTM 模型设置循环使用不同数据集的多个预测时,这会出现问题。
另一种方法是按数据集训练和预测数据集,每次预测完成后重新启动并运行,这将是一个非常繁琐的过程。
例如:
for i in ...: # Loop for different data set
...
# Create LSTM Model
model = Sequential()
model.add(LSTM(units=32,
activation='relu',
batch_input_shape=(1, timestep_n, feature_n),
return_sequences=True))
model.add(Dense(units=1,
activation='relu'))
model.compile(loss='mean_squared_error', optimizer=adam, metrics=['accuracy'])
...
# Train Model
model.fit(x, y, epochs=100)
...
# Predict
result = model.predict(x_p)
# End Loop for next data set
我尝试在创建每个训练模型之前清除会话,但预测的值与我运行单个训练和预测时的值不同。
session = tf.get_default_session()
if session is not None:
session.close()
K.clear_session()
gc.collect()
我还使用了随机种子,希望每次运行都能获得相同的值。为了一致性。
SEED = 1
np.random.seed(SEED)
tf.set_random_seed(SEED)
random.seed(SEED)
我正在考虑在每个循环中声明/创建一个“新”LSTM 模型来预测不同数据集的值,而无需手动重新启动笔记本并为每个数据集运行。
即使我在循环结束时执行del model,内存也没有被正确清除。
有人可以帮忙吗?
【问题讨论】:
-
为什么要遍历 LSTM 模型?
-
本质上是为了减少在代码的不同运行中加载不同数据集的手动工作量。我希望,在循环中,我可以重新启动一个 LSTM 模型来训练和预测不同数据集的值,在每个循环中启动一个“清洁状态”或“新”LSTM 模型,这样后续的数据集就不会在循环中的前一个模型之上进行训练。
-
尝试构建一个模型函数,然后在每个循环调用函数
model=MyModel(),然后你的所有model.compile,model.fit和model.predict,然后存储结果 -
嗯...我试过了,但预测的结果还是一样。可能与 LSTM 状态在每个循环后没有被重置或某些东西保持内存有关。为什么旧模型的内存会影响新模型是没有意义的。设置 LSTM stateful = True,并不能解决这个问题,因为我也在使用 return_sequence = True。
标签: python keras jupyter-notebook lstm recurrent-neural-network