【发布时间】:2019-05-17 16:26:48
【问题描述】:
我连续两次在相同的输入上调用相同的模型,但我没有得到相同的结果,这个模型有nn.GRU 层,所以我怀疑它有一些内部状态应该在第二次运行之前释放?
如何重置 RNN 隐藏状态以使其与最初加载模型时相同?
更新:
一些上下文:
我正在尝试从这里运行模型:
https://github.com/erogol/WaveRNN/blob/master/models/wavernn.py#L93
我正在打电话给generate:
https://github.com/erogol/WaveRNN/blob/master/models/wavernn.py#L148
这里实际上有一些在 pytorch 中使用随机生成器的代码:
https://github.com/erogol/WaveRNN/blob/master/models/wavernn.py#L200
https://github.com/erogol/WaveRNN/blob/master/utils/distribution.py#L110
https://github.com/erogol/WaveRNN/blob/master/utils/distribution.py#L129
我已放置(我正在 CPU 上运行代码):
torch.manual_seed(0)
torch.cuda.manual_seed_all(0)
torch.backends.cudnn.deterministic = True
torch.backends.cudnn.benchmark = False
np.random.seed(0)
在
https://github.com/erogol/WaveRNN/blob/master/utils/distribution.py
在所有导入之后。
我检查了运行之间的 GRU 权重,它们是相同的:
https://github.com/erogol/WaveRNN/blob/master/models/wavernn.py#L153
我还检查了运行之间的logits 和sample 和logits 相同但sample 不同,所以@Andrew Naguib 似乎对随机播种是正确的,但我不确定代码在哪里应该放置修复随机种子吗?
https://github.com/erogol/WaveRNN/blob/master/models/wavernn.py#L200
更新 2:
我已将种子 init 放入 generate,现在结果一致:
https://github.com/erogol/WaveRNN/blob/master/models/wavernn.py#L148
【问题讨论】:
-
我不明白您所说的“我已将种子 init 放入生成中”是什么意思。你能解释一下吗?
-
@mpourreza 在
generate函数内,似乎主代码已更改,链接不再有效。
标签: pytorch recurrent-neural-network