设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 $ ^/ O* H# ~$ t+ c% e

    : b+ m* s0 Q+ y1 j. @$ j, L为预防老年痴呆,时不时学点新东东玩一玩。7 w4 Z6 a7 \: Y/ f1 ?9 M9 G0 e
    Pytorch 下面的代码做最简单的一元线性回归:
    5 k; k. F" _0 E: f----------------------------------------------
    " {9 p( Q6 V0 I: G2 H7 _8 Limport torch
    7 A5 |2 s& ~7 F$ ximport numpy as np
    ( [' B" r+ a: R2 n0 O2 Limport matplotlib.pyplot as plt
    & X; O; S! p0 x2 k1 a# ?import random3 d) x" B+ `! A/ p

    1 ]  @1 W- o* z, u/ bx = torch.tensor(np.arange(1,100,1))
      \4 h  q, X3 py = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=151 k) V+ v7 w2 g& z# Z1 v' q

    " U7 A* D6 A8 D# sw = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b) w9 e1 w0 s9 \. v0 f% {; w
    b = torch.tensor(0.,requires_grad=True)8 c; ~3 j$ j  v
    - T; c6 N# a  ^% x2 O6 N
    epochs = 100
    ; ]0 \! \# {1 E; a# o8 k2 U. x& a- W; n7 v! @4 z
    losses = []; w7 c8 N8 _* c; }9 @; O. e
    for i in range(epochs):, C4 }! o0 j. w8 G$ F! G5 b
      y_pred = (x*w+b)    # 预测  K0 }+ f/ h( [% s8 A* F7 z7 @
      y_pred.reshape(-1)* X3 H5 O1 }+ Z2 G1 w
    $ j6 n4 _" g5 z: I5 J: u8 i& l
      loss = torch.square(y_pred - y).mean()   #计算 loss
    - H1 E9 N$ F+ H, {5 A6 u4 Y8 q5 ~  losses.append(loss)
    + ]6 _! c, {/ W  : Z& G$ H2 |5 S3 Y6 \* _: H+ C* V
      loss.backward() # autograd3 c  x: y( c& n' [
      with torch.no_grad():
    " s1 u& ^+ c$ a( _$ j( Q    w  -= w.grad*0.0001   # 回归 w
    " p% `3 h+ Z  F: |7 D: a    b  -= b.grad*0.0001    # 回归 b
    ) Q) v/ @) w8 w4 ^- ~% Q  w.grad.zero_()  ) F, l* }7 a" N' `2 _4 K: ?
      b.grad.zero_()5 m4 [+ [0 I9 C

      B- D7 I* ^! D( _2 B% qprint(w.item(),b.item()) #结果  g2 ]6 e9 `. P% M4 _% L

    ( }  h8 F' U% m) C( [4 |/ h0 vOutput: 27.26387596130371  0.4974517822265625+ z( c8 K9 j. B  g/ K. `' r! e; \  Y" V3 ]
    ----------------------------------------------: P3 c8 B" y& N, z
    最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。+ P% X4 A4 h7 W3 L* p% p
    高手们帮看看是神马原因?! q8 J3 w( E8 J& g! \8 Q, Y

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑 8 l6 h) i0 T' J8 B( ?6 |- [! N, C7 H

    , f+ X. s0 S: n  Y7 [2 x* N没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?/ Q& r, _; Y- X
    -------
    ' l# s* a% _0 Y! Y不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。1 P/ P0 S3 z# I5 @" b- g- A% @$ D( e
    -------$ I' n( Q2 n4 }+ A0 K
    算法诊断部分,建议把循环次数改为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
    3 U0 f; f& W$ k$ f! o没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?4 b+ T. z- J9 n9 B- `( y
    -------
      d' G0 v- n0 Z+ A. Z1 i不好意思, ...
    9 ?7 T1 ~* q; d2 @0 F& L' T, J: ^
    谢谢,算法应该没问题,就是最简单的线性回归。
    2 V: n' n4 i2 |/ x% p. A$ L2 j我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑 / Y; `6 R/ W  q5 C$ u; w
    雷达 发表于 2023-2-14 21:52
    3 p. |# f; b' V# L1 z2 \, @谢谢,算法应该没问题,就是最简单的线性回归。: M# x; j6 @4 I; [( m5 m8 v
    我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
    5 ?0 C8 d+ U) y  l! c

    - {& j! Z' K$ {$ a刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
      M* V+ W1 B- q7 y% L; e1 h
    9 \# H! J! A3 e- z3 |或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑 % U0 v" H/ P7 k( I/ K- z! U" W
    老福 发表于 2023-2-14 22:00. N  o* \0 L7 v3 B# i+ U% a. u' C
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。) H5 x  P: e" q, W: P: k
      `. K' {4 q9 T+ T
    或者把b但的起点改为1试试。 ...

    1 t7 }" z* V& n# A6 e
    1 S: r  t2 e, D7 O, I: @% w: K你是对的。
    0 R- U" J$ K7 l% w! f去掉了随机部分
    1 Z& H+ ~# o. `' e#y = (x*27+15+random.randint(-2,3)).reshape(-1)
    4 G& ?- U& I0 Z1 |- py = (x*27+15).reshape(-1)
      P: {7 C8 V: T7 G3 Y! ?% r7 j
      ^3 ^* X6 B/ h( p, R! |) b+ D+ D* M循环次数加成10倍,就看到 b 收敛了
    7 T" d1 h2 h: r  ^w , b$ P2 o  J" x; }  r+ c2 S5 p2 k
    27.002620697021484 14.826167106628418: ]! b% P; ^2 N# z! R7 o* M9 [

    ) H: [/ \% t: _" w2 r7 s' s' ?和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2025-12-4 22:46 , Processed in 0.029415 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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