Python 在张量类中,梯度在何处以及如何计算?

Python 在张量类中,梯度在何处以及如何计算?,python,machine-learning,neural-network,gradient,autograd,Python,Machine Learning,Neural Network,Gradient,Autograd,有一个是我从书中复制的,我唯一搞不清楚的是在反向传播中权重梯度是如何计算的,我知道梯度是自动计算的(autograd),但我搞不清楚如何计算。对于我来说,梯度(对于最简单的网络,假设权重为1_2,其中输入为2位数字,隐藏层为1个神经元,取2个由两个权重调节的值,输出层的答案为1或0(这是一个简单的示例))如下所示: grads\u 1\u 2=layer1.T.dot(pred–target)(layer1–隐藏层的输出) 权重_1_2-=梯度_1_2*0.1,或权重0_1的梯度: grads\

有一个是我从书中复制的,我唯一搞不清楚的是在反向传播中权重梯度是如何计算的,我知道梯度是自动计算的(autograd),但我搞不清楚如何计算。对于我来说,梯度(对于最简单的网络,假设权重为1_2,其中输入为2位数字,隐藏层为1个神经元,取2个由两个权重调节的值,输出层的答案为1或0(这是一个简单的示例))如下所示:

grads\u 1\u 2=layer1.T.dot(pred–target)
(layer1–隐藏层的输出)

权重_1_2-=梯度_1_2*0.1
,或权重0_1的梯度:

grads\u 0\u 1=data.T.dot((pred–target).weights\u 1\u 2.T)
,但在张量类中,我看不到如此明确的梯度计算。你能用下面的例子告诉我它们是如何计算的吗

例如:

import numpy as np
np.random.seed(0)
data = Tensor(np.array([[1, 0]]), autograd=True)
target = Tensor(np.array(np.array([[0]])), autograd=True)
w = list()
print(np.random.rand(2,3))
w.append(Tensor(np.array([[0.54881351], [0.71518937]]), autograd=True))
w.append(Tensor(np.array([[0.43758721]]), autograd=True))

for i in range(10):
    # Predict
    layer1 = data.mm(w[0])
    print('layer1', layer1)
    pred = layer1.mm(w[1])
    print('pred', pred)
    # Compare
    loss = (pred - target)
    loss = loss.sum(0)
    print('Loss', loss, '\n')
    # Learn
    loss.backward(Tensor(np.ones_like(loss.data)))

    for w_ in w:
        print('Grad_w', w_.grad.data[0])
        w_.data -= w_.grad.data * 0.1
        w_.grad.data *= 0
    print('New weights', w)
    break