设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 ! Q! W( D) X$ @7 k0 H8 @
    . M5 g+ c# }9 N0 M& p7 ^7 F0 q
    为预防老年痴呆,时不时学点新东东玩一玩。# ]; e7 Q" k4 ~! {6 ~. ?
    Pytorch 下面的代码做最简单的一元线性回归:
    ! R) h# ~$ E- H----------------------------------------------
    6 o% X8 K+ [  m1 \/ `3 C: D# limport torch
      N* l2 U: c+ v, v, Z: @- bimport numpy as np6 s* B% l, |, y  X* K2 l
    import matplotlib.pyplot as plt) d, b& |- \+ L% E; Y$ \' F( J
    import random* n( ^; e" Y+ @5 _

    1 y$ J6 W$ u+ Ax = torch.tensor(np.arange(1,100,1))
    ' P1 g4 H' e" n' ^+ e  oy = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15! {! m# C6 B8 F. ?. {
      C1 y1 v! i, ?( Z) G
    w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b
    % k* `4 }1 \# N3 E- {- O+ b4 lb = torch.tensor(0.,requires_grad=True)2 ?- c: L  c, G% a2 \" G

    9 D1 Z# s, U' X( X+ oepochs = 100
    $ M6 o) g* s. M' r7 c) X' E  u( W1 a$ K  d5 M+ N0 P
    losses = []
    2 x/ a: @+ I1 k  f, X; Lfor i in range(epochs):& N3 P7 U& }  {8 N5 t! m
      y_pred = (x*w+b)    # 预测
    ) E" S5 V( O9 M4 \4 f  y_pred.reshape(-1)" l8 Q3 W, E4 z3 n9 L9 i! x9 F

    & O$ I+ {$ r- u1 q# X4 V  loss = torch.square(y_pred - y).mean()   #计算 loss1 R  Z& {3 ^5 Q% C
      losses.append(loss)
    5 S: e* ~+ ?9 R! e8 r5 J  : y. ~, H( g5 M* ^  [9 h6 W
      loss.backward() # autograd
    5 j2 H2 H* |/ ^! a  with torch.no_grad():
    / u; k) K" m( }! X% V8 B- H    w  -= w.grad*0.0001   # 回归 w$ e' y( I' S7 `6 G. \
        b  -= b.grad*0.0001    # 回归 b
    ! v/ l, L- F2 P/ K( ?  w.grad.zero_()  
    ) O: |1 _: v8 F8 y: O; _( f3 H  b.grad.zero_()
    5 w8 B, L" Q+ R7 b* X
    , Z3 i! a. P: [7 k9 {* kprint(w.item(),b.item()) #结果" X  l3 p  _9 {) D
    ( m8 x% r# O6 w$ e. N8 o3 W) t
    Output: 27.26387596130371  0.49745178222656250 b0 X; q1 C$ U3 K" b  t
    ----------------------------------------------7 D& b# U( f1 {* l
    最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。
    / E; I$ o( o2 _' l: L6 N& ?高手们帮看看是神马原因?
    ! K* S0 i3 s# n0 ^  z' a6 I

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑 + ~2 }! l0 |7 u6 ]0 P$ V
    1 G4 q3 f8 }: t; q
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    0 H& A" c* E2 _/ `3 ~, W3 Z( _7 A-------
    ! @) ]9 ^' k3 Q  V& y# h& s不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。
    2 f5 Z1 \; b; C6 G( X$ L-------
    0 K' n% B, l! x- U4 w算法诊断部分,建议把循环次数改为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
    : Z  ?, R8 G- P3 ~9 C# c- F没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?8 ~6 \/ R; P) d5 U8 h# N. S4 G
    -------% I! X+ u' I: F0 E+ H1 j1 E9 o( |
    不好意思, ...
    7 Q; L* b: _, y8 T% V# o7 e
    谢谢,算法应该没问题,就是最简单的线性回归。
    / t+ ^1 J7 U4 ^' ~我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑   ]! G- R5 @0 H, Y
    雷达 发表于 2023-2-14 21:52; @0 H5 h) y8 C- {
    谢谢,算法应该没问题,就是最简单的线性回归。
    7 _! V- e  e( e; E% d我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
    3 ~1 P- v  o$ \( \

    # }9 W2 @, A9 o- ?  Y刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    + d" _( T  U7 g. W1 z! T# I4 F( X* Y
      R7 |  q- i8 @8 ^3 ~- 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 编辑
    % K) H# B3 ]- l
    老福 发表于 2023-2-14 22:00
    1 K, H2 @1 ^) J! t刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    1 J1 Q3 P8 b* ]7 k6 P$ y- i9 {8 Q9 z: p
    或者把b但的起点改为1试试。 ...
    3 N  F+ O* k0 ?, _4 D! n
    ) V" x. L& n- `) L1 M1 F3 Z
    你是对的。+ q7 n7 Z$ _* w) ~, {/ |
    去掉了随机部分) B6 |7 w+ I: `8 D. b
    #y = (x*27+15+random.randint(-2,3)).reshape(-1)6 Z& ?& G. L# J9 D0 o5 Y
    y = (x*27+15).reshape(-1)
    * S1 C- S- X/ E! R7 q) B% ^9 R
    8 _$ b- J! g" c- O: y- ]8 V7 U循环次数加成10倍,就看到 b 收敛了
    , b5 S" R: n# m: u7 D4 `; kw , b
    6 Y2 G6 L* E: S7 T27.002620697021484 14.8261671066284183 {9 |" f4 Q4 ]4 Z4 W! Z

    % C* ]8 _- n% t4 t$ B- f和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-6-27 03:19 , Processed in 0.054935 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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