设为首页收藏本站

爱吱声

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

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

[复制链接]
  • TA的每日心情

    2025-9-22 22:19
  • 签到天数: 1183 天

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑
    " q( {: U7 P$ [2 O- {! ~
    3 y6 g7 f4 k; _' x为预防老年痴呆,时不时学点新东东玩一玩。
    4 E+ m+ R( S. C* PPytorch 下面的代码做最简单的一元线性回归:
    ; v! c6 e' |% A* F- k----------------------------------------------
    4 D+ k8 }3 C! ?9 q: wimport torch
    $ L' W. V& U+ j, Z) N) Eimport numpy as np. e3 J+ W/ y! n
    import matplotlib.pyplot as plt( Y1 @7 X/ a0 V5 D) i* V$ |
    import random
    % p( @+ z/ z: v% f  _
    + P5 M/ ?4 m3 M2 s+ V* \x = torch.tensor(np.arange(1,100,1))
    6 _3 u7 x; b3 z7 P% o" v/ `y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15
    - ?6 @: @  I" ]7 X2 v) K. V
    * A. _) K( P& B7 n: {w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b% C* Q: ~# `  M% U, `! H+ f
    b = torch.tensor(0.,requires_grad=True)
    ! U8 \) `. t( y' E
    ( U6 G0 e+ u) s- |; r5 zepochs = 100
    ; b  X$ v9 ^" W. v8 a/ R, g) s4 r- O1 P$ H& z! {! x$ y, a
    losses = []
    % _3 w( R& y  `% k! r% Lfor i in range(epochs):3 p; T. G" [4 f# y( |4 L9 b
      y_pred = (x*w+b)    # 预测
    ) i3 v, i8 i# Z! T1 |) Z  y_pred.reshape(-1)
    0 @8 W. u% H/ Q $ O4 Z  L! x$ u! U$ S" R9 j
      loss = torch.square(y_pred - y).mean()   #计算 loss5 C5 U+ k! w4 w/ g. h( _8 O. s
      losses.append(loss)
    ; k0 l6 C  p% z  L  
    5 E6 u  Y8 d' n3 p: ?: y: @; Z  loss.backward() # autograd- r. O8 F, [; \( ^8 Q& s
      with torch.no_grad():
    $ D7 C, o# n0 g& Z( T    w  -= w.grad*0.0001   # 回归 w
    % E( [, M) @) s; }! G6 `* p8 {+ n    b  -= b.grad*0.0001    # 回归 b
    ' x' {9 x3 d$ i5 ?! b  w.grad.zero_()  , C$ X5 [9 w) f2 F5 Y
      b.grad.zero_()7 Y, ^1 z; |% s4 w
    / [, V  V4 x, T- F3 F2 X* N
    print(w.item(),b.item()) #结果
    0 U( D2 \4 B* y) x7 }6 M! ?' b& O3 k1 H
    Output: 27.26387596130371  0.49745178222656255 X' M7 e( H0 P7 J' B% `
    ----------------------------------------------
    ! S: M" l- q* a  a3 o9 d: [最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。1 \; Z0 t( q3 n4 `9 z
    高手们帮看看是神马原因?
    ) |4 Z/ v( }6 O9 x! r! J7 |

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑
    . j. R* u% w) Z/ Y1 M
    . \- ]$ J- O: o) p6 T0 v- m/ y5 T没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?  x% }  |2 S' J+ Q/ k4 A& _: B( @
    -------9 ?3 W4 C. C( k8 @
    不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。: h0 l, u$ P7 i
    -------
    7 t0 e$ |7 w# z7 M: r算法诊断部分,建议把循环次数改为1000, 再看看loss是不是收敛。有点怀疑你循环次数不够,因为你起点是0, 步长很小。只是直观建议。

    评分

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

    查看全部评分

    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2025-9-22 22:19
  • 签到天数: 1183 天

    [LV.10]大乘

    板凳
     楼主| 发表于 2023-2-14 21:52:57 | 只看该作者
    老福 发表于 2023-2-14 19:23& p1 |! }" I0 f4 R' x6 Z$ c( O
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    % b5 C/ `: _; f+ f, Y-------4 E5 J" k8 t% S0 P
    不好意思, ...

    ! n+ K" f) Y5 Y" T& |谢谢,算法应该没问题,就是最简单的线性回归。
    ; x2 s' x0 R& _1 ?% g我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    ! M  w' ]( S1 ~: i) d5 F7 E
    雷达 发表于 2023-2-14 21:52
    - |) Y% A# p% G5 G6 r谢谢,算法应该没问题,就是最简单的线性回归。
    4 h8 n; d$ w3 |; A我特意没有用现成的工具,就是想从最基本的地方深入理解 ...

    - Q+ z) _; J+ o! v( ?/ b# [$ f
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。8 G+ f) V" \  ^8 o5 x% v0 o, o

    ) W* ^% Y0 m! @! _3 Z; d6 }或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2025-9-22 22:19
  • 签到天数: 1183 天

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑
    ( u3 x& U4 s0 m8 w3 K+ N! X6 \
    老福 发表于 2023-2-14 22:00
    ! f2 u! ]" X/ z! C& N刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。6 @. E: D7 O6 w
    2 G9 x. v, w( g, n6 S, h
    或者把b但的起点改为1试试。 ...

    " k; ?8 n2 D* z4 N$ N; Z7 _& }9 X% k1 U. v3 e" T
    你是对的。
    ( ^0 z8 `2 S: x& c4 U5 c; G去掉了随机部分
    5 n& Y' Y/ D( d- ~6 o. o; u#y = (x*27+15+random.randint(-2,3)).reshape(-1)
    ; x+ ?- ?) B6 z3 Y% C+ Xy = (x*27+15).reshape(-1). H. p# e0 B" p- q7 k' d' a

    + L9 ?' m7 ]0 s9 i7 a8 h循环次数加成10倍,就看到 b 收敛了
    & L3 e* @3 m/ z* M6 _$ I, ww , b
    # Q1 A! A* n8 \( q" S, O27.002620697021484 14.826167106628418
    . X5 ]8 o' r3 l- z/ w
    , Q. [$ g( [6 R; M; N" b和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-6-16 13:19 , Processed in 0.065058 second(s), 22 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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