设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 - s2 f) d# j8 a

    - [! d$ g& n( r. d" L6 n. s, a8 X6 X" R为预防老年痴呆,时不时学点新东东玩一玩。5 o2 o2 F, L3 K3 C: q! }. d% n
    Pytorch 下面的代码做最简单的一元线性回归:2 i! z4 p/ G2 r$ K/ [( S& y6 [1 y
    ----------------------------------------------
    4 ~. ^3 u: H4 {0 Z7 ~- c+ [  Zimport torch! W# F% b& C  ?( e
    import numpy as np8 F; s; L% f  f3 k; m% ~9 {/ {. ~
    import matplotlib.pyplot as plt3 R% L" ?/ k* R- \- v4 a
    import random
    * x" T8 l/ n2 p2 a- X3 H" Q6 [  i8 w( k) T1 q  E
    x = torch.tensor(np.arange(1,100,1))
    0 n  |- ^; Q9 T6 I8 T2 Ry = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15
    * a+ p5 m3 ?! \9 u" V1 q! V8 b& j; H
    w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b9 T4 j3 N# u' F- U& w
    b = torch.tensor(0.,requires_grad=True)
      }0 K7 X4 `/ Z+ Q( o& W" ~, G
    / y3 R% U/ O  U7 @1 _; lepochs = 100% }( c% m: E( {9 E

    ' m* _# q! ~: l9 D4 ilosses = []
    , X- |4 R; _( G. p7 a4 ?5 a, ~for i in range(epochs):
    7 R, `$ ^  o4 I. ~- X! `  y_pred = (x*w+b)    # 预测" A0 C4 G1 l8 {# C* M9 o3 V1 y# n
      y_pred.reshape(-1)3 e+ p' ~8 M$ n, L4 M* b
    % I2 H2 x+ U) G7 E9 g  z8 K
      loss = torch.square(y_pred - y).mean()   #计算 loss
    ( e3 U5 i4 F% d; j* d, ]2 `; [  losses.append(loss)
    4 B' w# X! d# O3 v  q, E  
    % L2 F5 D! Z8 D( }8 [  loss.backward() # autograd
    ; R" p) ?# U' o/ R  with torch.no_grad():1 J/ N8 X/ l9 O! z+ k- x% [
        w  -= w.grad*0.0001   # 回归 w
    ! h* S5 D" q* u1 [3 \2 ^7 B  k2 J    b  -= b.grad*0.0001    # 回归 b ! G( z  c  \( ~/ E9 V
      w.grad.zero_()  
    & [$ _% C1 L+ U7 U& t' o  b.grad.zero_()/ N2 ~8 B" p: G% P( ?( m7 ~
    & J- y5 c" B2 h3 N3 d. K5 l* p
    print(w.item(),b.item()) #结果6 V* C1 I6 q1 D4 G! X
    / p6 D( B- K; Y( J, r, }3 ?
    Output: 27.26387596130371  0.4974517822265625
    , p" u, e7 y* V$ N----------------------------------------------* e7 [* y# B' X+ h6 z4 |" I
    最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。
    & X5 a0 F% c: ^3 f$ V- [# A" [高手们帮看看是神马原因?
    8 d( g0 p" ?. @5 k

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑 3 E: G) ~1 D/ w) C

    ( J. |; V0 Q. a+ L# J没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    ; q! Q5 t8 F/ Z  _7 ]-------
    8 k: e# [$ p- z- w不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。
    + P: M/ a. M3 {1 Z-------- S; `1 t- q% V- h  O9 \1 X1 W
    算法诊断部分,建议把循环次数改为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
    " ^0 |7 N4 ^( Q0 ]没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?! h8 s. Y  B9 d& K% v# h
    -------
    0 w7 }7 H+ m5 h不好意思, ...
    $ G* ]% x2 h1 b1 a
    谢谢,算法应该没问题,就是最简单的线性回归。
    " C5 ^7 G2 s- e. H6 z* y我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    ' K( Y$ V2 r7 t5 T
    雷达 发表于 2023-2-14 21:52
    7 u, d$ j& O# D1 l谢谢,算法应该没问题,就是最简单的线性回归。, K8 F) t! k! }- z
    我特意没有用现成的工具,就是想从最基本的地方深入理解 ...

    4 R  z% V* O) q) J- ?& q8 r# z, M2 d4 R; |6 u7 e; Z5 U
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。3 x: y7 o& @, q% |4 t
    ' R7 P* s* g/ h, [9 J' l+ g
    或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑
    " q2 ]$ R, G9 R9 d' J- P) v
    老福 发表于 2023-2-14 22:001 R( T! k* h1 O' [; P
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
      @3 V6 ?9 |: m6 v- ?  }& J* o( ~, J% \: Q* y  E; Y
    或者把b但的起点改为1试试。 ...

    * ]9 E) x1 ^( s
    ; Q4 Z7 a. ^8 l) g你是对的。
    % ]! y5 U0 E' s; S去掉了随机部分3 ?" p- C0 o$ M% \
    #y = (x*27+15+random.randint(-2,3)).reshape(-1): A$ }: ~: y. ]+ e6 Y
    y = (x*27+15).reshape(-1)9 a& F, }9 b( G. E& D) i
    4 G  P; n" I  [
    循环次数加成10倍,就看到 b 收敛了8 @# A; i! d8 j) g4 k
    w , b% V- P) l" T+ J
    27.002620697021484 14.826167106628418" f+ I3 ^7 V0 }( F3 c

    # S7 H: Z5 W/ r& @0 g和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-9-1 10:21 , Processed in 0.057725 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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