设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 / m+ |4 [9 f0 ?1 |/ f

    : O( J5 l1 ?# b: o' ~为预防老年痴呆,时不时学点新东东玩一玩。6 M$ E' g+ M: r) v- W
    Pytorch 下面的代码做最简单的一元线性回归:
    1 M4 Q5 A& t, E4 x5 X8 F1 [----------------------------------------------9 Q9 v/ L: w4 {! f8 s
    import torch
    " a9 u, t0 N. e- t5 M; Y5 V, uimport numpy as np
    % L/ p! G/ Y7 Z: O  L! Fimport matplotlib.pyplot as plt
    ( j' D, l4 v; O/ ?import random
    8 c5 B2 H$ a7 A' R! s$ T
    8 K- C4 `5 t* s8 Gx = torch.tensor(np.arange(1,100,1))
    ; ~& x$ j' x* a) W, G# ]/ {y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15
    3 Z4 W' ?* m+ N- Y8 C3 }! b" ]) f- ~. e
    ; x0 E! d3 y# hw = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b% e4 y7 C1 w( j9 }6 c
    b = torch.tensor(0.,requires_grad=True)7 K3 I$ C$ x4 Y: R" A% r/ u
    & ~5 L5 {1 n, u7 x  m! y4 U$ ]
    epochs = 100
    ( V5 X- V/ A0 q, d: N8 J6 Q: P0 Q# Q! l! A) D7 j+ P8 v/ @9 ~6 d
    losses = []2 G- }4 D& e, X( K3 L+ p
    for i in range(epochs):
    . D- k# a! \# l4 w+ s/ L+ i  y_pred = (x*w+b)    # 预测
    * C1 ]7 r; j: u/ L! y5 _  y_pred.reshape(-1)) Z9 i6 M* s) j) T
    + W8 w' {& e4 p) O0 p
      loss = torch.square(y_pred - y).mean()   #计算 loss4 L7 C3 ?9 e3 g3 Q/ A5 @6 i
      losses.append(loss)4 z* `# U+ }  m# H/ `
      
    . b2 @" m1 g/ L% k" X; r$ d( @  loss.backward() # autograd
    5 K$ I- i: D& M  with torch.no_grad():
    " k6 f) j! a7 P9 }* w8 x& ?    w  -= w.grad*0.0001   # 回归 w/ w' U2 e/ Q" c/ K6 y* J# n
        b  -= b.grad*0.0001    # 回归 b 2 U! h$ O" i. m$ H7 X
      w.grad.zero_()  / }' q2 n5 i: ]1 ~# y
      b.grad.zero_()9 t" Z  k, k9 T* Z/ S

    . h0 X3 r8 |! Bprint(w.item(),b.item()) #结果0 s0 |1 d" T3 N' e2 D( [
    + k1 b+ @! ~  l
    Output: 27.26387596130371  0.4974517822265625! E% d7 O5 l+ r2 f
    ----------------------------------------------
    6 z. r" x# _: n3 o2 m& s3 q: f最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。. r. Z$ X3 G+ B. Y5 B
    高手们帮看看是神马原因?. P; m; y+ U$ a' A# x. d

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑 3 n0 }+ `4 A7 ]" q6 q+ c0 t
    - A/ q4 ]3 O$ @
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?) d7 z- L- B% g! W/ w
    -------
    7 @2 o. p8 d9 X6 Z9 [+ r; i7 H/ h不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。
    5 `5 t% w* a  R- o; E9 k+ M/ J; e-------( U1 W9 s: z4 L9 Z( N
    算法诊断部分,建议把循环次数改为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& A  c; B, D& j7 r) Y+ Z7 R/ v
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
      B1 U3 l4 f& i5 y7 G" o- D/ e# ]-------! n- R5 x: p+ \( U; S9 l( ~+ X
    不好意思, ...

    - q6 |* o7 a$ `7 {- N$ C: w5 m! k谢谢,算法应该没问题,就是最简单的线性回归。
    & ?8 c* }3 s0 H3 a4 }" b) F我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    / \) r0 I8 Z6 M) i
    雷达 发表于 2023-2-14 21:524 H6 ?4 S. |$ D% d. ]8 c( x
    谢谢,算法应该没问题,就是最简单的线性回归。
    + y& J0 }* U% H1 \$ s. L我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
    1 g, V1 F7 w  [$ g, i! H

    & _; w0 K' n+ V. Q7 w$ |  E刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    # |! o7 {: N* k! v$ Q
    5 N% W: a# _+ y6 O: o1 n2 u9 K8 s或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑
    + `* `) a& ^. g3 |- i1 d
    老福 发表于 2023-2-14 22:00+ Z3 e' M9 _2 ~  b. T/ F  R( u  O
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。3 w% z3 }7 P* W! O3 l( n6 s  u) a: t

    1 M9 K" r; b5 u* r或者把b但的起点改为1试试。 ...
    # z1 K/ G8 D: Q8 V4 D

    8 C% J2 Z; G" o4 N5 ~你是对的。- e8 ]$ e0 K, I# z' x
    去掉了随机部分
      R+ }6 [  F* A( {' r0 N& k: C4 r#y = (x*27+15+random.randint(-2,3)).reshape(-1)1 M$ F9 C0 @. T3 w/ i
    y = (x*27+15).reshape(-1)
    + j0 h" U! d/ B
    3 v" O' D' \: m  q循环次数加成10倍,就看到 b 收敛了
    7 S+ W2 r6 U' `; G$ ww , b
    $ n- M# U( k, S* u* R27.002620697021484 14.826167106628418
    ! q+ W" h3 D4 q6 w" r9 I, c' \) M( T& m
    和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-6-22 03:45 , Processed in 0.058483 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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