设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑
    1 s9 u0 n- ?* r; P
    ; j+ i! ^% u' Y- J5 r6 t9 J为预防老年痴呆,时不时学点新东东玩一玩。* ?* {* l4 X6 u. c" _2 X5 p
    Pytorch 下面的代码做最简单的一元线性回归:$ ~1 S4 s9 w! m
    ----------------------------------------------( e6 _6 Q" B$ t: _) Q' y
    import torch5 U) o% P. q: o+ j
    import numpy as np9 ~; Q5 j4 I  d1 s2 H
    import matplotlib.pyplot as plt9 v) Y+ h1 g8 ~0 s+ W" a
    import random  E( |5 B" @; V1 K1 ?% j6 q

    . o: q3 f" e* v3 E! Ux = torch.tensor(np.arange(1,100,1))
    1 o5 @: N" x( ly = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15
    # B7 w+ {9 T' v, H% U& \& S
    % V( \3 _% k" b/ U$ ^& sw = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b* p  d4 _, ?( Y% m
    b = torch.tensor(0.,requires_grad=True)
    7 e- n1 |* s4 W# V9 j
    * U/ g5 f- ~0 f  h. ^9 t7 depochs = 100
    & P, ]4 p# G  j% s) l% u: W  r2 E  Y; p* [8 |" Q  G5 ]
    losses = []
      u3 x/ ?4 t  ^6 W4 z# cfor i in range(epochs):2 W# c0 v, X, I! O0 E) w, B* k
      y_pred = (x*w+b)    # 预测
    ( ~& \7 F5 K& p6 `% j1 g6 Y3 `  y_pred.reshape(-1)
    ; I& ^$ I" a6 N: v1 K + x. M* Y# \- Y/ v# A" T5 J
      loss = torch.square(y_pred - y).mean()   #计算 loss  B: {$ x; X$ C; r( t
      losses.append(loss)+ ~. ^: {  u4 K: h/ {! I4 s& R* F1 `
      
    - ^- C3 Q2 g5 G  n  J) W% n  loss.backward() # autograd
    " |1 g# q+ \9 G1 z  with torch.no_grad():
    ; M' \$ x9 L# V% U2 N    w  -= w.grad*0.0001   # 回归 w
    ; ?% R' [: a( w1 `' v" z7 i    b  -= b.grad*0.0001    # 回归 b - u) Y) K) R0 f6 V6 t  _& x6 c% m
      w.grad.zero_()  
    + a  x$ g- I# M; m9 B0 L( t  b.grad.zero_()% m7 X0 |( Q6 s( f! \8 t% F
    9 G1 w' }! ?: @" K; W
    print(w.item(),b.item()) #结果) W5 T* V1 E1 F. [
    + {; O7 W" y3 p0 o
    Output: 27.26387596130371  0.4974517822265625" p* N/ B2 L/ I) d( b1 {* Q
    ----------------------------------------------
    ! J4 T8 I$ X3 o4 }; p2 N9 ]最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。( [& x; J2 z" h3 b
    高手们帮看看是神马原因?
    ; d& n6 ~0 N, N6 v- m: M! J: M

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑 ( ~0 ^) W8 U+ S$ J: S
    , \% ^) K, L5 O2 |
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    ' R$ S+ i6 Y) {6 J& i-------: v7 `9 c7 F, B
    不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。* j1 u7 e* {0 Z
    -------
    3 r2 Y$ l1 W1 ^4 K' V- Z6 G算法诊断部分,建议把循环次数改为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:233 N5 U3 p6 g3 L( X' V6 D4 J/ M
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?/ N; p3 s  v) c% ]( H
    -------
    8 D- T! u8 \5 {. C7 T8 j不好意思, ...
    # y5 z- k" i) O* z
    谢谢,算法应该没问题,就是最简单的线性回归。( Q& H: b- P5 d- k9 ^
    我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑 * l# g  _2 ~9 b5 H0 C4 b
    雷达 发表于 2023-2-14 21:52. t9 r! C1 @% ~' E% [8 p* I! |
    谢谢,算法应该没问题,就是最简单的线性回归。6 M4 ~( u& _; g, Q0 P4 S
    我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
    + \) [5 V6 c% }5 K$ \' `
    3 C/ l" K4 I6 @3 \% y/ b% M" p5 \
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    / Z) E" `2 @* S, z/ e) @0 _6 d; p' ]" T
    或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑 5 \& v3 l7 t/ z' c! J
    老福 发表于 2023-2-14 22:00
    * q8 f1 N! q/ [  G/ s2 M刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    / y1 C5 ?( I4 U9 O7 x5 m2 y2 r+ w8 X# Q+ w7 z" d2 \
    或者把b但的起点改为1试试。 ...

    $ e0 }0 h1 m: y5 b; v4 }6 A2 c0 n, K+ p. y+ O7 T" r
    你是对的。
    + i' M% E6 \2 K. A" M" S& l5 }. H0 [去掉了随机部分% F* W& _! y$ u2 ~" [( L5 b! a' Q
    #y = (x*27+15+random.randint(-2,3)).reshape(-1)4 w  ]4 e# N6 q- U
    y = (x*27+15).reshape(-1)+ n) s8 ~" P  t# J
    8 J) R9 Z0 Y! p; c$ z
    循环次数加成10倍,就看到 b 收敛了  Y' O) j2 }+ e" D
    w , b
    " [- w5 d; L, U9 Y' G27.002620697021484 14.826167106628418
    - r3 G4 C4 j' p. G& E) b4 v9 F: }" h! c# e. J
    和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-7-22 11:03 , Processed in 0.063724 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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