PyTorch深度学习实践(四)课后作业
线性模型基础,引自视频:刘二大人——《PyTorch深度学习实践》完结合集(P4)
要求
- 计算模型为
的导数 - 绘制出loss随训练次数变化的曲线
代码如下:
点击查看代码
import matplotlib.pyplot as plt
import torch
# 初始数据
x_data = [1.0, 2.0, 3.0]
y_data = [2.0, 4.0, 6.0]
# 初始权重,可随机生成
w = torch.tensor([[1.0], [2.0]])
b = torch.tensor([1.0])
w.requires_grad = True
b.requires_grad = True
# 前向传播
def forward(x):
return x * x * w[0] + x * w[1] + b
# loss函数
def loss(x, y):
y_pred = forward(x)
return (y_pred - y) ** 2
lr = 0.01 # 学习率
loss_list = []
# 训练之前的预测结果
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.backward()
print("\tgrad:", x, y, w.grad.data[0].item(), w.grad.data[1].item(), b.grad.item())
# 更新权重及偏置
w.data = w.data - lr * w.grad.data
b.data = b.data - lr * b.grad.data
# 清零梯度值
w.grad.data.zero_()
b.grad.data.zero_()
print("Progress:", epoch, l.item())
loss_list.append(l.item()) # 将本次训练之后的loss值加入队列,便于后续绘图
# x训练之后的预测结果
print("Predict (after training)", 4, forward(4).item())
epoch = range(len(loss_list))
plt.plot(epoch, loss_list, 'r', label="Loss")
plt.legend()
plt.show()


浙公网安备 33010602011771号