设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 % L3 i2 q. G2 u- _  F! P& K/ M

    . ~  ?, c: w0 A; H* s为预防老年痴呆,时不时学点新东东玩一玩。
    , ]' z( H6 I8 _0 l1 R' ?Pytorch 下面的代码做最简单的一元线性回归:
    ; ]+ b8 m3 V; a. D% Q----------------------------------------------6 c- R( Z& V' s* z9 I
    import torch
    3 s, p9 `; J. I5 n9 s3 Wimport numpy as np# }* F! B( h2 Q5 l/ t
    import matplotlib.pyplot as plt' L" z8 ?2 Y9 ^$ ?" Y
    import random3 m9 R- J& z# b4 U' ]' C' M
    ' W! r" X/ s, v" Y( V+ y9 l. U
    x = torch.tensor(np.arange(1,100,1))
    2 ~. P" s( ]; m% a. iy = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15* @/ c8 @2 o0 x6 A
    , g) O7 T. C6 T# }8 \' [' t4 y9 y
    w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b
    ; t+ O  }( v* v- S7 ?" X/ i7 gb = torch.tensor(0.,requires_grad=True)7 E( J7 w0 J( W/ C

    " U9 c/ p( z0 y% n9 qepochs = 100  M. m& S7 E9 Z, \" C* F3 Y, _

    & \7 i& X. X2 k9 I" alosses = []
    0 X3 t/ _* h) N9 `8 j1 a3 k# Mfor i in range(epochs):
    1 H% r! A* G% D* q5 D% h  y_pred = (x*w+b)    # 预测) B0 i- K  k! o
      y_pred.reshape(-1)
    : U! j0 }6 \& t) h1 H/ z7 Y2 h : {2 m4 [% G* y
      loss = torch.square(y_pred - y).mean()   #计算 loss
    % L' Z0 ^* t) Q) a) ^  D, d  F  losses.append(loss)' ?) A( X$ u$ G; _5 e
      3 N- _; Y# {+ |- K; Z' z/ r! u
      loss.backward() # autograd
    : h9 _. d4 i$ @1 R* d' }1 w9 j  with torch.no_grad():3 F- p8 Z* H8 J; i. x$ n4 f! S6 {
        w  -= w.grad*0.0001   # 回归 w3 K4 b( f! B7 a& g- T
        b  -= b.grad*0.0001    # 回归 b % b1 ~  c$ g- f2 E1 T9 W# w$ j
      w.grad.zero_()  
    5 [. \. [& ^% i  b.grad.zero_()
    + N0 E( D1 X# o; B( a. d0 l* O2 q9 S
    print(w.item(),b.item()) #结果
    7 g# I( B/ I* t) l1 a% K3 L. j+ m
    Output: 27.26387596130371  0.49745178222656259 b" A2 v  q0 l: D  n+ |) \" V
    ----------------------------------------------0 C3 J1 S/ W  t7 r1 u
    最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。
    , }4 S' O" Y" u高手们帮看看是神马原因?
    . X' m! G4 o: p8 w0 n

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑 4 m* f! b2 a0 o9 P2 n
    0 [2 @' E$ T6 Y! x0 }9 c2 U: F
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    - a1 F9 Q! |; E$ H-------7 h% h) G2 p) Q' J# ]5 z2 ~
    不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。
    6 e6 l% |! ]% N( t) Z  I$ [-------/ j, S! R2 v/ \
    算法诊断部分,建议把循环次数改为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
    1 j9 n5 `5 z  ?, q% N/ n  @4 \没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    $ ^  X; i: F7 O8 n8 ?4 L-------  h% Q* k  j; ~2 F% i& x
    不好意思, ...

    6 C3 \5 y( R4 i/ `( c3 h谢谢,算法应该没问题,就是最简单的线性回归。6 L. r& p# q( ^: A5 V
    我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    ) ^4 C* t2 N% d8 @
    雷达 发表于 2023-2-14 21:52
    / D/ N- Z  S/ ]9 t/ v/ e; b谢谢,算法应该没问题,就是最简单的线性回归。
    * y, y; ^( V; a$ f- `: r我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
    2 j( E* T8 [: [' s

    / l* K' c4 V: S4 S& b刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    % R8 `$ o% f7 }: M- `, `
    ; p4 L2 z  g* T9 e/ i或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑 . y* P6 }% ?  y- A1 H, _
    老福 发表于 2023-2-14 22:003 w, t/ W7 y9 ^* x+ \+ P
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    9 H: M- s+ U1 r3 }1 h" L7 M3 G
    8 ?4 M" y' l9 T或者把b但的起点改为1试试。 ...

    9 _# _) g; Z; s( Y. O* d6 d, g
    9 X+ z  ]& _1 Q# J# f+ C你是对的。
    " q3 b% X" a) A' G/ d去掉了随机部分
    ' f, V0 e1 N8 K6 H' K) d/ Z, ]#y = (x*27+15+random.randint(-2,3)).reshape(-1), b* O9 L4 u/ ]8 @. i9 Z2 F& T& @" H
    y = (x*27+15).reshape(-1)
    ! J% a3 A+ Q. h  F" }: X0 w$ e) F
    循环次数加成10倍,就看到 b 收敛了
    9 ]3 l" Y7 {0 t7 \) Hw , b
    1 Z& i& a+ [6 D4 x( Z/ Z27.002620697021484 14.826167106628418# z' G1 x' S7 D* W8 _! |+ s
    . Q: C" C4 k. F: }& Z
    和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2025-12-17 10:44 , Processed in 0.029099 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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