设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑
    & W8 t6 \1 f, F; |. V0 k+ E+ h- W* u  I3 W6 S
    为预防老年痴呆,时不时学点新东东玩一玩。% o+ u2 H7 }& h- F
    Pytorch 下面的代码做最简单的一元线性回归:
    3 \( r7 T2 D8 ^$ ]# F----------------------------------------------4 N/ c6 R* s* r2 ]' Q  Q2 x% P8 w
    import torch* X! z/ h. q$ j3 j: F' G
    import numpy as np
    5 X( `6 c# c! F) [import matplotlib.pyplot as plt
    $ A% K5 a% _  A+ X; ximport random8 `! K# I& i* H3 ?
    7 x4 l% D3 e1 P; _* w4 C
    x = torch.tensor(np.arange(1,100,1))! @4 q+ G' X* I# V$ ]* T
    y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=155 L5 O+ f6 \, h( v% a. X
    ; l% f  ^* r, Z* p' p- u6 J
    w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b6 E+ _7 d( ~6 T1 D4 x1 A" l, y
    b = torch.tensor(0.,requires_grad=True)
    % Z; o$ P1 p6 [5 g4 A% w6 ~1 z: I. @) Q# _
    ) n9 K' \- C! |( k$ `. T( M9 V! n8 q9 Aepochs = 100; x" f7 u* v! J5 Z( H

    , D& Q5 _7 T7 j% s6 J' T! Blosses = []" m/ P  D- l% ~; g
    for i in range(epochs):! }; I# m2 h0 `7 V1 I
      y_pred = (x*w+b)    # 预测$ V; z- H  K" G, a5 |6 N6 A3 _. f
      y_pred.reshape(-1)
    - g' r/ {, R1 ], `+ R
    ! X4 N6 Q/ D" a  loss = torch.square(y_pred - y).mean()   #计算 loss
    6 {) b6 A  e5 w6 c; U0 z. z( U  losses.append(loss)3 v; t4 d' z1 k; k+ T' d4 T
      7 F$ ?8 z3 \4 l, K2 i! ?' L
      loss.backward() # autograd2 Y% }; P) S0 o$ p( F0 W
      with torch.no_grad():4 q; M  p3 A6 B- W1 A! z" H
        w  -= w.grad*0.0001   # 回归 w
    0 ~) G  v* W* d" y% C/ F* w    b  -= b.grad*0.0001    # 回归 b # D/ C+ n# T9 _; Y# \
      w.grad.zero_()  
    , k7 t- D4 J4 C! a0 n2 ]  b.grad.zero_()
    - h8 r# c; S5 z( @+ d
    # {  ]1 H& q7 O! cprint(w.item(),b.item()) #结果5 P- l, A1 A; g" n6 B7 b! b) L# c
    3 u0 M0 \/ M0 c9 }. W
    Output: 27.26387596130371  0.4974517822265625: `; B7 s0 h! C* n) {/ l+ U' L
    ----------------------------------------------* x& Y+ s( U- v) T
    最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。
    : J% g6 O4 K" Y2 S* p# m高手们帮看看是神马原因?) L* }5 L  U/ H* d

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑 5 f' O% t8 ]9 k8 ?) m1 F: h

    5 t* E. x1 g7 U2 y5 J0 x5 {没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?4 F4 u) Z2 w7 N) S
    -------0 D* S; Z; h; R2 C. x: }
    不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。
      v  \+ i/ {  w8 z, ]4 q-------
    8 o  d# R( u+ C& n! T8 e. I算法诊断部分,建议把循环次数改为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% W9 t2 C+ o. q
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    & w% P5 f' p. l6 U7 u-------$ c6 T( ~" f8 `5 E* b3 w6 m
    不好意思, ...

    ; k4 E2 V9 `) u4 j) U" g谢谢,算法应该没问题,就是最简单的线性回归。
    ! K& E' k- ?! N1 @, B我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑   ?4 i, U8 w1 l$ U8 t/ m
    雷达 发表于 2023-2-14 21:52) |' m+ q7 D0 g* f, W+ n8 b; r6 f; m
    谢谢,算法应该没问题,就是最简单的线性回归。
    + f3 D) G1 h; n$ U我特意没有用现成的工具,就是想从最基本的地方深入理解 ...

    ( z- f8 ?& C& ~0 L1 b% _/ e5 g2 w3 W" z; I: b$ F1 {4 e6 ^# t+ p
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    ( s8 G- e5 D4 @: z- V
    3 I  B9 |+ X( e或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑   a# w6 d6 \& ^$ b
    老福 发表于 2023-2-14 22:00
    " L* ]  F# {/ V+ t) F刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。: v$ A- N5 q" p# y9 n

    1 t+ I% E8 T+ L或者把b但的起点改为1试试。 ...
    ! d/ S7 S9 {6 W' w: D: R

    3 R, }1 O1 n2 G5 q" e/ m你是对的。
    " A$ Q3 c) K+ o5 [2 Z8 u; F8 f去掉了随机部分
    9 P( i$ E1 P4 h, O& b. l$ _/ v#y = (x*27+15+random.randint(-2,3)).reshape(-1)+ N- l. R$ E6 p( `8 G, ]3 D
    y = (x*27+15).reshape(-1)' u9 l% U. {: O" A  h

    3 O) t7 |& }- B% n循环次数加成10倍,就看到 b 收敛了: z: M4 I3 y. V# t4 x3 s
    w , b
    $ D9 U* x; G7 s: h27.002620697021484 14.8261671066284184 W  D( J- d, X2 U0 G# Q

    - f! z2 f1 c$ A! I0 b和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-6-24 18:00 , Processed in 0.062393 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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