设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑
    ' j& L  {( N+ e% l. z7 F
    3 M, H' |, q3 P- v$ ?) Q8 j/ r为预防老年痴呆,时不时学点新东东玩一玩。
    - H6 o  j5 _# V3 APytorch 下面的代码做最简单的一元线性回归:! k6 [# S' }, M; ?2 c. g. N4 X2 |
    ----------------------------------------------' V( A' Y; I. j/ I
    import torch
    , c% U- G. \5 g9 Nimport numpy as np
    + j$ Y9 R  F0 o9 i# w- q: Jimport matplotlib.pyplot as plt
    / ~  ^" a9 J) E6 ^import random0 l3 X7 j; }" V% R( M

    2 P# d; q: Y) o' j* c: Q' ox = torch.tensor(np.arange(1,100,1)): m4 ]  r& Y1 l2 g2 H4 M
    y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15, {' |/ `. ~7 @+ H+ G5 q' `2 P
    ' m9 Y9 A- b- t& K; P0 [
    w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b' c4 ?+ ]2 `+ g
    b = torch.tensor(0.,requires_grad=True)
    ; K8 f5 }/ x4 R; |; |8 }+ L. D: P1 P0 \2 H' T4 a
    epochs = 100
    ) I. u3 q% a/ ]' A  y7 X2 [2 r  z# Y8 I* ?) \9 p4 f' L
    losses = []
    * o1 g5 s" V7 a" i6 s- Z/ K2 xfor i in range(epochs):
      D0 f! c% z5 Z( X: T0 q! E  y_pred = (x*w+b)    # 预测2 c/ }# u6 e9 N2 d/ d
      y_pred.reshape(-1)+ U/ T8 G7 {! |( E

    / i/ \" M* ~4 {9 u/ N, V6 c# A2 h8 q  loss = torch.square(y_pred - y).mean()   #计算 loss
    ) q+ T3 c" S1 h1 ?  losses.append(loss)
    2 N% j& w% J5 c: l& b& V$ z  0 Q# r' J1 H& R  r4 [
      loss.backward() # autograd
    8 {: _0 U- l9 ^, Q! {1 l  with torch.no_grad():1 R0 s, k) O. c% A$ D& p
        w  -= w.grad*0.0001   # 回归 w
    ) U; V1 l$ a; M8 [7 U0 e. w    b  -= b.grad*0.0001    # 回归 b - C' Z$ l6 _/ B" W- J5 t( N
      w.grad.zero_()  
    ' q8 `5 Z5 l% d! ]3 l! r' w% I* ]  b.grad.zero_()
    ( X  |/ J5 ~+ `/ i+ t, ~! C) @2 ~$ q* m/ r) ^* F( z
    print(w.item(),b.item()) #结果% C' b$ z$ J/ z" l& m
    ( a  {4 d( i- ]% V# |
    Output: 27.26387596130371  0.4974517822265625
    5 V, r. z8 a9 K% c. D# }----------------------------------------------1 `3 L; d+ }$ i
    最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。$ `5 e7 |3 T3 O
    高手们帮看看是神马原因?
      Y# a6 X8 v  V; t

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑 - y* G5 k1 m; I# T) m. g( G
    $ l' Y5 j" j: i4 o
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?' u1 a2 z( |! F9 o! o1 z$ r/ t
    -------. Q( z8 u& v4 U3 D$ Q
    不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。
      @! P& ]! e5 J! z& a! A% {-------, u5 u3 o# i8 E: R8 f
    算法诊断部分,建议把循环次数改为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$ p9 {( P* [4 ?% R  f: I
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?  E; m5 K- ~1 j) Y! |4 C
    -------8 J  V7 _! G3 o. _9 w& u
    不好意思, ...

    + V) R2 H: F* @; H谢谢,算法应该没问题,就是最简单的线性回归。
    ) z# P, I) p( t" U, R我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    % {- p" j9 |" |" q% M" ?; R% L
    雷达 发表于 2023-2-14 21:52
    3 C( @# x. [0 J& ], `- v  Y谢谢,算法应该没问题,就是最简单的线性回归。
    9 S: ?$ h8 X5 H  a% U0 E/ C7 r我特意没有用现成的工具,就是想从最基本的地方深入理解 ...

    % v# F+ P; T( f4 o* ?; z6 h. `2 h) D: v& |% m  D
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    1 |! w% H+ R, }4 L: j
    ! h8 g( S* A  r7 i5 V  P或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑
    / G" ~# N* [3 c/ y" H& Q
    老福 发表于 2023-2-14 22:004 i% f3 n7 H# J& X& N" G# C$ c
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。; ^( C1 F: C4 D! O: N1 `

    ! J* w. D2 m& H. ^1 E3 Z, t7 T1 W或者把b但的起点改为1试试。 ...

    - B8 \% b  @# L: T' m
    2 z) E4 O) l  \. e1 z& O, i你是对的。1 L7 b; k, u) V$ j
    去掉了随机部分: f- W" J! n0 x( X* S
    #y = (x*27+15+random.randint(-2,3)).reshape(-1)
    ) c* A! M, P' n( B/ Hy = (x*27+15).reshape(-1)
    / ~; O9 l# c  o7 y' b2 \. b5 `+ C5 I9 A- i0 r# P4 q" h9 r' f
    循环次数加成10倍,就看到 b 收敛了0 J" h3 E7 Y7 t0 a2 ^  }) U7 {
    w , b4 m6 H4 Y8 [7 Y: ^
    27.002620697021484 14.826167106628418
    + r. u$ {+ I2 b  N! I7 T. S+ \3 S& w6 m+ Z0 M, k4 N
    和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-1-12 01:50 , Processed in 0.030088 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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