设为首页收藏本站

爱吱声

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

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

[复制链接]
  • TA的每日心情
    怒
    2025-9-22 22:19
  • 签到天数: 1183 天

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑
    % r. {4 y% v' ?2 X9 r+ Y+ ?) s6 {8 Z0 t/ z
    为预防老年痴呆,时不时学点新东东玩一玩。4 H/ w3 R& g. D) U5 M1 y1 O- X& I
    Pytorch 下面的代码做最简单的一元线性回归:" P" m9 i' u. T7 ?- E
    ----------------------------------------------
    2 e9 g7 X" Y7 V4 n" X0 F2 q" Eimport torch0 I& F3 R- n( j! T, U& u$ J' D! O
    import numpy as np- b: u# ~0 B) G! x. E" a
    import matplotlib.pyplot as plt
    # ~  Y. X: k; k2 nimport random
    ( t, I0 m- Y" M! g) @
    ) Q! l7 J1 V3 N/ t$ d' r2 rx = torch.tensor(np.arange(1,100,1))
    2 L( U5 t0 t7 Ky = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15
    : U: g7 D; R# a" n- f  ^! {5 ]* z; C' x& a
    w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b
    0 m& ?# L5 i" v3 {b = torch.tensor(0.,requires_grad=True)
    ! E5 j  G8 M; R6 ?6 @( w6 N5 d8 M) t
    epochs = 100
    ' L1 U) p$ Y1 Y' ?! z3 l
      c8 q0 n0 W! L& Ilosses = []
    / k7 R6 ]+ v: P8 [8 S% A& Ffor i in range(epochs):" e( S  Y" ^* R4 J$ c
      y_pred = (x*w+b)    # 预测/ _5 J) H9 M& @, E* h
      y_pred.reshape(-1)
    / C) {9 R) x( N. U" G5 q
    / r" `, n6 u6 C4 \6 |  loss = torch.square(y_pred - y).mean()   #计算 loss6 {4 j' K, O2 i( y. i
      losses.append(loss)
    - I/ a9 U8 E# W. `* @* L  
    1 M3 u& _9 q% h$ {) p9 Q9 p  loss.backward() # autograd
    * b/ S( g( L+ b! F; n& Q  with torch.no_grad():, U/ ~1 Y, v% A5 H! C: N( v: |" r
        w  -= w.grad*0.0001   # 回归 w" y  |, T. g; t) \1 I3 O
        b  -= b.grad*0.0001    # 回归 b
    ) |4 K$ R1 @1 B, D* Y6 n  w.grad.zero_()  2 e. ]( x% c7 c1 I$ [! K% ~/ ?
      b.grad.zero_()( g& e+ e. _. w' U( f" `  @6 A

    9 H  q- z! Y$ N5 D8 v. w5 g1 cprint(w.item(),b.item()) #结果
    ! E2 ^) M; Y  n, v8 w2 @5 W' N4 a" ]" _
    Output: 27.26387596130371  0.4974517822265625
    * D  ~' b4 \; ]! Q; Y----------------------------------------------, q* ]9 A) V5 ?# y6 Y
    最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。
    . M3 ]8 E' f: _9 r9 l高手们帮看看是神马原因?+ b5 a1 ]8 Q- |& [" v- D% M. B% r

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑
    ; i% Z( K+ ]0 A$ `
    % C& |( H% B3 u没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?& e7 Z' l# {: L4 ~" F7 b9 m$ F' `( |
    -------
    : z/ A; x- {, t3 M* d% n4 G不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。
    3 \$ }; _" o- x- R' Z-------
    ( n- \1 Y" V2 i- C( A算法诊断部分,建议把循环次数改为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:232 b& B7 |# G2 u; t/ ^
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    + y6 \: N4 p3 q. J-------6 ]- b) w( s. F+ V0 a& a6 M
    不好意思, ...
    + E+ c* v% s' ~& z) @5 Q
    谢谢,算法应该没问题,就是最简单的线性回归。1 y7 u7 C* c; V; o
    我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    9 x' K# f- n4 l# j5 N1 b
    雷达 发表于 2023-2-14 21:524 K% R4 N3 U) d: @; p  k% ^
    谢谢,算法应该没问题,就是最简单的线性回归。7 @$ G0 ~. V, c6 n) w2 j. z
    我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
    ! \' u- m2 W' K* X
    ) F) f, n/ ^1 r
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。. T$ I: C8 G( q2 d- X3 [: L# M' h

    ( ]0 {+ [2 M1 k或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    怒
    2025-9-22 22:19
  • 签到天数: 1183 天

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑
    $ |/ z' [, ^+ g) E2 O; a
    老福 发表于 2023-2-14 22:00; U8 V: r5 F% z6 i1 w
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
      Y* J* z1 t7 A7 E: _% w* g7 f
    " |" l$ w. p8 |* U7 L+ ^  s或者把b但的起点改为1试试。 ...
    ( j& ]9 u! B# B2 @7 d6 s" W

    ! C* [* h, h! u  |) W9 p+ p  i你是对的。
    0 V6 w2 q# G, q! ~去掉了随机部分
    ! W+ @, J  a/ j7 g* v#y = (x*27+15+random.randint(-2,3)).reshape(-1)
    5 r2 o# v  q9 R5 }: p1 G& x$ Fy = (x*27+15).reshape(-1)8 F! M- v- b/ X  N% d+ z
    / Z# D; D) Y6 ~2 C7 U& r
    循环次数加成10倍,就看到 b 收敛了
    # c- L0 i0 C, v  i& @w , b
    + T( X3 X- f* _; I  _27.002620697021484 14.826167106628418
    ! a& `* Z0 F4 ~0 P5 d- ?
    , `- ]" I; U/ ?, v# C和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-9-28 00:09 , Processed in 0.058228 second(s), 19 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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