我可以在KERAS中的输入数据集之间重置RNN的隐藏状态



我正在训练一个由不同数据集的大数据集上的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()可以做您期望的事情,请随时转到源代码。

最新更新