设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 % H5 A: n5 E+ G, H& }8 n

    8 H8 Z+ b; x; q* ~" b: n为预防老年痴呆,时不时学点新东东玩一玩。
    ) M) J) Y: f; i* }Pytorch 下面的代码做最简单的一元线性回归:$ l( N; ]0 Y8 F) r
    ----------------------------------------------
    4 `  ~2 ]* a) Y  \8 S  Limport torch
    $ X& u( p+ G. S- P& O1 q, ~import numpy as np
    # ]1 a) A- Q* G3 H; s7 x  Y  Z& b# Vimport matplotlib.pyplot as plt
    9 F, P2 N/ N) o7 X) o" B3 pimport random
    ' f* W/ `9 A- B. J% n; t0 v  b; x# r( a+ L9 x
    x = torch.tensor(np.arange(1,100,1))* b6 K( V3 C) d2 F1 u/ C" `
    y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15
    1 n5 w" s! U* g( K( l6 y/ X2 [: Y9 L' L
    w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b
    8 n% H# F- Y' u3 ^* N4 a4 Wb = torch.tensor(0.,requires_grad=True)" x/ L' L! K0 c' e
    5 s) D: b0 z( \) k0 k
    epochs = 100' t- K- A! f9 `1 ^( M1 X8 P
    9 x: ]2 S0 D0 ~4 q1 }
    losses = []
    % P5 i3 _: i' q7 w( Zfor i in range(epochs):
    0 V# e  q' L, u  y_pred = (x*w+b)    # 预测
      D( x, m% z: K3 ^$ y8 |$ F  y_pred.reshape(-1)0 \9 h. U3 i/ J
    . M. b- s9 o  Z  F* ~& ^+ v- t$ ^: C% g
      loss = torch.square(y_pred - y).mean()   #计算 loss, h/ z5 {$ u5 |% E  F/ h9 [$ {& T
      losses.append(loss): D/ e- d% _+ V- e5 i# _
      
    8 s) x, v% F! r0 k7 R$ k6 G  loss.backward() # autograd7 H$ \# F: {* L7 {0 {
      with torch.no_grad():
      m; V0 h6 d2 C5 j: X1 l    w  -= w.grad*0.0001   # 回归 w- U' c( Q+ b% p
        b  -= b.grad*0.0001    # 回归 b
    ' A; R  z3 y+ M/ u1 \  w.grad.zero_()  ; @- [5 o* X2 q9 o# W
      b.grad.zero_()3 Y3 e& w  q3 d' t
    ( G; D8 V  ]; @( h
    print(w.item(),b.item()) #结果3 {; \& f( E4 _! B( s3 y+ B

    " c. v  k; f1 r1 k. T* AOutput: 27.26387596130371  0.49745178222656258 H4 X! K+ m$ y; z( L9 H
    ----------------------------------------------
    , C$ q4 y; ^! Z/ M  {- Q8 K最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。: z+ S9 `# W- ^& Y; x* J4 X  L
    高手们帮看看是神马原因?
    / S. o- `6 i8 o" l3 P* W* c

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑 9 S  P) d8 p$ d

    0 l. B! K" w% @  A; A, C没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    4 X5 K8 @5 i4 C-------
    $ Q6 _- I0 z2 g) o' P不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。9 k& @. {/ A0 H9 i' B+ x, V8 V
    -------
    ! e8 X7 H1 ^! z8 p算法诊断部分,建议把循环次数改为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 [+ ~. ^7 Z+ [+ r
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?8 V9 D: x- a! R
    -------% P1 s; V, T$ J2 V* u7 r
    不好意思, ...

    9 _5 d. a' Z+ a谢谢,算法应该没问题,就是最简单的线性回归。
    0 _# |3 H( ?( S+ q4 z+ ]. X6 B- _+ s我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑 , U8 X8 M9 T0 T  B# J  H$ h4 u
    雷达 发表于 2023-2-14 21:52
    3 D* p, u* ]/ Q. x谢谢,算法应该没问题,就是最简单的线性回归。* c& N0 p- n2 {( M4 f7 m
    我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
    1 T& O' Q( g  V+ u

    / a. K! e0 s8 r8 v: a$ ]' o& `刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。, v# G0 {' O+ |6 }

    ' \) l: B& j/ {3 j3 o0 a或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑
    " \, o# \) a/ N1 J# q) n: k. x
    老福 发表于 2023-2-14 22:00, L. j! R$ c" g# k# |
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。, J7 f8 h" m1 D/ y- z

    1 a. q% h6 w7 o" i. H1 V或者把b但的起点改为1试试。 ...

    - N  ~2 M; x5 _; C; L6 a9 B( Q$ q3 Q' Z0 u6 o8 Z
    你是对的。3 N( a. A: ]) `2 q
    去掉了随机部分7 Y) M: x9 {" J
    #y = (x*27+15+random.randint(-2,3)).reshape(-1)
    9 I! ?, _5 ^, l. H1 Ty = (x*27+15).reshape(-1)" e% {) \- S! e% {

    ! ~5 e0 u+ a1 i' X循环次数加成10倍,就看到 b 收敛了
    , b1 F6 D3 v  b; B* n4 H2 Vw , b
    ! \+ j8 I$ \) y* E2 u8 U5 V27.002620697021484 14.826167106628418
      V3 Q( p# u2 _2 j9 z3 E: s$ j; b0 X
    和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-4-23 20:52 , Processed in 0.056167 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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