设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑
    # W+ H( f7 Q$ Z$ a, O2 q4 u+ f. C
    ) i4 ]4 \* N; k" R8 e! a" m为预防老年痴呆,时不时学点新东东玩一玩。
    * ]( d* h* S8 Z1 tPytorch 下面的代码做最简单的一元线性回归:- X  A9 e  x2 [; D. d
    ----------------------------------------------( z! N9 y- C( y6 E1 ~  D
    import torch0 v9 i: w! U8 u: F
    import numpy as np
      ]: U# X7 K0 ~& x8 Kimport matplotlib.pyplot as plt& ?8 W2 y& U: [; \
    import random. l9 g! a8 e0 g" J$ D8 y! E$ K- r, i

    7 i/ K1 K8 K4 |+ J! c- mx = torch.tensor(np.arange(1,100,1))% ]& Z  ~* n) V/ ^' @" ^6 L% M) Z
    y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15, v# j' c3 G$ q7 y
    7 V" w( G/ G$ Z+ g
    w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b/ C+ b. c6 p) K# J( W
    b = torch.tensor(0.,requires_grad=True)* d8 }) q4 }& r0 e  c
    $ ]  a2 x  \9 A
    epochs = 100+ {4 p0 G" E9 z# `5 B

    ) u# }, E: g# x  x* H) Klosses = []- ^0 J  X1 z% D1 j! H4 S8 x2 Z/ [
    for i in range(epochs):" N7 e5 j3 P* B' ^3 S
      y_pred = (x*w+b)    # 预测' l$ x5 h, E7 |# }5 z+ q
      y_pred.reshape(-1)
    ! D' ~' @' y1 t- L* _9 s9 d2 l : f5 H. E6 A' M5 a# L) u
      loss = torch.square(y_pred - y).mean()   #计算 loss
    4 ^5 z6 S2 O& K2 o, l8 U! k  losses.append(loss)
    . P( O$ {  H( h( ^3 u& _" Q+ `% i. C    [0 D% l5 a5 U
      loss.backward() # autograd% l& w5 `0 Y  g& D
      with torch.no_grad():8 R; B) t% T4 D3 N" Z! V7 }! E
        w  -= w.grad*0.0001   # 回归 w
    8 U  N8 C5 A' g% U% h6 U    b  -= b.grad*0.0001    # 回归 b & w7 @+ N& f' g, w* y$ ~
      w.grad.zero_()  6 g# c. B( K7 z2 K8 P3 g: I' ]) s
      b.grad.zero_()
    7 W) r7 j% R9 q% n8 Y' O1 b! }* v1 a
    print(w.item(),b.item()) #结果
    ; u  [4 g2 Z# u
    7 z/ Y7 Z" u! ?- k5 W3 c1 Y+ M- |Output: 27.26387596130371  0.49745178222656251 {7 a/ P1 K4 W  W
    ----------------------------------------------
    & j4 X6 ~  a# {最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。3 Q, d: k  w5 }# c
    高手们帮看看是神马原因?  b1 @2 H- Q$ v* d6 M* z. w$ u6 a

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑   y4 N: @) [) Y' P9 `4 @7 `

    $ |, p; A- D2 x& a% @没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?/ q  h( h- Q6 n3 @( u" B( ~8 J
    -------+ u- K) q2 N2 w' ]( N
    不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。
    ! E/ ~+ i4 @% \* X1 N-------8 U4 \9 F8 ]# q% W# Y- j' h! [
    算法诊断部分,建议把循环次数改为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: a; [6 `% D8 z' p! v
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?! m6 N. {- u% M: t2 E* Q
    -------
    : y+ ?4 X2 [5 p: E6 R不好意思, ...

    2 v: Y$ U3 d9 Z7 x$ l  ]谢谢,算法应该没问题,就是最简单的线性回归。8 t$ s2 t/ ^: v: X. j
    我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    ( x( ]" k/ _6 ]5 T& b
    雷达 发表于 2023-2-14 21:52
    + u5 I; f' R& l6 `6 [  y; S谢谢,算法应该没问题,就是最简单的线性回归。* ^" M3 g" ^1 C1 i* l$ l
    我特意没有用现成的工具,就是想从最基本的地方深入理解 ...

    : l# j6 H! t! d- z( d: c
    / ~6 n% m2 l# v; k9 C( E刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    $ h& b- K5 f5 [" R) Y+ Q" q+ S8 S/ o% Q0 n  T
    或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑
    " H9 y3 e- m* I
    老福 发表于 2023-2-14 22:00
    % m2 p1 [5 s, h. }3 O/ ?刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    9 Y# S: x( m$ L" T  i) k& f, I: k. J; |; N& E1 p( q" \
    或者把b但的起点改为1试试。 ...

    ( R; k( v6 e: c1 H: I; w/ ?8 a
    : U+ G8 H; {+ f$ N3 ~7 L你是对的。) V4 x2 R+ a$ s9 K
    去掉了随机部分/ C; ^9 V/ U4 C1 O' W; [4 f+ ]/ t! l
    #y = (x*27+15+random.randint(-2,3)).reshape(-1)
    , i. o) ?, P5 D) |2 Jy = (x*27+15).reshape(-1)
    / {0 q6 a$ `- h! W
    ; c; r; c# @3 b  w循环次数加成10倍,就看到 b 收敛了
    / Q: C% @; `2 f' V, bw , b
    ' y& ~% W; x$ K# w: ^27.002620697021484 14.8261671066284186 m! q2 B' y+ B: V  l

    + Y7 [6 N+ D( j" k$ E' o( f, B和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-8-21 16:18 , Processed in 0.063149 second(s), 19 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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