设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑
    ! e# ~) E4 X8 q% ?! [. A
    1 z! H# v2 S' p! {- d' |为预防老年痴呆,时不时学点新东东玩一玩。
    , i/ a4 D7 S5 |& _  f5 ]Pytorch 下面的代码做最简单的一元线性回归:6 x$ M& a+ `/ q/ @8 h8 R. r4 n
    ----------------------------------------------
    " a) }7 C/ I( L4 g5 i9 Pimport torch
    - f; D% {* `& _5 T# l1 z/ r# C/ G  uimport numpy as np$ D1 m& x. m; k/ l$ S6 W6 `8 A
    import matplotlib.pyplot as plt
    4 `. c) R. I0 z8 Q$ Simport random
    ! i! x1 E. }4 g1 N( a) O6 O, Q3 }' J8 i. _( p
    x = torch.tensor(np.arange(1,100,1))
    ! w- p/ I! k. }  j9 r2 `; Zy = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15
    ! n7 U# U3 Z) o0 d4 o/ q- K$ m' a$ E& h2 k- E2 G! s0 ]% I: i- N/ g
    w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b
    / [8 D# {3 c; t# J/ l) i  E7 h2 f" Qb = torch.tensor(0.,requires_grad=True)* V- g% P9 a& D; Y8 T

    * q6 c; Q7 ^* A% Q; T, N$ b* wepochs = 100
    % x4 q0 X' X0 l6 c3 D  o" d6 @
    losses = []; `6 j' M3 k+ y# Q; g& [! {
    for i in range(epochs):/ S8 f% T& z+ z! j8 R  z
      y_pred = (x*w+b)    # 预测
    0 s1 s2 C4 {9 X  p6 Y1 C5 b  ]( v  y_pred.reshape(-1)
    + R5 Z! P% l0 z8 _# b- f/ V( K. A* | 1 g+ {- ?% P) P" I. n! \/ j. Y& h
      loss = torch.square(y_pred - y).mean()   #计算 loss
    3 t, A( T: a  b! u# Q. @  losses.append(loss)
    . R4 y$ y( f/ j7 s+ U! l  . _+ r+ S, t3 W/ I6 S
      loss.backward() # autograd  f1 p" ]0 F& |6 o- W7 M* W# x
      with torch.no_grad():  f! g% @. x5 T7 E: @# x' d
        w  -= w.grad*0.0001   # 回归 w
    . {6 Y" w2 v8 A. A    b  -= b.grad*0.0001    # 回归 b % K, r* l5 ^+ ^% a
      w.grad.zero_()  $ y3 H( d4 ~4 Q* Y6 L8 O9 p
      b.grad.zero_()$ d6 }+ h1 ^; a
    7 s+ r6 P8 m) d8 ]4 L' |9 _
    print(w.item(),b.item()) #结果+ Z; w9 f. t! V& W( w

    ( X: t3 b- ]* S) `+ EOutput: 27.26387596130371  0.4974517822265625
    $ }& z3 I/ C2 i* q) V% q$ q3 n----------------------------------------------" s: {3 |7 v% C, O0 J
    最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。
    4 B3 j1 |; n! A- g+ P2 I4 W; [, A高手们帮看看是神马原因?, @: T& n! J, R$ Z9 ?4 A' T

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑
    : v; [0 F4 g9 b" S
    1 d( j5 f3 X! V+ L& B没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?( m# v  W( T* O' Y8 [4 N$ K" C4 d: |
    -------
    0 P  x$ R, d# ]. B) U6 y不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。
    $ K' H% V, n4 U! v3 P-------
    - B& ]7 {/ W6 s% Z6 D6 L算法诊断部分,建议把循环次数改为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
    % p* E$ \6 B3 s# _- s$ w没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?2 t- C6 O, G9 m
    -------
    . G  S% h. e( L7 o5 Q* B2 i$ l不好意思, ...
    " \- I( A- |  s
    谢谢,算法应该没问题,就是最简单的线性回归。
    ' H7 p# |( t! |4 M$ ?我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑 6 K9 }+ r0 Y( c% c$ [- U" J( ?
    雷达 发表于 2023-2-14 21:520 E( b. _' X1 ]1 N1 u' m$ w% V/ e
    谢谢,算法应该没问题,就是最简单的线性回归。
    . l) M. c8 T7 L8 z" t) C/ h我特意没有用现成的工具,就是想从最基本的地方深入理解 ...

    5 \6 Z1 |. r5 A8 l9 {
    1 Y3 a& X/ J& C- z% M7 [) F: }' O: @刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    # _6 L6 t2 ]4 z/ h$ `# d2 P) s3 Y# z  J- a8 E3 @+ _% a- V
    或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑
      C4 W6 Z9 I7 I' f' p
    老福 发表于 2023-2-14 22:00% \, c$ I1 W* Y) C& y
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。+ A6 {( t# K# e8 h- H* f

    0 v, d: @, U* [2 ~/ Y$ ]( K" J或者把b但的起点改为1试试。 ...

    " G: T/ w1 {/ }$ K/ V$ `7 y5 M; _5 z; O+ M8 S  l4 A5 Y$ l  c
    你是对的。4 U" k! Z( h! S+ r7 R. s% t( M8 j
    去掉了随机部分8 I3 ?  t6 U# m
    #y = (x*27+15+random.randint(-2,3)).reshape(-1)
    , |0 U% B9 x; Y' Iy = (x*27+15).reshape(-1)
    4 f* V6 r' O- u2 |& c/ f1 n; i
    ; U0 B( k# ~+ N2 S! ]( U- m2 N循环次数加成10倍,就看到 b 收敛了  a2 \, V+ b. {! Y$ M$ x9 T
    w , b
    1 ^6 W% S7 i; ]" {- p- L: {27.002620697021484 14.826167106628418  \) M/ t8 v% _5 {' K- g

    + q2 L- {0 [. E: W! v8 L和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-3-12 01:39 , Processed in 0.056942 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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