import torch
x_data=[1,2,3]
y_data=[]
y_data=[i*2 for i in x]
w是需要计算梯度的
w = torch.tensor([1.0])
w.requires_grad = True
def forward(x):
return x * w
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)
# loss是算出来的张量
l.backward()
# print(l.backward()) none
# 反馈,计算谁需要梯度,比如之前设置为True的变量
# 将梯度存到w中
# 每进行一次反向传播释放计算图
# w.grad是一个tensor,如果直接计算仅构建计算图
print('w',w)
print('\t')
print('\tgrad:', x, y, w.grad.item()) # 梯度中数值拿出来变成py中的标量+
print('\tgrad顶顶顶:', x, y, w.grad.data)
# sum+=l.item()
# 计算平均的时候
w.data = w.data - 0.01 * w.grad.data
w.grad.data.zero_()
# 权重梯度数据清零,此时倒数,梯度不会累加
print("Progress:", epoch, l.item())