设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 . T" B! R8 F# j; w

      X  Q/ G6 |" m* N为预防老年痴呆,时不时学点新东东玩一玩。4 U& X* ?# u& ^, X
    Pytorch 下面的代码做最简单的一元线性回归:
    3 x2 E' N+ q2 @# ?* y% s1 I, ]. M----------------------------------------------
    7 ?: W) R$ Z3 d/ v) Uimport torch
    1 q* e& D. @8 {5 Eimport numpy as np
    6 ?% g- s1 ~! Gimport matplotlib.pyplot as plt
    * k& r  i8 |, i* uimport random
    $ l7 |  E* w8 b) i$ D- D5 e! O9 a$ Q# h  a( u( O8 Y2 O9 _1 z, L
    x = torch.tensor(np.arange(1,100,1))
    & h, Y1 k; {; b: b3 y8 N/ b' ?: Ey = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15( a$ L$ u" l& O( `3 x" r% [

    7 x, `! h& J2 v& |( r" Aw = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b  F5 ^# _% t; m. q. E0 @+ f
    b = torch.tensor(0.,requires_grad=True)
    4 ^0 A! g' [) `! I5 @7 Y, T" y* p
    8 n8 _) r4 K" v$ {! Vepochs = 100. P0 @7 s1 a" y  _" V- O0 H

    6 G- t' {$ w0 hlosses = []
    $ J: U2 e! t' ifor i in range(epochs):
    # f4 ~3 t. ^1 Q: a( n( L& s2 E  y_pred = (x*w+b)    # 预测
    7 _% u: p% W" U0 R1 g; k, b  y_pred.reshape(-1)
    - e9 K% Q+ D; |, }3 T% K % i, x, g' m8 j* V' \
      loss = torch.square(y_pred - y).mean()   #计算 loss
    + `( @; ]3 L  ]% h7 ^( m2 k  losses.append(loss)) V  n/ H7 N9 b1 L- c+ n) O. w+ @
      
    * F+ N, D6 z2 J; f  [  loss.backward() # autograd# I5 _. }* H9 e
      with torch.no_grad():
    4 J& S: O: x7 z( [8 A$ ?- l    w  -= w.grad*0.0001   # 回归 w. b: D, N7 J6 b: L% A* |
        b  -= b.grad*0.0001    # 回归 b ) z' w& V" R/ H. T
      w.grad.zero_()  . \+ [2 Z3 p: N' }8 k4 E: ~
      b.grad.zero_()! R: {3 l& \8 O  n* b& a5 K

    ! ]$ h, u2 e1 `$ _+ fprint(w.item(),b.item()) #结果9 g: z; p; c$ S" \" H- T$ P. p7 j8 o

    8 c" i9 ^. w. ^6 n' y+ UOutput: 27.26387596130371  0.4974517822265625) @8 H, k1 ?7 h2 \* ~4 `3 d
    ----------------------------------------------' U, ]0 `* e4 E* |/ o; t! p! t2 F
    最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。
    # q$ A% W/ }8 R高手们帮看看是神马原因?/ P6 z/ K" ?/ |4 b- `3 P1 Z

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑 # {, z. u- {- p* L$ K! b% r

    / K% k1 g# H4 T, I( X% u没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    7 x& ^! V/ s# g) Q& `-------" E- G7 u3 ]% r7 {' h& T% D% q
    不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。
    $ I% C& y) ^! l, ~& T0 v-------, f+ m# Y, n& @
    算法诊断部分,建议把循环次数改为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$ K7 |7 S7 Q% N+ @! T1 M  i% g: J# |
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?: s/ p! J$ c, v! L0 I3 e9 s
    -------4 D/ l5 F6 c2 E2 G2 k. P
    不好意思, ...
      q+ c9 C; U, Z5 E7 [2 p; ^; C2 ]0 f1 K
    谢谢,算法应该没问题,就是最简单的线性回归。
    ! Y  {9 o8 ^1 y) a& x+ u我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    4 r& g4 ?& v9 J7 x" W+ `
    雷达 发表于 2023-2-14 21:52
    2 V2 k3 e! C' w6 U' f. i谢谢,算法应该没问题,就是最简单的线性回归。/ _! C9 C3 H) A
    我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
    8 f! a1 E- E+ {8 ^0 F, m

    + q1 _2 i# i5 A2 \$ |8 f" P刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。) C: t7 Z% b* t

    4 `/ c5 z+ E& C6 W" R, q: W, s或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑
    6 N; y$ c/ }3 `8 i$ F/ i3 e
    老福 发表于 2023-2-14 22:006 l" V* [: X; g  [1 J+ v, B
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。, {" `" |! @" y- M$ {* B
    ; u5 A( {9 \- s* Q/ `
    或者把b但的起点改为1试试。 ...
    3 ^; `+ y/ x. C7 b

    ' I- \  H6 p9 J; J, L  U你是对的。% D2 w+ X  |! e
    去掉了随机部分
    $ q$ ]& n9 C% a6 P! R#y = (x*27+15+random.randint(-2,3)).reshape(-1)
    ! r8 s5 A7 Q* j* h2 [4 J4 cy = (x*27+15).reshape(-1)" ?, M  V1 _) q. o* ]

    " p9 P/ }% B5 _* v循环次数加成10倍,就看到 b 收敛了
    / F# j- P: L6 ?: v2 l( Mw , b; Q# A1 {/ ]+ B# W" U
    27.002620697021484 14.8261671066284184 n: n$ a$ c2 u. ~2 X. M

    & s3 b6 M1 _/ H6 d) Y( ?和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-9-23 04:35 , Processed in 0.070035 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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