设为首页收藏本站

爱吱声

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

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

[复制链接]
  • TA的每日心情
    怒
    2025-9-22 22:19
  • 签到天数: 1183 天

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 / {: z' e/ p' s! y  |2 G$ S+ o
    # L4 r- {0 R) G: I3 `& r' ^' `# G
    为预防老年痴呆,时不时学点新东东玩一玩。
    ( j! w; P8 w4 ?" B9 B# z6 MPytorch 下面的代码做最简单的一元线性回归:" T) ^. a1 p! c% S9 l! \. V  j. U
    ----------------------------------------------9 w+ g+ j) W9 _! T$ `7 H' q/ \
    import torch. @- S- q1 N$ E% F4 x+ }
    import numpy as np
    3 N% e) g) q0 F6 h2 u# Cimport matplotlib.pyplot as plt
    6 i; `" O# o# P* w, ^import random
    & }. A. r6 S" b2 q+ h- a: M) q1 {' x3 l+ J4 j
    x = torch.tensor(np.arange(1,100,1))$ U1 r. @4 ~6 _/ @; q3 ]
    y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15
    " i6 ^6 f  U2 k4 t  F& b) i* b2 b; `5 M6 p
    w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b
    , N2 n& E* C. `- |b = torch.tensor(0.,requires_grad=True)
    * B% _0 P. ~/ N! D, }+ O4 ?; _8 @3 f" U) G) M* c" E# v
    epochs = 100
    0 J( O8 s0 E8 Z1 U: |4 H$ U' o9 H/ |' Y6 b: `
    losses = []: ]* J2 s, B# u
    for i in range(epochs):
    2 J- i  ~3 I/ v7 d! n# D& u  y_pred = (x*w+b)    # 预测; r& o; w) \( |( P- v6 e. W
      y_pred.reshape(-1)
    9 o- q! S) C" o% I+ S4 B: ? $ b( P/ @0 l/ s
      loss = torch.square(y_pred - y).mean()   #计算 loss0 {' o; T! W* p! n# `1 L, x. j. g
      losses.append(loss)  N8 a+ Y' T' W$ d* }8 Z
      " N$ c3 z; `1 R5 ?( r$ _' H
      loss.backward() # autograd( N6 a$ x" m1 _8 H1 Z6 ], `$ C
      with torch.no_grad():
    2 b- S& a5 r5 M( ^+ t* n    w  -= w.grad*0.0001   # 回归 w
    / }$ Y6 x4 q7 n/ b0 M7 j    b  -= b.grad*0.0001    # 回归 b 8 P; T& u8 x6 [: y$ z2 t5 \, N$ D6 r
      w.grad.zero_()  
    ! h' M  b, y% z; {# B  b.grad.zero_()1 g4 v: u5 m) w8 ^

    8 Q; |) z6 j9 |0 E% h' `( aprint(w.item(),b.item()) #结果5 v& ?# [2 _. w# _( m% o& F! a

    : U% X5 ^3 F( o7 _' z: ]Output: 27.26387596130371  0.4974517822265625- L3 s& |' p- V4 a7 J$ G! g
    ----------------------------------------------9 n& ]9 M* W. J; U0 X
    最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。
    ) I- u8 I( j# V! `5 V高手们帮看看是神马原因?6 \" n; Z. Q" Z$ q; }5 V9 b

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑
    0 G2 l6 H9 n0 A! i' ]5 I" ?9 ~
    3 L3 o5 U1 X( h- H/ k  n没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?3 z1 Y+ b4 v+ F# G
    -------
    , x. ^' C) n+ @' k& b不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。/ v+ }. j! C9 H* b
    -------
    + {& V  c( u8 z2 Q+ \算法诊断部分,建议把循环次数改为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: r& l5 J# w) Z; ~0 C
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?! N8 a3 w( |- Y4 P* N/ Z/ ]
    -------/ x, T, t: }- `$ F* r- }* G
    不好意思, ...
    / F* A( E- j2 T7 U. D: Z
    谢谢,算法应该没问题,就是最简单的线性回归。( `' |, i  b1 L1 w# s
    我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    ( x7 y3 M, a3 w
    雷达 发表于 2023-2-14 21:52
    - c" n( X  ^* Y3 S3 S9 J; o谢谢,算法应该没问题,就是最简单的线性回归。
    / n- m& ^9 y. v! H我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
    , h. {3 A+ H' R% s* p
    6 x1 p# P) D9 {: b& t7 k. U6 K
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    ) [9 r8 X6 J3 x5 [. T6 X$ a; A& E2 t
    或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    怒
    2025-9-22 22:19
  • 签到天数: 1183 天

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑
    4 e0 a7 |0 J# V& V. ]
    老福 发表于 2023-2-14 22:00% N; M: _- u: |6 L, f/ N
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。, W  E' m5 ]8 @  Z- s* q

    2 l  i2 `# h1 s或者把b但的起点改为1试试。 ...
    4 k2 x0 ?$ o9 u0 w
    $ E  e8 v( q$ o) }8 l& L
    你是对的。
    2 E& L, K/ D* C; d& r$ s去掉了随机部分
    6 m, F7 _8 w" b: T  n3 W1 b#y = (x*27+15+random.randint(-2,3)).reshape(-1)
    " o1 d9 h  C6 `& Fy = (x*27+15).reshape(-1)
    # v" G" R& U+ U8 j7 x% `& K! U5 j, W$ Z. M6 T8 j" c0 Z( e( u
    循环次数加成10倍,就看到 b 收敛了
    , U* }3 X( ]& U" j, X( D. Iw , b
    ; a8 a) A$ @) N# y27.002620697021484 14.826167106628418
    : k  Q; l! l2 ^- J) ^' [( D# Y0 W2 v
    和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-10-7 23:50 , Processed in 0.058595 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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