PyTorch实现反向传播
- 反向传播主要体现在l.backward(),调用该方法后w.grad由None更新为Tensor类型,且w.grad.data用于后序w.data的更新
- l.backward()会把计算图中所有需要梯度的地方都会求出来,然后把梯度都存在对应待求的参数中,最终计算图被释放
实现代码:
import torch
x_data = [1.0, 2.0, 3.0]
y_data = [2.0, 4.0, 6.0]
w = torch.tensor([1.0])
w.requires_grad = True
def forward(x):
return x * w; # w是一个Tensor
def loss(x, y):
y_pred = forward(x)
return (y_pred - y) ** 2
print("predict (before training))", 4, forward(4).item())
for epoch in range(100):
for x, y in zip(x_data, y_data):
l = loss(x, y) # l是一个张量,tensor主要是建立在计算图,计算损失
l.backward()
print('\tgrad:'