设为首页收藏本站

爱吱声

 找回密码
 注册
搜索
查看: 3839|回复: 4
打印 上一主题 下一主题

[信息技术] 继续请教问题:关于 Pytorch 的 Autograd

[复制链接]
  • TA的每日心情
    奋斗
    4 天前
  • 签到天数: 1184 天

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 ; m# g1 }1 |- L5 S( c2 c
    # e( C: k) w( X) p* i  e; ~
    为预防老年痴呆,时不时学点新东东玩一玩。+ x) k& Y; O$ q$ R* s
    Pytorch 下面的代码做最简单的一元线性回归:! H" E) u$ Z+ k& L' O0 l9 ^8 P
    ----------------------------------------------) E+ Y, X6 G; X) p# O; ~$ M
    import torch
    % r( g" f( |3 _9 N' A5 n/ Fimport numpy as np. n# B% F$ v1 q4 x, f
    import matplotlib.pyplot as plt4 O3 t+ [0 ^6 P6 I0 C. z
    import random
    $ j3 a1 w% c+ R8 Z0 g
    5 N5 P) K- M. P% e( ~x = torch.tensor(np.arange(1,100,1))
    ; S! P$ n+ i/ V* L, xy = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15+ P% B2 E- j3 {9 |' u8 I. {1 g

    2 o$ d" }/ r, P: C3 n0 {( }w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b
    0 c5 X0 D8 f# h3 mb = torch.tensor(0.,requires_grad=True)
    ) J. ^! X3 l; D! f$ T' |$ V- r* H8 `  F
    epochs = 100" G. S6 n4 t! G2 ?+ o
    + K" i% }( |4 Y9 l
    losses = []4 v- H9 N" y' n3 O- J& b. ]
    for i in range(epochs):
    - h: R' ~% y3 D  y_pred = (x*w+b)    # 预测9 @, d" A. d5 @5 b* u7 ]3 [
      y_pred.reshape(-1)7 E. P& Y, b6 g( A
    ! ^5 C9 s! j: d3 O7 A  w; y
      loss = torch.square(y_pred - y).mean()   #计算 loss
    5 f1 ?" R; k' U7 Z; S8 X- p4 J' Y  losses.append(loss)
    : j) I7 H$ f+ n3 p  X+ `  
    : ^9 k  `: h! j0 n  loss.backward() # autograd. B; J: ^( M, }) X) R: S& e
      with torch.no_grad():
    . N% B$ Q% g( n" I  K    w  -= w.grad*0.0001   # 回归 w* W5 M3 u/ \2 e  N# E; ~) ~2 h
        b  -= b.grad*0.0001    # 回归 b ! I. _; v$ V% }( \4 T
      w.grad.zero_()    K0 K4 Y1 @9 ]: c# G
      b.grad.zero_(). K, x5 s8 d' z7 z: G: H3 F
    5 m6 N! Z) z' o6 }4 O. g
    print(w.item(),b.item()) #结果
    ; S! V1 R9 }8 Z- t5 C" J
    4 _9 Q  Z0 ]+ XOutput: 27.26387596130371  0.4974517822265625
    ( u/ ^& f) D) W+ K5 L6 C----------------------------------------------0 d, |* x& j- h9 t# A  b
    最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。  R9 B) e; A1 O' g+ w* z6 I
    高手们帮看看是神马原因?
    ! i) J5 ?+ l7 S8 G, C9 L

    评分

    参与人数 1爱元 +10 收起 理由
    老票 + 10 不明觉厉

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑
    $ Y- u2 b5 `. `) @9 U% [3 q# B4 A
    4 S& _4 G2 j3 ~/ h* v9 V( u2 J没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    & o) x1 g3 P0 z' I/ U-------" m% c7 z, ^  U0 ], G
    不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。( r7 k5 j0 p% A5 X! k+ D" @; h
    -------' B' F' ^# k0 b
    算法诊断部分,建议把循环次数改为1000, 再看看loss是不是收敛。有点怀疑你循环次数不够,因为你起点是0, 步长很小。只是直观建议。

    评分

    参与人数 1爱元 +10 收起 理由
    雷达 + 10 谢谢建议

    查看全部评分

    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    4 天前
  • 签到天数: 1184 天

    [LV.10]大乘

    板凳
     楼主| 发表于 2023-2-14 21:52:57 | 只看该作者
    老福 发表于 2023-2-14 19:23
    3 V; F5 K! v1 V7 A9 V& @; s5 y, w没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
      K; b; l# c' Z4 I5 w-------
    + e/ K6 U1 X" q/ x; B" Q4 j, o+ r5 m不好意思, ...
    4 f% |' W; ]9 M" u( ^- r' n
    谢谢,算法应该没问题,就是最简单的线性回归。
    # h& s- _* k# b$ L我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑 ; z  r0 y% l' T- Z" J+ s/ d4 _
    雷达 发表于 2023-2-14 21:52
    + }4 S; L, p8 Y谢谢,算法应该没问题,就是最简单的线性回归。
    * {, s+ r& E4 m我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
    $ b$ D# e; _# Z- [
    . @" T0 b  {) r) u
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    0 y8 {: q( G0 B7 h$ V# P" \- q4 c8 ]. r: V/ v% g3 h
    或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    4 天前
  • 签到天数: 1184 天

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑
    0 s, l& [$ o3 Z
    老福 发表于 2023-2-14 22:006 H% K9 y+ Y3 a8 W+ X5 r- }# c) ~
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    0 x8 n! R8 \9 |, T7 c
    ! @- F  C! N( D$ ]% P: R( j或者把b但的起点改为1试试。 ...

    ' b& `8 ]! @! L, F+ w3 ^' j) e& T6 H+ K5 W. V
    你是对的。
    & Q5 P; E" k& ^5 @) p去掉了随机部分
    2 ?" K" c; V- C#y = (x*27+15+random.randint(-2,3)).reshape(-1)
    6 H& y/ Q# F8 J4 X) |y = (x*27+15).reshape(-1)5 X4 b5 x. [6 F; H  M1 ~

    , X+ O' {# y( }) p4 L7 W" K循环次数加成10倍,就看到 b 收敛了
    6 ]! Z- P- \: s& Bw , b
    , s' e2 s; B, o0 _3 b3 _3 z27.002620697021484 14.826167106628418
    + j  u% M9 Z$ B, @0 W2 m; f! o' n2 h) B8 N% Y
    和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

    手机版|小黑屋|Archiver|网站错误报告|爱吱声   

    GMT+8, 2026-10-21 09:07 , Processed in 0.056739 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表