我正在训练一个由不同数据集的大数据集上的RNN。我不想让一套的历史溢出到下一台。这意味着我想在一组末尾重置隐藏状态,然后再发送下一个。我该如何与Keras一起做?该文档声称您可以进入低级配置。
我要做的是每次馈入新数据集时重置LSTM隐藏状态,因此没有对PREV数据集的影响。请参阅线
prevh = Hout[t-1] if t > 0 else h0
来自Karpathy的简单Python实施https://gist.github.com/karpathy/587454dc0146a6ae21fc第45行
如果我找到了LSTM层并在上面呼叫重置,我担心会消除重量和偏见的整个训练,而不仅仅是Hout
这是训练循环代码
for iteration in range(1, 10):
for key in X_dict:
X = X_dict[key]
y = y_dict[key]
history=model.fit(X, y, batch_size=batch_size, callbacks=cbks, nb_epoch=1,verbose=0)
循环中的每个转弯都会从单个市场的数据中馈送。那就是我喜欢重置LSTM中的豪特的地方。
要重置模型的状态,请在特定层或整个模型上调用
.reset_states()
。来源
因此,如果您有数据集列表:
for ds in datasets :
model.reset_states()
model.fit(ds['inputs'],ds['targets'],...)
那是您想要的吗?
编辑:
for iteration in range(1, 10):
for key in X_dict:
model.reset_states() # reset the states of all the LSTM's of your network
#model.layers[lstm_layer_index].reset_states() # reset the states of this specific LSTM layer
X = X_dict[key]
y = y_dict[key]
history=model.fit(X, y, batch_size=batch_size, callbacks=cbks, nb_epoch=1,verbose=0)
这就是您的应用。
默认情况下,LSTM不明显。这意味着他们在遵循序列后不会保持隐藏状态。启动新序列时的初始状态将设置为0。如果选择了stateful=True
,则它将保留上一个序列的最后一个隐藏状态(输出)以初始化批处理中的下一个序列。就像序列继续一样。
做model.reset_states()
只会将保存在内存中的最后一个隐藏状态重置为0,就像序列从头开始一样。
如果您不相信.reset_states()
可以做您期望的事情,请随时转到源代码。