如pytorch的自动求导框架,在求loss层的时候,一般都是一个矩阵到张量(loss)的映射,而且这一层一般都是没有需要学习的参数。但是这里还是会有许多操作,如sum,mean…等操作。我的疑问是:误差反向传播我并没有写,这里是不是就是pytorch的自动求导功能。2. 在求loss的操作中,只能用torch.sum(),torch.mean()等pytorch自带的操作,能否用numpy的操作代替。
代码
import torch
from torch.autograd import Variable
import numpy as np
def csum(input):
# res = input.sum()
npinput = input.detach().numpy()
res = np.sum(npinput)
res = torch.FloatTensor([res])
return res
data = torch.randn((5, 5), requires_grad=True)
res = csum(data)
res.backward()
print(data.grad)
报错:RuntimeError: element 0 of tensors does not require grad and does not have a grad_fn
要有grad_fn属性,所以用numpy实现操作的时候,需要自己实现误差的反向传播