gpt4 book ai didi

hidden - 我可以在 Keras 的输入数据集之间重置 RNN 的隐藏状态吗?

转载 作者:行者123 更新时间:2023-12-04 03:14:04 25 4
gpt4 key购买 nike

我在一个由不同来源组成的大型数据集上训练 RNN。我不希望一组的历史溢出到下一组。这意味着我想在一组结束时重置隐藏状态,然后再发送下一组。我怎样才能用 Keras 做到这一点?该文档声称您可以进入低级配置。

我想要做的是在每次输入新数据集时重置 lstm 隐藏状态,因此不会受到前一个数据集的影响。见行

prevh = Hout[t-1] if t > 0 else h0

来自 Karpathy 的简单 python 实现 https://gist.github.com/karpathy/587454dc0146a6ae21fc第 45 行

如果我找到 lstm 层并在其上调用 reset,我担心这会消除权重和偏差的整个训练,而不仅仅是 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 中重置 hout 的地方。

最佳答案

To reset the states of your model, call .reset_states() on either a specific layer, or on your entire model. source

所以如果你有一个数据集列表:

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() 会执行您期望的操作,请随时查看源代码。

关于hidden - 我可以在 Keras 的输入数据集之间重置 RNN 的隐藏状态吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42591068/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com