首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取在OpenNMT-py中训练的模型的梯度

获取在OpenNMT-py中训练的模型的梯度
EN

Stack Overflow用户
提问于 2019-06-04 15:37:12
回答 1查看 74关注 0票数 0

在使用OpenNMT-py对模型进行训练时,我们得到一个包含网络权重和偏差的数据作为输出。但是,这些张量具有requires_grad = False,因此没有梯度。例如。有了一层,我们可能有以下张量,表示嵌入以及权重和偏差的编码器和解码器。它们都没有梯度属性。

encoder.embeddings.emb_luts.0.weight

decoder.embeddings.emb_luts.0.weight

encoder.rnn.weight_ih_l0

encoder.rnn.weight_hh_l0

encoder.rnn.bias_ih_l0

encoder.rnn.bias_hh_l0

decoder.rnn.layers.0.weight_ih

decoder.rnn.layers.0.weight_hh

decoder.rnn.layers.0.bias_ih

decoder.rnn.layers.0.bias_hh

OpenNMT-py可以用一些我还没有找到的选项来设置requires_gradient = True,还是有其他方法来获得这些张量的梯度?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-05 12:38:02

只有在训练循环中才能访问梯度,其中调用了optim.step()。如果您想将梯度(或梯度规范或其他什么)记录到TensorBoard中,您可能最好在调用优化器步骤之前获得它们。这种情况发生在_gradient_accumulation对象的Trainer方法中。

请注意,有两个地方调用optim.step()。使用哪一个取决于是在每个批处理之后进行更新,还是从多个批累积渐变,然后再进行更新。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56447123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档