设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑
    " C# g1 N% D: W+ F5 P) b( ?/ B1 T3 \9 K; p/ D
    为预防老年痴呆,时不时学点新东东玩一玩。8 F- a6 h0 U1 D' I. i  E
    Pytorch 下面的代码做最简单的一元线性回归:
    0 N* ?0 x" M  Z5 k/ y7 c----------------------------------------------" ~% F5 X' V" A. G; \1 V( X
    import torch
    / @- S( W- k( }import numpy as np0 S. M$ M1 N% G8 s2 \& Z$ Y5 p" R3 {1 X
    import matplotlib.pyplot as plt
    & B2 g$ D8 ?  W- B  l# Rimport random6 W* d) U# |  B$ g2 D- h3 Q
    5 {$ P0 c2 [1 c2 E5 w0 B: B
    x = torch.tensor(np.arange(1,100,1))3 M5 p$ I1 E4 z! y7 m
    y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=153 ], Z2 B& C' e: x2 {! x
    ! i- d% E6 @+ ^* W* q( s" W7 z6 f
    w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b
    8 w4 a% j  {( K  s! ~* ]b = torch.tensor(0.,requires_grad=True)
      ]2 m' x7 I. Y" J$ T( A4 e& M0 c% j/ V. s# F7 e- }/ W8 f
    epochs = 100' i+ S* j1 `& L1 T

    # L7 i  |* Q; ]* v7 l' alosses = []2 i1 }: I' l5 }% U# i0 U8 W4 E
    for i in range(epochs):
    : i: `9 l. V$ H2 Q  y_pred = (x*w+b)    # 预测
    : l+ D; ?3 W. k  y_pred.reshape(-1)1 n. a/ F# P& G9 H6 l, _

    % J, P# h2 \0 P* I  loss = torch.square(y_pred - y).mean()   #计算 loss
    8 V/ V; D3 K9 D- ^; C1 G, R/ ]  losses.append(loss)
    : k) n0 t6 Q) S% [2 Q3 F& f  
    $ E5 M6 {4 R; p7 n! b  loss.backward() # autograd4 U# J, \) b6 t3 _0 T( r
      with torch.no_grad():
    * n# I2 l1 `% Z' z2 D. E    w  -= w.grad*0.0001   # 回归 w  c+ K" t* e) F6 v8 n1 l5 z
        b  -= b.grad*0.0001    # 回归 b
    % z- H" i9 U6 |" ~/ `: k& I  w.grad.zero_()  6 u2 [+ `( z! [! `* V; x) C
      b.grad.zero_()
    + k$ A6 X: F# A. |3 J" \7 m2 b  m" a; `# [3 x2 C4 R' F
    print(w.item(),b.item()) #结果6 F8 q# ?# Z/ v" V4 p
    % B$ F. l$ k: b5 t% V
    Output: 27.26387596130371  0.4974517822265625" z2 x7 u, X/ [$ Z& q* o& h
    ----------------------------------------------
    : h4 Q: z4 v  g  m+ n最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。
    8 x% Y0 M/ ~) s; l高手们帮看看是神马原因?; E4 r; X5 X9 @6 n: j& P- G

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑
    ) i/ y% p, N) }( J$ x- O/ O9 O# K& a" B3 V5 U  g; h# c5 l
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    ; K3 t" S6 X/ Q0 V-------' v" N4 C% D8 \1 G
    不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。3 A% X& J3 R  E# ^
    -------9 @7 K5 h, ~4 X) n
    算法诊断部分,建议把循环次数改为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:239 |/ C% K, o9 u& f$ K7 U, p
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?3 {$ }& S2 T9 ]( N/ D3 m
    -------
    % w4 r7 e  _0 G不好意思, ...

    % j3 v! J5 G, O" u2 {' _3 x谢谢,算法应该没问题,就是最简单的线性回归。
    * x9 D0 y( d# p- a. j: L我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑 4 B) R; j- o0 f, h  m) Y% K9 G
    雷达 发表于 2023-2-14 21:52
    ( c/ O; b/ I8 D谢谢,算法应该没问题,就是最简单的线性回归。4 e2 t. c, r2 C. x( I
    我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
    ) {2 {% b4 h5 V) _

    , P, [* c" n$ e0 q1 v' g' i2 X9 T( s刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
      v" I6 R7 u* R5 ]5 I
    & Q1 Y# y' p- z, o6 F! I或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑 9 ?, h4 ?8 |8 |0 u5 J  w7 J4 M
    老福 发表于 2023-2-14 22:005 n( z2 B, N, N4 B: ~' E- B# a
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。' [: {  [1 H: ]) B- C
    6 [; M' P' `6 e; |- V- W' q
    或者把b但的起点改为1试试。 ...
    ! Y4 |5 @& H3 M% R( M

    # v7 d/ Y+ \9 h你是对的。* A# B5 H( e' d; Q- {2 I) C. o
    去掉了随机部分
    1 X% o: I4 x; I6 r" o* y#y = (x*27+15+random.randint(-2,3)).reshape(-1)
    8 |, n8 Y, c; b( Uy = (x*27+15).reshape(-1)
    " b; _6 R! Z$ w  h$ ]( u" s3 N# Y* ~% ^' a- K, ?# _: \/ y
    循环次数加成10倍,就看到 b 收敛了4 o( ]% S- V+ ^4 }! |9 k
    w , b, u$ E, s7 V2 P7 ~
    27.002620697021484 14.826167106628418
    . `$ }, e6 F6 D# O. R9 N) L" }  p7 A4 H! \
    和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-3-16 21:34 , Processed in 0.054134 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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