设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑
    7 Z  w, r! T" ?% R
    / u& q; X9 x) _& |3 f: n为预防老年痴呆,时不时学点新东东玩一玩。* G3 u8 E" a& s& O$ e* l' J
    Pytorch 下面的代码做最简单的一元线性回归:
    # T; M3 e% x/ ]$ x7 a----------------------------------------------
    7 O% X2 R/ J9 p& P$ G9 limport torch
    7 X8 \$ v1 U( V3 _' Zimport numpy as np! ?" W! D2 A# ?+ a& V' f
    import matplotlib.pyplot as plt
    7 \. p* |7 p, D7 U- \. E9 jimport random
    5 p8 q$ M/ R8 q2 s7 g* T
    : E) ~- |, X& l# f# @) {x = torch.tensor(np.arange(1,100,1))
    1 A5 g" h5 ^+ L8 }' fy = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15: {+ _" c/ L5 T5 O% j

    7 b( Y/ Y+ V+ Pw = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b5 T# v* v/ m7 W/ d: T8 z
    b = torch.tensor(0.,requires_grad=True)! E2 o" y# q. _# g+ G" w$ N3 n

    2 E& x4 U* i0 w5 J* _! _& C7 tepochs = 100! l2 Q  t# I$ W4 K/ Y

    2 Q2 |1 H/ n5 \- hlosses = []0 q0 }- v  S& ~: Z1 b9 Y/ g5 d
    for i in range(epochs):% I1 \" e0 I+ S% U
      y_pred = (x*w+b)    # 预测
    + h% ~6 d& C# e) C8 z- a7 u0 e* o6 C  y_pred.reshape(-1)
    7 b' x0 G, o+ g* e / w0 E  V9 ?; b3 p
      loss = torch.square(y_pred - y).mean()   #计算 loss' T  o; _1 C/ ?+ z# \) a2 B
      losses.append(loss), P5 Z' V8 u) g
      
    , x3 a& M# |8 U' V" ], A. N4 @5 W  loss.backward() # autograd
    ) Z; e* q4 a9 S( v8 {  with torch.no_grad():) B5 i  B* w4 b2 C, n
        w  -= w.grad*0.0001   # 回归 w
    , R% U( ]4 ]6 t* J  }, X/ c* V% M    b  -= b.grad*0.0001    # 回归 b
    : G; z$ T. t, f5 k# N4 e/ S  w.grad.zero_()  9 f0 M3 d" \& ~3 o# r
      b.grad.zero_()5 f5 Q5 ~  F: q. R" h

    ) D! w$ R0 N: X- H6 P. M7 M+ _print(w.item(),b.item()) #结果
    3 d* {$ I- |; f7 ^8 ]9 k3 @$ M* T$ g3 P. v  ~# |
    Output: 27.26387596130371  0.49745178222656252 x0 u% k  a" j9 {; [+ l9 `4 W
    ----------------------------------------------
    2 j  w: j' u" k3 ^2 H3 p0 r, b最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。; U( f/ L% N$ p: u2 N+ s
    高手们帮看看是神马原因?
    * C& v; p( H% L

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑
    2 b) K, ~& Z5 d6 d1 v
      T; j" Q, c9 X# a4 h$ e+ y没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?/ T2 X3 h& [  j3 E8 [$ l
    -------
    6 i& z6 j! C/ \9 \不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。5 T- I# t% r9 H( u1 G
    -------/ |1 w- o3 g7 N! u& p. c
    算法诊断部分,建议把循环次数改为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
    / G! k2 y7 b. r2 j0 K  j* q没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    $ z( m" K: {' Q7 J) ]* c-------
    " O+ d9 v- x3 Q  P/ r9 E不好意思, ...

    3 J( S7 Z4 u& R# M. q. C' a谢谢,算法应该没问题,就是最简单的线性回归。! g: w2 g9 i4 Y- d/ |$ t
    我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    3 M' m% v5 \: z5 L9 J1 e
    雷达 发表于 2023-2-14 21:52
    " A* U" |6 Q3 e" d  k谢谢,算法应该没问题,就是最简单的线性回归。
    ; W7 e$ X: G3 f( D/ m0 \$ O我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
    9 u7 N, q! u4 [0 l* f+ @

    $ @0 K5 v5 {  `3 m7 P$ [刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。- ]. t9 `& w1 B( T8 n0 Q& f
    9 p2 t2 N3 @+ d( _0 I6 K
    或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑 & ]1 y7 [  S6 [( T! e
    老福 发表于 2023-2-14 22:00$ `# c$ R7 m- f& c5 z
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。+ U1 u5 {1 G7 m1 H/ d9 m
    " L4 S, c; `7 }5 v' j* p1 [. l
    或者把b但的起点改为1试试。 ...

    4 N0 w  B! ?% e- r& f
    ' D5 \6 y% W. o8 [( L+ ~你是对的。
    - r( i; I& H  W1 c6 i( ~. e去掉了随机部分
    9 S1 L% m  z4 z: f8 \5 V#y = (x*27+15+random.randint(-2,3)).reshape(-1)
    # C$ X7 W) A( n. R$ A$ k) X( vy = (x*27+15).reshape(-1)
    0 w7 c3 ?$ J( ?$ m: k( g7 ?1 l# R3 T2 N% u+ i# Z
    循环次数加成10倍,就看到 b 收敛了" v4 M0 g9 u$ C( Z' C: J
    w , b
    ; A& G  E% f" a: T" z27.002620697021484 14.8261671066284184 ?2 ?; l, \4 @5 x+ E

    - I5 ^$ m0 }6 [; e和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

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

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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