我是Chainer的新手。我正在按照指南做。但是,我发现了一些我认为很奇怪的东西。在 Docs » Guides » Variable 章节中,我编写了 blow 代码:
x = Variable(np.array([[1, 2, 3], [4, 5, 6]], dtype=np.float32))
y = 2.0 * x
# y.grad = np.zeros((2, 3), dtype=np.float32)
y.backward()
print(x.grad)
print(y.data)
然后,有一个错误,错误信息是:
TypeError: unsupported operand type(s) for *: 'float' and 'NoneType'
当我们删除带注释的符号时,代码是:
x = Variable(np.array([[1, 2, 3], [4, 5, 6]], dtype=np.float32))
y = 2.0 * x
y.grad = np.zeros((2, 3), dtype=np.float32)
y.backward()
print(x.grad)
print(y.data)
然后一切正常。
所以似乎必须将初始grad分配给y的变量。我觉得这很奇怪。它应该是一个作为默认值吗?
我正在寻找你的解释,非常感谢你!