Day_one b站刘老师Pytorch课程 p4反向传播课后习题及经验分享

目录

前言

代码分享

总结


前言

在b站发现的宝藏pytorch教程(链接在下方),做了一下老师留的课后习题分享一下,欢迎讨论。lhttps://www.bilibili.com/video/BV1hE411t7RN?from=search&seid=11711113722781934174&spm_id_from=333.337.0.0xx


代码分享

import torch

#数据集创建
x_data = [1.0,2.0,3.0,4.0]
y_data = [2.0,4.0,6.0,8.0]

#对参数进行初始化设定
w1 = torch.tensor([1.0])
w1.requires_grad = True

w2 = torch.tensor([1.0])
w2.requires_grad = True

b = torch.tensor([1.0])
b.requires_grad = True

def forward(x):  #用于拟合的函数,题目规定为w1*(x**2)+w2*x+b
    return w1 * (x ** 2) + w2 * x + b

def loss(x, y):  #损失函数计算,同时这一步为计算图的生成
    y_pred = forward(x)
    return (y_pred - y) ** 2

print("before:", 5, forward(5).item())
print("before:", 100, forward(100).item())
print("before:", 1000, forward(1000).item())
print("before:", 10000, forward(10000).item())

#对模型进行训练,经验证,训练500000次大致能较好的拟合到x = 1000
for epoch in range(500000):
    for x, y in zip(x_data,y_data):
        l = loss(x, y)  #前馈,计算loss、动态构建计算图的过程
        l.backward()  #反馈,将反向传播得到的偏导值保存在tensor变量中,并释放计算图
        print("\tgrad:", x, y, w1.grad.item(), w2.grad.item(), b.grad.item())

        w1.data, w2.data, b.data = w1.data - 0.005 * w1.grad.data, w2.data - 0.005 * w2.grad.data, b.data - 0.005 * b.grad.data  #更新权重

        #梯度清零
        w1.grad.data.zero_()
        w2.grad.data.zero_()
        b.grad.data.zero_()

    print("progress:", epoch, l.item())

print("after:", 5, forward(5).item())
print("after:", 100, forward(100).item())
print("after:", 1000, forward(1000).item())
print("after:", 10000, forward(10000).item())
print(w1.item(), w2.item(), b.item())






总结

1、刚开始学习率设置为0.01,结果训练下来无法拟合,调整到0.005后解决问题。

2、大概试了一下epoch为10000时能拟合到100,500000时能拟合到1000。

3、欢迎补充纠正。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值