设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 + {- f/ o  P6 u
    1 |2 Q  k7 @! \# M6 ~6 e7 [7 H2 \
    为预防老年痴呆,时不时学点新东东玩一玩。5 R, c+ ?$ z& R% W( J& {: h
    Pytorch 下面的代码做最简单的一元线性回归:7 m! W0 J. C" {4 g2 ^2 v8 ~2 K
    ----------------------------------------------
    / r0 |: _3 [. d  ]' Yimport torch- [2 C: L' f8 T. H! I% [4 [! J
    import numpy as np7 U: g! T' g& @8 n
    import matplotlib.pyplot as plt
    2 l  p# z/ z3 Q* g6 D5 O7 M! @import random8 g+ J- \  x; o

    # ?, k% [% C$ F# Xx = torch.tensor(np.arange(1,100,1))
    2 G9 m* o, W2 Z% ]9 B+ Fy = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15
    4 [7 p, e; T, B  ~3 V( b" x6 T. h; [/ \4 l' L8 l4 u! ~
    w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b4 s# i4 K/ U% b) H% C
    b = torch.tensor(0.,requires_grad=True)
    . T7 Q. N! x2 V, ?' R1 ^$ f
    6 T) A1 J& k- M& pepochs = 100
    ! j4 ]! t9 j" T9 \: X4 N7 C2 J8 l8 [  L& z9 E& K6 Y
    losses = []
    & r4 g' t2 q. F# }5 [for i in range(epochs):5 {, j; V* x7 [' E! R7 g$ m7 ?
      y_pred = (x*w+b)    # 预测( N  \7 M2 C; V8 Z/ r
      y_pred.reshape(-1)
    ( L% Z2 w8 B% v( |
    + _  h& X6 D' u# Q  loss = torch.square(y_pred - y).mean()   #计算 loss
    0 I+ t8 M* d9 ?. R; K  losses.append(loss)- k. ?/ x1 ]4 o' e5 ]- [
      " \/ P' O7 O  y3 |' r
      loss.backward() # autograd/ Z/ |6 O7 ]5 R2 x! Q# {
      with torch.no_grad():" b, [* r5 V- N8 H4 d1 b/ L$ M# M
        w  -= w.grad*0.0001   # 回归 w) [# I. I8 g$ @2 \
        b  -= b.grad*0.0001    # 回归 b % R1 N$ Z4 k7 |+ O9 m% h- c
      w.grad.zero_()  % X% @7 T$ r8 X
      b.grad.zero_()* L6 N# B! m1 s2 Z' T- ~9 T! d! j

    5 L2 y5 G1 g8 W4 l5 ?9 H4 y3 nprint(w.item(),b.item()) #结果
    ' b- e- u/ H  f+ ?* }) H. \2 l; e2 W# R  t  i
    Output: 27.26387596130371  0.4974517822265625) C: \# k  I; w
    ----------------------------------------------
    - ]3 {3 ]* E  D2 b8 d最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。) K' w! ~9 v/ w! A
    高手们帮看看是神马原因?: U7 m7 T* U2 N, n) [/ S$ r$ D* i

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑 1 W3 n0 o7 r. Q1 z$ _

    " @7 O2 r* Q5 X没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?. v  Q& F: O1 K1 ]& {+ v1 j
    -------
    8 [2 D' D8 M) F5 B* D4 i& H6 N7 U不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。
    8 }3 _. Z5 B' c6 y3 K% J-------
    7 w5 d" E9 M& O: D" h, O算法诊断部分,建议把循环次数改为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  t9 i5 U; E5 M3 c' j: c
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?$ U6 J: L+ T$ h  p0 M5 ^$ m% h0 s
    -------6 s- ^, k' y5 b( E2 E
    不好意思, ...

    ) f2 f4 Q& x7 x9 I! m3 y# J谢谢,算法应该没问题,就是最简单的线性回归。
    / W3 j* V- ]" n2 v7 X) t我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    8 m& }8 ~4 c" E
    雷达 发表于 2023-2-14 21:52
    " A# |; i! c4 Y. C谢谢,算法应该没问题,就是最简单的线性回归。% t: u2 C& ~) a: {# }
    我特意没有用现成的工具,就是想从最基本的地方深入理解 ...

    % H2 F3 R( P: S6 [3 o  c* G: |; V2 v1 i$ @
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。$ o( x9 q3 t. i

    7 Q: ]- P2 Y; W" `或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑 / H7 e+ n0 \" K, r* H* _
    老福 发表于 2023-2-14 22:00
    0 _9 L$ Q/ I2 S- ]3 |: r/ r刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    3 E+ \& ^" w5 {) J) t0 o4 M" {: L0 e) Z# Y; c
    或者把b但的起点改为1试试。 ...

    4 [% t: C, g/ [
    5 X9 c# Q& E$ F8 b% N: o你是对的。
    / F& K3 Y' z( |: Q7 v# H9 X' ~去掉了随机部分* X6 K0 p9 {& ]3 ?! a! o
    #y = (x*27+15+random.randint(-2,3)).reshape(-1)
    " m4 |9 M  e1 {3 n+ iy = (x*27+15).reshape(-1)
    ; f! O6 l9 t( K3 G/ u$ |
    ' b5 R  i. K) e* R" ~: b循环次数加成10倍,就看到 b 收敛了) k2 T) e" t2 ]2 C3 h! a
    w , b
    % E" G* ?# V) ^, Y* T6 Q27.002620697021484 14.826167106628418
    % g0 z& K  S$ T. g7 ]+ \& `+ p. P4 k9 V2 ]# F
    和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2025-12-26 00:52 , Processed in 0.049486 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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