设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 # G- \$ z  h/ E  A! O( ~: L( o

    % q; p6 z, Z% M( T" ^为预防老年痴呆,时不时学点新东东玩一玩。
    9 ~4 D- T# C) G1 |- m# i% d; qPytorch 下面的代码做最简单的一元线性回归:: A8 ]/ r7 @, W/ w  V$ H! [
    ----------------------------------------------
    / E( M3 P. }2 j, qimport torch
    1 X: b( T* l. B8 t* M1 J4 X. Pimport numpy as np' ?* e3 A' I! L, ~( T/ e+ r9 P3 N7 X
    import matplotlib.pyplot as plt
    % g# z+ u6 K0 |3 jimport random
    ' V, s! Q* P" m* ?
    4 u; i, L8 T7 N. R: ]x = torch.tensor(np.arange(1,100,1))! \  {: |: ]+ W; h7 Y. f0 Z( ?# h
    y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15, f: v+ j+ P, n2 k) ~

    * B' N# l3 ?) r# @4 y$ ew = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b: ]0 q6 B" G3 t5 @( \. {
    b = torch.tensor(0.,requires_grad=True)# ]$ ?* W# t* o( f  b/ ^

    . Y% @8 t( U* h  E+ t7 ?epochs = 100: p* _/ A( {& C, Y' h: w

    9 y8 [2 `' D% d" b, m- v% O! D) e7 ?& ^losses = []
    7 _% {, {- Q( G" r0 z( yfor i in range(epochs):
    ( p- P2 d) N' `/ v; z: c  y_pred = (x*w+b)    # 预测
    ) Z1 v/ L, p6 Y7 X' \/ |  y_pred.reshape(-1)7 j. K$ H" F5 Y! |4 a- B0 x" T

    8 ^5 j3 y, \: b- I  loss = torch.square(y_pred - y).mean()   #计算 loss
    $ q9 d) t9 B3 v4 B5 Z$ q5 E* w  losses.append(loss): o# l( o/ g+ R: S' m5 _7 A
      $ O+ q5 Q/ V  D/ R3 A9 ^2 V
      loss.backward() # autograd7 A, v" x, A2 i$ A$ v
      with torch.no_grad():+ A; B. A- |& H, N3 }' U! ]
        w  -= w.grad*0.0001   # 回归 w" z' i: m# ^7 U$ g9 T
        b  -= b.grad*0.0001    # 回归 b
    8 T0 `  J: W& m  w.grad.zero_()    `3 d% [( _$ L9 L5 s9 w# Q
      b.grad.zero_()5 q, Q6 {1 |5 R4 I2 ^
    7 P  T( z- S5 v
    print(w.item(),b.item()) #结果5 }- R* \# \- w

    7 d) F" t, R1 m" lOutput: 27.26387596130371  0.4974517822265625
      ?9 k+ S+ t& z' j' K6 ~9 f: t0 @1 n----------------------------------------------! M) r2 @- J  _/ K- N8 [0 `
    最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。
    & r( b' O2 ~! g+ M/ j( z/ ^高手们帮看看是神马原因?
    " j2 B( o8 ]7 C+ H: q

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑
    5 O9 f# {0 R  F- G1 d
    # O4 I2 f0 x9 D) B没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?& o* p: w& R# w0 _% I- x
    -------
    # ~+ c  e6 c* V- K2 y不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。3 w& t7 u& X, B! j
    -------
    ! m2 ~; n6 t5 o$ @. G' g$ D: P# z! R算法诊断部分,建议把循环次数改为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+ \+ i# Q1 y. z/ O
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?6 N( S3 r) l0 A. c; Q
    -------
    8 k. w, r) y# W3 v- z% ]2 m不好意思, ...

    % a8 q5 U/ I, Y- C" Q1 k. t# ?9 E' _1 G谢谢,算法应该没问题,就是最简单的线性回归。
    : c) g' H0 c+ c' r% Q0 V5 [我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    % _6 A6 h2 V# v' m, D
    雷达 发表于 2023-2-14 21:52
    & B% q) K$ l( ~) b! J3 A$ x谢谢,算法应该没问题,就是最简单的线性回归。! C) s) _* T, N4 `. j: E
    我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
    # b6 _% f8 N6 p

    6 [$ ~/ n8 X% V0 G6 r; D6 O刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    5 O+ o- y7 C. F4 D, r2 t. p% Y3 x, B  V
    或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑
    * i0 t/ {( K" U' i/ Y3 V
    老福 发表于 2023-2-14 22:00
    ! \# w$ e- G, T* y. r8 b& n( p刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。: }5 g. m$ G7 L

    6 q. a& H% G3 f7 F+ H* j' p或者把b但的起点改为1试试。 ...

    ) ]+ R. I+ W8 p5 T2 |6 S4 a- _$ Z' Q5 @! \
    你是对的。
      S' n" n2 ~" e去掉了随机部分/ w- D# L* J" i) _9 j- Q4 P4 [" Y$ o
    #y = (x*27+15+random.randint(-2,3)).reshape(-1)$ ~' E% W$ Z8 q( i5 S
    y = (x*27+15).reshape(-1)
    2 M6 ?0 W# S# l+ n; q. h/ H) ]1 M' R' @9 }/ T/ n' N
    循环次数加成10倍,就看到 b 收敛了
    . M, f% \& }8 {; L1 J7 w. Dw , b1 j$ D* M, s9 ]7 Q
    27.002620697021484 14.826167106628418
    6 T  B9 f, a! Y8 W7 h- {
    9 n5 J* L5 N$ W& k% i和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-3-3 00:29 , Processed in 0.058249 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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