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()

运行结果如下:

posted @ 2021-08-03 23:11  abszse  阅读(217)  评论(0)    收藏  举报