深度学习入门 史上最简单通俗易懂的梯度下降 实例 pytorch实现

一个神经网络大致流程为:

  1. 初始化参数
  2. 抽选训练数据
  3. 拟合
  4. 计算Loss
  5. 梯度回传
  6. 参数更新
  7. 重复第2步开始

定义一个简单方程y = 6.66x + 8.88,手写一个简单神经网络来找到他的参数a = 6.66, b = 8.88

import torch
import random

#初始化参数 a = 1, b = 0
a = torch.ones(1,requires_grad=True)
b = torch.zeros(1,requires_grad=True)
lr = 0.01	#学习率
for i in range(300):
    x = random.random()
    preds = a * x + b
    y = x * 6.66 + 8.88
    loss = (y - preds) ** 2
    loss.backward()
    with torch.no_grad():
        a -= a.grad * 0.01
        b -= b.grad * 0.01
        a.grad.zero_()
        b.grad.zero_()
print(a.data, b.data)
//tensor([6.5724]) tensor([8.9243])

训练300轮后,已经很接近原始a ,b了,观看其中的训练过程

#初始化参数 a = 1, b = 0
a = torch.ones(1,requires_grad=True)
b = torch.zeros(1,requires_grad=True)
aa = []
bb = []
lr = 0.01	#学习率
for i in range(300):
    x = random.random()
    preds = a * x + b
    y = x * 6.66 + 8.88
    loss = (y - preds) ** 2
    loss.backward()
    # print(a.grad,b.grad,loss.data)
    with torch.no_grad():
        a -= a.grad * 0.01
        b -= b.grad * 0.01
        a.grad.zero_()
        b.grad.zero_()
        aa.append(a.data.clone())
        bb.append(b.data.clone())
print(a.data,b.data)
plt.plot(aa,label='a')
plt.plot(bb,label='b')
plt.legend()
plt.show()
//tensor([6.5724]) tensor([8.9243])

请添加图片描述
将学习率调高 lr = 0.08
请添加图片描述
训练速度大大增加

未完待续…

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值