![](/img/trans.png)
[英]Wav2Vec pytorch element 0 of tensors does not require grad and does not have a grad_fn
[英]In PyTorch, what exactly does the grad_fn attribute store and how is it used?
在 PyTorch 中, Tensor
class 具有grad_fn
属性。 这引用了用于获取张量的操作:例如,如果a = b + 2
, a.grad_fn
将是AddBackward0
。 但是“参考”到底是什么意思?
使用inspect.getmro(type(a.grad_fn))
检查AddBackward0
将 state 发现 AddBackward0 的唯一基础AddBackward0
是object
。 此外,此 class 的源代码(实际上,可能在 grad_fn 中遇到的任何其他grad_fn
)在源代码中无处可寻!
所有这些都让我想到以下问题:
grad_fn
中究竟存储了什么以及在反向传播过程中如何调用它?grad_fn
中存储的对象没有某种常见的超级 class,为什么在 GitHub 上没有它们的源代码? grad_fn
是 function “句柄”,可以访问适用的梯度 function。 给定点的梯度是在反向传播期间调整权重的系数。
“句柄”是 object 描述符的总称,旨在提供对 object 的适当访问权限。 例如,当您打开一个文件时, open
返回一个文件句柄。 当您实例化 class 时, __init__
function 返回创建实例的句柄。 句柄包含对相关项目的数据和函数的引用(通常是 memory 地址)。
It appears as the generic object
class because it's from the underlying implementation in another language, such that it does not map exactly to the Python function
type. PyTorch 处理跨语言调用和返回。 这种移交是预编译(共享对象)运行时系统的一部分。
这足以澄清你所看到的吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.