设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑
    / M" z' j+ F- n1 ]) e4 ~& N1 T
    $ b! `2 F8 z, `. h) g  I7 j: K为预防老年痴呆,时不时学点新东东玩一玩。
    ( W+ T: `) V5 R' BPytorch 下面的代码做最简单的一元线性回归:
    ; b, Q) p9 d& T# ^----------------------------------------------$ C, o* P" L* E. u
    import torch2 i3 G" B' P- y; F  O8 d& s. z. q
    import numpy as np
    3 y- v8 M1 ]# W4 P, ]7 N) Bimport matplotlib.pyplot as plt' l* \! u7 w* t
    import random
    4 u6 t, ^2 J, m' D$ b# h
    . I3 j& A" a& `0 l0 w3 c3 x0 ex = torch.tensor(np.arange(1,100,1))" `  R: H# s/ q4 ~
    y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15$ ~& E. q5 b. p) x: F* d& S  p6 f

    & Q- X+ J4 x( gw = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b
    1 a( J: q7 |6 s% l. Lb = torch.tensor(0.,requires_grad=True)
    ( C7 @7 \9 G  g" j( i7 g2 u
      {. Q$ J, s+ q4 a+ ?7 m% yepochs = 100
    , j0 _1 l, h6 b1 h" K
    & S9 d3 @9 v4 I/ b- b& mlosses = []2 `# x  `$ z) t) m
    for i in range(epochs):
    " ?  e) g; l/ S# w  y_pred = (x*w+b)    # 预测1 |# R. ]: U; A, x& P) x2 B
      y_pred.reshape(-1)$ t& n7 J( Y+ P% |! s

    7 \8 c  ^" I# R& V! R. y5 X  loss = torch.square(y_pred - y).mean()   #计算 loss
    + U0 w7 }: N8 ]  losses.append(loss)
    % L9 ?- e, C! {  A  ' s: a2 s& m7 e0 m3 w
      loss.backward() # autograd
    ' ~9 s. y6 V5 p; s% V7 `  with torch.no_grad():
    6 D% n6 H) T4 K5 v    w  -= w.grad*0.0001   # 回归 w0 _/ ?. {+ Q! N4 S
        b  -= b.grad*0.0001    # 回归 b " K6 Q9 `- H" W- T- _  u" x
      w.grad.zero_()  
    ' F( q  U7 _, c) ], I/ L6 F' g  b.grad.zero_()
    / c# G7 s4 c% ]+ J0 _+ j- w
    . g2 F, d" G3 w6 Q. Y0 q! P  dprint(w.item(),b.item()) #结果
    - x4 B0 |' _+ G; D+ B1 f
    ' u, W1 j! J+ J+ M( @Output: 27.26387596130371  0.4974517822265625* r- ~  u- [2 x  e7 d* k
    ----------------------------------------------' I, P8 l: V4 \# X) Y7 T! ~
    最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。1 j1 D' K+ `5 A0 e& ?9 r7 f
    高手们帮看看是神马原因?
    3 o5 R* A& X7 _7 x, Y% m

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑 ( X! E- c! H* o7 e1 t

    6 z1 I- |- U7 E1 a. J; D8 Z! x没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    , y- r; x+ d2 i-------- K! }* L6 c& h. Q# C/ O: B/ w
    不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。! c& f* _' U; M8 P& z
    -------
    ; u  H' ^3 _6 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
      c3 T+ H$ V) o" N, H没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    + i4 J+ S) k( a! s* S-------$ k* ]  |1 C' q* }
    不好意思, ...

    4 q) `' f) {2 m! o谢谢,算法应该没问题,就是最简单的线性回归。
    6 D/ o4 S! U' w3 d我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    " d9 U/ b/ b( l% v) h/ l
    雷达 发表于 2023-2-14 21:523 M% p: O$ @; L# t! {% v/ G! G
    谢谢,算法应该没问题,就是最简单的线性回归。
    ( \9 x, C; A2 [1 b% t# b7 n我特意没有用现成的工具,就是想从最基本的地方深入理解 ...

    * E& P1 Z: I: U2 ^: N. p" x; _3 [4 @  `% C# m
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。( {- f0 ]3 n3 r) B

    ! b+ b6 i( r$ n$ ?7 [  X3 z或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑 * j7 C$ \" v! m/ D4 s2 {# A; G$ q' w0 |7 ]
    老福 发表于 2023-2-14 22:00( a# K8 ?1 E$ B, F  B5 W  F% b+ f
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    4 B! D( K. }9 Z6 {! t( z/ u% m# `. f2 W5 I1 j  o( O+ q* e4 e
    或者把b但的起点改为1试试。 ...
    : `/ n2 k% P: J1 h; [& `

    6 ^1 ^0 u4 r2 c0 U4 k你是对的。! B+ {8 Y+ G- o
    去掉了随机部分+ g' O0 B3 n. D" O- e* W
    #y = (x*27+15+random.randint(-2,3)).reshape(-1)
    % E5 h( L, r# M6 p* o" ry = (x*27+15).reshape(-1)
    4 V7 S1 x0 ~- A  B
    & I0 C. D/ \3 H  i循环次数加成10倍,就看到 b 收敛了- m" I+ J# h! d
    w , b
    5 F# e/ m2 F5 ]. {27.002620697021484 14.826167106628418
    ) S- T- p- n+ |" `7 Y* N9 ~* R+ o4 F9 D0 ^" \2 p
    和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2025-11-5 03:28 , Processed in 0.032955 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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