设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 6 D- g& L0 M) i
    $ S5 C6 {/ ~% n9 g
    为预防老年痴呆,时不时学点新东东玩一玩。* a3 ]% o1 l1 _1 M& u
    Pytorch 下面的代码做最简单的一元线性回归:
    " a  K9 z: f* n- |3 d1 r* H* t----------------------------------------------. [  b  @3 h; [/ X% p* x% ]- |
    import torch5 W% i9 _% _4 }7 k
    import numpy as np
      c6 b& Y2 L/ `6 l" x( Eimport matplotlib.pyplot as plt
    + i- Z$ I8 E4 M$ C" W% ~7 Limport random6 R5 G- z& J4 a7 t

    + S2 i/ W0 h, d2 f# S+ M/ Cx = torch.tensor(np.arange(1,100,1))2 o8 U2 O; ~  H$ d
    y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=152 y- y6 g7 W' b: L) G
    7 O" P! x2 n4 Z  z' w* ?
    w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b+ U$ i0 Y- q7 h/ x. F2 i; t8 t
    b = torch.tensor(0.,requires_grad=True), v# [* u' ^4 G) @$ K: k8 A! B
    * H) c( U# o5 M0 z6 @8 O3 b
    epochs = 100
    : \0 H, b: }7 [# L0 n$ G( V5 E3 w5 J3 }# D# ~' n
    losses = []
    9 O+ Q4 m) m2 g. ifor i in range(epochs):
    * P# j3 |. M" F6 E  y_pred = (x*w+b)    # 预测
    ' |) ^! Z! a' f  y+ q$ v  y_pred.reshape(-1)
    9 U8 _7 \! h+ C7 ^& V
    - ^. f3 N. j5 j$ n. b: q& k3 c  loss = torch.square(y_pred - y).mean()   #计算 loss
    . U; u% \) W8 w. n$ @5 _$ q' f$ g  losses.append(loss)6 g( j3 s5 x  p3 K( R+ ^0 ?2 N6 g
      # y, ~6 S+ v' }& p+ e
      loss.backward() # autograd" v) u) c* j1 ]
      with torch.no_grad():
    ; w, x; a- w9 ?( F  [    w  -= w.grad*0.0001   # 回归 w
    0 _# \2 z4 `9 U) \* o5 C6 |    b  -= b.grad*0.0001    # 回归 b . }6 o" ]6 \0 J) x2 Y  z. x
      w.grad.zero_()  
    3 W9 T/ W/ i6 v: b, b' {  b.grad.zero_()' N; Q# k# H( Z0 h

    % ?8 a0 q$ w% N: O, gprint(w.item(),b.item()) #结果, n4 G9 {( s& I$ ^8 ~+ Q, m

    ( ~% |) o: u7 o& D) O# |! S& tOutput: 27.26387596130371  0.4974517822265625
    / U& D1 V( u$ M----------------------------------------------
    1 B2 t  @8 \& Z. n! }1 G最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。% j% ^0 ^. Q8 ~9 Q( j& o
    高手们帮看看是神马原因?; n6 s2 p  j. R* o3 }2 v4 A- Q6 n

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑
    7 C8 l# s; u5 Y* f" N/ @* W! k  R7 J% M: ~  A# g+ k, }5 O5 W
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    ' E) k3 H; [$ y4 Q4 Q, x-------- {( J$ \) f+ w
    不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。, i" u8 `7 p" o" X- k8 K( y5 c3 \
    -------
    # Z/ l  k* ]* X4 Y5 M. `算法诊断部分,建议把循环次数改为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
    0 e( k4 X9 |& D/ a没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    6 l6 M( g9 G0 d-------& {# ?: u. B1 O; P" O) k
    不好意思, ...

    . m; [& O9 v& g5 O谢谢,算法应该没问题,就是最简单的线性回归。+ T8 p" T+ _- q/ _' z8 Y, r$ d  R
    我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    . ~  g9 \1 |( u: Z8 Y9 v
    雷达 发表于 2023-2-14 21:52
    / N3 x1 g* I' e$ f& f# T谢谢,算法应该没问题,就是最简单的线性回归。
    * |0 U" }$ S4 G1 l+ w4 E6 h# K6 v* }我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
    " x6 ]9 O0 j8 x& u

    2 a& c% Q& ]1 M刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    # [4 _6 m5 N! h- I: j; D( n  v+ x/ S7 W. g3 u5 r
    或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑
    ! N' Z! N6 g' {1 T( @0 X
    老福 发表于 2023-2-14 22:00# s+ ]  v6 m3 }7 p5 U% |3 ^+ h
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。! c3 F/ p& M: `' I9 y
    " w* v5 k, p$ _( v5 l
    或者把b但的起点改为1试试。 ...
    ( K) u% \1 D9 U- a) o/ A! o
    / q( M  e: o/ y. F) `3 I2 U
    你是对的。6 M" k8 x, P6 N7 f+ r8 L
    去掉了随机部分
    , K5 R& k, t8 V, S% F& |' C7 z: I#y = (x*27+15+random.randint(-2,3)).reshape(-1)3 I* A; Y4 H6 C6 V1 |* H
    y = (x*27+15).reshape(-1)
    * M- ?0 T# ~+ [5 |& Z3 j) X
    6 a& O5 }0 o0 ^4 P循环次数加成10倍,就看到 b 收敛了' S+ w( W* n5 f- }, x; t- U, R
    w , b
    , _! Z) k0 d7 r- X# u27.002620697021484 14.826167106628418- ^( o" u) p- o8 N  B9 e
    ( j/ I9 F% C( J3 D
    和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-2-5 00:30 , Processed in 0.062508 second(s), 23 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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