设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 ! B  w# y) X5 ?' t: l) I7 u5 t
    5 o/ B+ _: B. U* f3 e: E
    为预防老年痴呆,时不时学点新东东玩一玩。* C6 _: c4 Z8 {+ T% ~2 I! k
    Pytorch 下面的代码做最简单的一元线性回归:
    % @- i4 A: t: k6 p& {7 J" V: y4 K----------------------------------------------
    ! s: O8 _2 m7 u: H6 h# Eimport torch: v& ^3 v% a1 h  u( {
    import numpy as np# }4 _8 A& i' P. y3 R) n5 \9 z8 i
    import matplotlib.pyplot as plt
    * _3 F0 W8 ^+ s2 s5 |import random
    0 {4 R: i( Z/ D0 l  K( L1 n$ ?, ]# J& X9 h" `4 a7 `
    x = torch.tensor(np.arange(1,100,1))
    . I& h0 ~( h9 c' J+ by = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=157 E1 \  u6 B3 O* H" r; j, c0 n
    1 G$ y& l& }! F& J
    w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b: y( _( I4 W" X7 R8 r
    b = torch.tensor(0.,requires_grad=True)
    6 U6 i# r5 q8 x. w( `- d* v# [
    $ h& S, w  O/ w5 V& ^epochs = 1008 c, g6 [) ]; k% Y/ z' R

    $ L# U; r( u. M# B& h* ]% D/ jlosses = []
    % T/ o* _% b0 Bfor i in range(epochs):
    ( i8 S  s0 T' n$ h* S1 M7 }$ v  y_pred = (x*w+b)    # 预测
    6 |8 n/ e+ N$ L  y_pred.reshape(-1)
    0 k$ J4 Z2 |5 m- Z+ i
    - U, o* ?, \' ?4 W& C/ _1 E+ G" i  loss = torch.square(y_pred - y).mean()   #计算 loss
    # z: [7 N% X& t& I* }  losses.append(loss)9 U! Q! R- \1 J, p
      
    ( E9 U! u, q: C3 Z  loss.backward() # autograd5 }8 s8 H8 e4 e3 Q+ a
      with torch.no_grad():
    . d/ O+ Z: w" l: p3 W+ E  v    w  -= w.grad*0.0001   # 回归 w+ w. c* `1 y& W* p" a3 x
        b  -= b.grad*0.0001    # 回归 b 6 s% I1 ]: D" T9 N0 X0 V0 Y# ?
      w.grad.zero_()  
    " |8 e; e6 c! F/ h, N* z1 J5 C+ g8 K  s  b.grad.zero_()! {$ i9 A6 b2 J. Y
    7 @) w4 w* Y1 _  |- s. T
    print(w.item(),b.item()) #结果, r6 w7 P+ I0 p# s& i- l

    , |9 B* \/ W9 Z1 M$ c# nOutput: 27.26387596130371  0.49745178222656257 r. I6 h6 G- a& v  D
    ----------------------------------------------6 s3 [- L$ }* b3 e# L) V4 l9 B: c
    最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。
      Z  `! v( r# w1 L1 P4 Y" q) H4 ~; \高手们帮看看是神马原因?
    $ \9 j8 T# i+ V/ F' D% e& m8 y$ N& q5 _

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑 + }) d/ z8 a1 i( G5 m7 I- A
    1 Q0 @5 x; e& |+ D
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    : P$ b( M  Z2 E" h$ [-------
    ' A8 W! h/ {3 N6 n  ]  |不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。+ p8 b4 u$ u+ I
    -------
    & w' s# ]7 W; ^0 o/ S3 O: [0 O算法诊断部分,建议把循环次数改为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 Q/ l5 q  g7 L& a0 `3 I" u9 F5 X没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    : G: r' \  f7 Y. _: @-------
    . Q# @: z- g( d9 _2 D' B1 Y3 s不好意思, ...
    & J5 {" K. Y8 M
    谢谢,算法应该没问题,就是最简单的线性回归。
    : {0 C0 F0 r7 i; f4 q( K* s我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    % Q- t3 |# ?! _" G! V
    雷达 发表于 2023-2-14 21:52# y1 w( E- X! E
    谢谢,算法应该没问题,就是最简单的线性回归。
    . F/ C! W3 |. P$ B我特意没有用现成的工具,就是想从最基本的地方深入理解 ...

    % S. J, r5 x' e- z! }6 _; c. ]! C) k5 k
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    : h4 x1 f* i0 T& u) f) W+ [; O( k
    或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑
    & b; p# a" f3 |& g, u6 T
    老福 发表于 2023-2-14 22:00
    0 j% K! f1 ^' N! t8 Y3 b刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。: {3 @% e" p* J

    1 @8 ]0 I' G8 b+ l" x, _或者把b但的起点改为1试试。 ...
    7 ?, I9 Y' a4 Q1 R
    & w  k2 C7 G5 g5 s" o
    你是对的。5 W1 i& y+ e4 ^8 Y# @
    去掉了随机部分
    ! B. ]1 T1 z2 e7 {" R( K! d#y = (x*27+15+random.randint(-2,3)).reshape(-1)+ B: _3 X' j& N. ^9 _% Y
    y = (x*27+15).reshape(-1)& e% U  u! w7 L$ p5 R- x: C6 H

    3 a- N- S' g0 _2 P, H! J7 x2 X; j循环次数加成10倍,就看到 b 收敛了2 L4 }3 c7 S: [' Z3 r
    w , b8 a. J& n1 T8 x; l, j
    27.002620697021484 14.826167106628418
    8 Y4 L) v: N" e/ K7 q7 l' }2 Y* b) V" P) {- l& P, `9 d
    和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2025-10-23 13:19 , Processed in 0.036239 second(s), 22 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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