设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑
    . a! V$ I/ ?; l' z4 A7 A. ~, z1 m
    / c; j- f5 r5 ~( J2 e. j4 k为预防老年痴呆,时不时学点新东东玩一玩。
    & S! P" s& z' l+ a% x; rPytorch 下面的代码做最简单的一元线性回归:
    : Z, o5 E% g" Z) }# E----------------------------------------------- k4 ?$ M8 D/ O8 ~5 h# M
    import torch
    2 ]' [& Y0 }+ X. @* ^0 c1 ~import numpy as np
    + `% m( {; ]  g! e2 Limport matplotlib.pyplot as plt
    # `& p; D* M- e+ cimport random- J9 f( H; u- u$ {$ S

    ; R& J1 B) y" X* b, J2 Tx = torch.tensor(np.arange(1,100,1))0 x) M6 b& f. A% A* q, @
    y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15
    6 k9 _- J8 {0 z& L( Z
    ! Z6 q' z, [. D; yw = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b/ W: ]' q8 ~1 b$ q
    b = torch.tensor(0.,requires_grad=True)
    # n3 X$ r/ X$ M+ g; n/ ~2 c% e) Y* K, E
    epochs = 100
    - U( ^2 b1 n8 C; d/ w) w1 |' D+ U/ Z" _" n5 X; g
    losses = []
    9 q9 b6 x. r% @: c6 ]for i in range(epochs):& Y) u* }8 e8 v( G! m! Y; q. G& b
      y_pred = (x*w+b)    # 预测
    ; b% D$ f7 q- g  y_pred.reshape(-1)
    7 H" ^" s5 i7 @* l% _  [
    - B) _+ N) d9 A" A9 @# H  loss = torch.square(y_pred - y).mean()   #计算 loss+ T! ]4 q- h& j4 q! y8 H+ Q
      losses.append(loss)
    9 Z& e: e5 X7 W# D4 I- Z  ) r7 {  P; V) D. A, W6 {& q& L
      loss.backward() # autograd2 u6 a3 _/ ?! }4 ~9 X  G$ ~, ?8 z
      with torch.no_grad():! {+ X) E, O4 X- H4 B  Q
        w  -= w.grad*0.0001   # 回归 w
    0 o9 P! e, o2 B5 F* B    b  -= b.grad*0.0001    # 回归 b   l0 D$ ~4 [+ W/ t9 k$ H$ N
      w.grad.zero_()  8 n- H# o  y8 L6 H
      b.grad.zero_()
    $ {- y4 [6 Y9 O6 g+ V. P! V2 @) ^" }( o, i4 e% b1 t1 m% v( k
    print(w.item(),b.item()) #结果& |7 i( A0 T/ G) c9 h! l, {2 K

    ! W) ~' G5 P4 g5 d! r: _Output: 27.26387596130371  0.49745178222656250 s9 ?5 o, _2 l- ^3 ]
    ----------------------------------------------0 k0 ?9 Y. Q" w
    最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。
    ) s- j  w  G: M% t6 i6 e, C- J高手们帮看看是神马原因?" k' ?7 g+ L7 |: z9 I9 S

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑
    9 M: Y3 ~* c& u; C% Q! K  d4 A7 o3 {; _7 P
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    + L! }1 ?* C* G/ h* j-------* U0 S$ l& m1 E7 ^# w/ q* ]% L
    不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。
    ) Y2 P0 p. x* @2 o4 }. I, w$ S-------) I1 \9 u% [( u7 ]( ?
    算法诊断部分,建议把循环次数改为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
    & Y! Q4 @5 }0 r- a1 j: ?3 b4 }5 o没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?: P- E: S4 G5 Y% E
    -------
    1 f* H0 S& t' \" t$ _# f不好意思, ...
    $ H1 M# ^0 J# I% K
    谢谢,算法应该没问题,就是最简单的线性回归。  b1 j; o6 j  B
    我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑 # h8 }# P. V# y: e$ r$ B
    雷达 发表于 2023-2-14 21:52
    - F6 h6 m# p  O8 Y' z7 W谢谢,算法应该没问题,就是最简单的线性回归。
    ) S, p6 [( e/ G我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
    % J) l6 F! Q3 I4 p

    " }* O" T. @* l5 D- u刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    2 J+ @) b2 _2 i5 q& m' u- M1 a: \# l  K6 j, ^2 ?9 Y5 _+ i
    或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑
    0 G, o5 o0 h8 l+ B& W
    老福 发表于 2023-2-14 22:00, D$ q" s8 L/ o. ~1 \
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    ; _( |8 K& s5 c: q
    ; a% Z# P" C( u+ u, a  m或者把b但的起点改为1试试。 ...

    7 h) ]9 v2 w4 U9 d/ Z: g+ v) |9 z- j+ p5 R, F
    你是对的。1 L1 S  q! P" U# t7 r
    去掉了随机部分
    $ p" b: W4 D2 r4 Q" l#y = (x*27+15+random.randint(-2,3)).reshape(-1)4 U  v- r& n# h& ~; {5 L
    y = (x*27+15).reshape(-1)% W( b- y5 V/ c+ u

    : I4 ^8 C% P* }$ }! ]循环次数加成10倍,就看到 b 收敛了
    5 f- v* R5 Q1 c7 Y* X, Dw , b
    0 z3 w5 |: o1 B( U; W8 f27.002620697021484 14.826167106628418
    , W% C3 J- S$ l* v+ K5 Y5 C$ u0 P* r& h+ z5 b0 e
    和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-6-28 10:26 , Processed in 0.057412 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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