设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑
    ' x' P3 ~! H7 y8 Z5 K; F& j  o
    " P. ?6 D7 n7 l, c$ S* K为预防老年痴呆,时不时学点新东东玩一玩。
    ) D7 m  d( r  N7 p8 U" rPytorch 下面的代码做最简单的一元线性回归:
    , D2 O9 Y$ n3 x( R' U- r----------------------------------------------
    : J: w# K8 R5 L9 w1 F6 fimport torch* I/ z$ V0 I6 j/ A* ~3 x0 X7 r
    import numpy as np- X& i+ o2 @( @* ^1 q( G
    import matplotlib.pyplot as plt
    2 S; L* j- O4 G  S0 V7 Iimport random, W( k3 P/ h; v: t

    ' e0 }; z. j- @8 wx = torch.tensor(np.arange(1,100,1))
    2 H4 j. X- b& T3 w/ Vy = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15
    0 X5 E  J' r" o' N, K( y
    4 P4 d# \9 d7 b/ W% G1 I4 n8 `; Q' Jw = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b
    $ ?5 N: A& j9 h1 W% L, _" Sb = torch.tensor(0.,requires_grad=True)* w9 F5 s% A" i( u' M" Y

    + h# K3 Z! F2 J4 Tepochs = 100
    # U2 n# ?+ m$ d7 K- s7 S8 O+ P4 R3 u+ M8 s; g
    losses = []3 z/ `6 A  q) C3 D! H: ]; ~
    for i in range(epochs):
    ) F; g% u) F' N+ h9 q3 z$ N  y_pred = (x*w+b)    # 预测0 z  J/ G& p* ]' f
      y_pred.reshape(-1)8 K2 Q5 @) b$ E

    ' o( V5 l- g2 i  loss = torch.square(y_pred - y).mean()   #计算 loss. v1 B7 ~4 d2 g* z3 y/ o1 D2 E
      losses.append(loss)
    ( `1 U- D3 ^, z$ K( @  
    : }8 i. L1 T7 j$ T  loss.backward() # autograd
    . j- E8 K; ^& ]6 q/ p' W4 V* `  with torch.no_grad():
    ( r1 P% A& q0 V" |% ?# C/ N    w  -= w.grad*0.0001   # 回归 w
    % z$ l. r9 K+ S+ z: c, M1 \    b  -= b.grad*0.0001    # 回归 b
    6 b' b8 g) }  _; R  w.grad.zero_()  ) I6 N. [) D0 \: C; }# s
      b.grad.zero_()
    : J% s# S5 P2 D$ Z! }; r7 p  _0 ]) d3 \/ ]
    print(w.item(),b.item()) #结果
    $ R3 K- r7 s2 j4 E& T% E
    % j  ^  E6 v5 cOutput: 27.26387596130371  0.4974517822265625# C/ d2 {2 x* O
    ----------------------------------------------
    8 Z8 o$ X. o6 P& p1 ^$ z# @最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。- u  ~" s/ C# W3 l) k! R: t
    高手们帮看看是神马原因?1 f; }. _( c8 r+ l) `9 V' ~

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑
    3 H' Y! q- |7 B& y0 o/ W' _
    : d5 w+ U2 z5 I* m6 f* P* W没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?, {7 n) _3 j4 L$ E0 o
    -------
    ) H# Y/ O' ?$ P; X) q* b/ v$ y不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。; p( ?+ _9 _. t+ g; \
    -------! m. b  ~$ ?: ?, V: ?8 y1 g$ ]  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
    / [8 K1 y6 O7 q1 S! n' I9 _没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?) z; ~- s" P, J: e: g
    -------
    4 _7 B1 }4 H- {7 B0 a6 @6 v( v不好意思, ...
    % w4 k2 u" G+ F5 v  m* Z% j' |
    谢谢,算法应该没问题,就是最简单的线性回归。8 g. \- F# I7 j4 u, y) F# Y
    我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑 1 O4 Z. R1 n+ }5 @
    雷达 发表于 2023-2-14 21:528 H; x# }" E6 v' q) k+ M7 K1 G, L, X* M
    谢谢,算法应该没问题,就是最简单的线性回归。* w" w+ e5 C" z/ c4 X. L6 j/ g( Z2 L& M
    我特意没有用现成的工具,就是想从最基本的地方深入理解 ...

    ) ~( s# p* a( V6 Q
    . J+ N2 I3 G3 E& E刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。6 d' V) e) Y- o

    3 _# l, C* g: o* u或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑
    , A" \9 A/ C( T$ P
    老福 发表于 2023-2-14 22:00% i7 r: m7 Q8 N, R0 c. A" S6 U: ~
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。& [+ C9 _3 [( n" X7 T( q1 K
    , P. D6 s$ ]' J! u! }8 }
    或者把b但的起点改为1试试。 ...

    ; f8 U' n2 i* @4 m: `9 Q
    % Z& J1 y# _/ ^' ?3 T你是对的。
    2 D- l; B. o6 j* s' Q  K去掉了随机部分' m0 f' X9 M3 s- B  W/ N' G
    #y = (x*27+15+random.randint(-2,3)).reshape(-1)
    1 N# J; d& F8 [* Dy = (x*27+15).reshape(-1)
    ' v* v/ V3 V+ Q6 z5 ?7 l6 F( C4 a, M* J
    循环次数加成10倍,就看到 b 收敛了
    / P5 k8 ]. w# F2 Bw , b
    , y! {( X! ^+ e- f1 l! E27.002620697021484 14.826167106628418
    4 v) B7 {8 V1 R6 i  g, R
    . r$ `! s8 f$ `  c% t和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-8-29 10:16 , Processed in 0.055806 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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