设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑
    5 N: m8 c& U. j; R. O* B$ d. p/ V0 c0 X! |# |
    为预防老年痴呆,时不时学点新东东玩一玩。
    4 E9 }( Q) V0 N; m; kPytorch 下面的代码做最简单的一元线性回归:
    / z8 b( y# M  V1 N6 D----------------------------------------------. q! O& ^5 P8 N) v5 l/ v
    import torch+ h8 E0 L: {8 o" g% |" b9 ^
    import numpy as np
    ! ^, |8 S) j( Y) m3 ?( Yimport matplotlib.pyplot as plt
    4 G6 d  M9 D1 x. e1 T/ M' m" W! ~import random
    & I( F2 d6 t; e+ X0 b1 v3 K. h
    ( f) S5 L: A# L* {. cx = torch.tensor(np.arange(1,100,1))
    3 D( i' _% O- ?y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15% ]9 B$ [! F$ t& j" |

    " W% n1 Z: b. S9 v: N# \: Vw = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b6 K3 q) h9 n3 L
    b = torch.tensor(0.,requires_grad=True)# D: E2 ]) K. X5 [' W) B& n6 j4 U
    4 P! |% L0 K2 _6 j. `
    epochs = 100( P5 n* R: q9 d8 z
    $ Y* s& K, N% o4 B: f" S
    losses = []
    7 {) c  K2 V  {* U6 Cfor i in range(epochs):
    $ E2 ^* O; d0 O- ?& p+ ?9 e  y_pred = (x*w+b)    # 预测
    ) ~0 N( @5 ?# D/ d+ Q* s6 V- w4 e  y_pred.reshape(-1): U6 m$ t3 E; C6 S$ h* T' I

    * t: t2 f! C" t5 f0 b" n3 K  loss = torch.square(y_pred - y).mean()   #计算 loss) x% T5 O; X7 C  ~; W* @
      losses.append(loss)
    : u6 A( b0 O' y1 j' }2 B0 `. q4 p) S    ?# k3 ]7 x5 f: p9 p. g; T
      loss.backward() # autograd
    ' N& p0 G7 J- F$ l  with torch.no_grad():
    ) z( ^, Y; c% y3 T  w0 A$ T. l    w  -= w.grad*0.0001   # 回归 w
    9 W; N/ c3 T/ o4 w, s/ G3 `    b  -= b.grad*0.0001    # 回归 b
    ; Z- t3 I  I5 p. p1 g/ Q( q  w.grad.zero_()  & v; e- f* y! y* h& g$ m
      b.grad.zero_()
    : r0 z6 B  t9 m- M* U) p2 h, b# s) z+ [  E$ S
    print(w.item(),b.item()) #结果
    ( d7 Y, `! a0 }7 P% c) q( f
    - V- V9 O6 p, s  y. [+ [. U: ?Output: 27.26387596130371  0.4974517822265625
    ( s0 r& o. _. v$ G" ~% f----------------------------------------------  T, x. ^* r  v
    最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。
    % a& O5 N2 S! d$ {8 U  C/ F! [高手们帮看看是神马原因?
    ( B  F. x2 c+ V- _

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑 & N* t% [, Y* m* p
    ' K3 k. |8 \: l) Q+ L
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?4 W% U+ M  U# `' u
    -------) c+ g8 s7 c& }3 k9 O
    不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。
      J, ~8 N; Y; I3 X-------
    8 |# d( R' A5 k- h4 C2 S/ U算法诊断部分,建议把循环次数改为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
    8 R7 ]* g5 Q8 k; D4 U. M1 d没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?7 Q1 w- w6 j7 E2 r: z+ D3 {
    -------: ?0 ?/ W2 w0 K4 e) N
    不好意思, ...
    % K1 h$ t- m2 \( v( M
    谢谢,算法应该没问题,就是最简单的线性回归。
    7 K' f6 x' f$ f7 M) b我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    ; S" [4 O  f2 w$ y( u& o4 m8 g/ U& k
    雷达 发表于 2023-2-14 21:52, M) s* q. K* ~
    谢谢,算法应该没问题,就是最简单的线性回归。2 h+ W, ^) |. R& m8 i# Z
    我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
    9 b8 Q& m( P3 p1 }. \
    $ ?: e- ~: c# O! g- D. D& Q
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。, m. r# t: {* r
    2 o6 @- _7 C' |% q% u. l- s0 i% V
    或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑
    2 k- |1 x, _/ }) D3 v
    老福 发表于 2023-2-14 22:00
    , h" F, F1 M+ X% Y5 @刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    $ f) T2 `7 u+ M& q' u/ r# X  t0 }; ~+ T0 g0 {
    或者把b但的起点改为1试试。 ...
    4 l0 o7 c6 U  H5 F' [8 y

    # D, R4 k4 Z/ a+ h你是对的。
      m6 B$ `1 F$ c" q  o% j8 H9 q9 D去掉了随机部分3 R: ], ^  z! i* S( y* c" a6 S
    #y = (x*27+15+random.randint(-2,3)).reshape(-1)
    2 {( `7 D- t7 h* sy = (x*27+15).reshape(-1)/ E' c3 T3 H" U( d* r: p' K

    % J5 @3 i  Z( Y$ H+ n循环次数加成10倍,就看到 b 收敛了
    - R; n* V( z% Y' _w , b
    2 }$ d  t$ A7 d- x5 V27.002620697021484 14.826167106628418! q1 u' r6 b" v4 O/ G

    ; O8 s& U, Z+ r和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-3-18 09:33 , Processed in 0.052881 second(s), 17 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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