machine-learning - 获取在 OpenNMT-py 中训练的模型的梯度
问题描述
当使用 OpenNMT-py 训练模型时,我们得到一个 dict 作为输出,其中包含网络的权重和偏差。但是,这些张量具有 requires_grad = False,因此没有梯度。例如。对于一层,我们可能有以下张量,表示编码器和解码器中的嵌入以及权重和偏差。它们都没有渐变属性。
编码器.embeddings.emb_luts.0.weight
解码器.embeddings.emb_luts.0.weight
编码器.rnn.weight_ih_l0
编码器.rnn.weight_hh_l0
编码器.rnn.bias_ih_l0
编码器.rnn.bias_hh_l0
解码器.rnn.layers.0.weight_ih
解码器.rnn.layers.0.weight_hh
解码器.rnn.layers.0.bias_ih
解码器.rnn.layers.0.bias_hh
OpenNMT-py 是否可以设置 requires_gradient = True 并使用一些我没有找到的选项,或者是否有其他方法可以获得这些张量的梯度?
解决方案
梯度只能在optim.step()
调用的训练循环内访问。如果您想将梯度(或梯度范数或其他)记录到 TensorBoard,最好在调用优化器步骤之前获取它们。它发生在对象的_gradient_accumulation
方法中Trainer
。
请注意,有两个地方optim.step()
被调用。使用哪一个取决于您是在每批之后进行更新,还是从多个批次中累积梯度并在之后进行更新。
推荐阅读
- python - Python - DataFrame 中不同变量的 Yes 和 No 计数的并排条形图
- typescript - Typescript:模板文字,用于定义带有开始标签和一些字符串内容的 html
- dns - 在 Netlify 上添加三级域
- node.js - Azure 上的文件上传
- python - GitPython - 脚本错误 - 已经存在并且不是空目录
- windows - 使用 Docker 文件中的 COPY 将文件夹从 Windows 主机操作系统复制到 Docker 映像中
- wordpress - 使用 wp_query 时分页不起作用?
- installation - 永久存储信息
- python - Scrapy-mongodb 将数据保存在数组数组中,而不是单个数组
- sockets - 在哪里包含凭据以连接到邮递员中的 websocket 服务器?