设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑
    / u- G- ]# ~* D" U0 T0 ^
    2 Z; q; l$ g: r8 K# l5 Q为预防老年痴呆,时不时学点新东东玩一玩。1 l# a% B1 F& g$ s8 E# H
    Pytorch 下面的代码做最简单的一元线性回归:
    4 e" f0 I5 T. g* b! D( c! t* X----------------------------------------------
    # l$ @1 h: p# c/ Mimport torch7 j& m1 k# \- g
    import numpy as np; _* m+ Z$ S: {1 j
    import matplotlib.pyplot as plt8 ]; \& @  w+ S& q" ^2 V
    import random* V+ m, H- t6 `" o9 s: @) T: L
    4 V& m- y: T" ?" U1 a
    x = torch.tensor(np.arange(1,100,1)). W0 U+ n* P% R/ R: J1 c0 v; W' ^( W
    y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15
    5 ^! q% P) m, ~+ K, T! A0 z6 V( J2 _  `2 Z( Z( `! G7 k
    w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b/ L, t9 e1 q  ~
    b = torch.tensor(0.,requires_grad=True)4 U( V$ a( Q2 [$ Y1 V
    0 A. t. Y$ s* J- l2 `* ~, E, \
    epochs = 1003 h' R' f3 V$ _+ K2 B9 j2 ^

    ! k6 A* G* Q! N" Dlosses = []- Z# b# M" s; [! V" b  B- u
    for i in range(epochs):# t8 b$ Z  m* ^
      y_pred = (x*w+b)    # 预测4 m9 B; N" `' u3 M
      y_pred.reshape(-1)
    . Z# x0 ?, _) e' d # ^& o9 C7 i9 S) P( A+ e) }
      loss = torch.square(y_pred - y).mean()   #计算 loss% \; u* D9 P2 |, y! F2 V# P
      losses.append(loss)2 o' u$ F* R- T4 ]2 {8 W& x
      
    + b- [, N' d9 t0 d  loss.backward() # autograd
    4 ]/ F( j5 o/ E5 w$ D  with torch.no_grad():
    # @8 R- [; W4 s5 ~6 H    w  -= w.grad*0.0001   # 回归 w
    6 n5 m! z8 ~6 {! I    b  -= b.grad*0.0001    # 回归 b % r5 a# e! r4 M% L
      w.grad.zero_()  1 S! I. j) X% f: p- U
      b.grad.zero_()6 j. H' Q0 M. p8 ?0 S
    1 l! |, v- \, K6 E5 T
    print(w.item(),b.item()) #结果& a1 S1 l) m$ ]" ~$ a

    6 h/ p4 F' U* _: b6 [" DOutput: 27.26387596130371  0.4974517822265625
    9 c4 h8 b; m( O, S( @----------------------------------------------
    8 F  m. A$ e9 v* B最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。
    4 A! k$ }. O( D高手们帮看看是神马原因?! K3 b+ A2 S3 p" ~/ d: \9 e

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑 , Z) Q3 h7 P5 Z: F1 _
    % d  n+ s8 V) |6 D9 _% e: v, c8 R: G
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    ( ^5 \/ G) ^9 F-------0 @' m6 x8 X# C6 P  q
    不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。
    2 N, }* f# x/ T+ M; s-------* h% U1 ^+ G! Q9 N  C3 J4 z& e- ^! [
    算法诊断部分,建议把循环次数改为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
    ( s9 V$ z* Q" P没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    # u3 i1 }( B5 ~7 ^-------& ~6 q0 A7 \* {  v9 R
    不好意思, ...
    & w8 Z+ t, g' v3 z' M
    谢谢,算法应该没问题,就是最简单的线性回归。
    ; t' T, g2 l* j我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    ( N) f& i# }) E# ~
    雷达 发表于 2023-2-14 21:52
    0 V3 E4 P' v: ?' W! ~' q; }+ F) l8 a谢谢,算法应该没问题,就是最简单的线性回归。
    # r% o, e' }5 p3 b6 k2 f0 E我特意没有用现成的工具,就是想从最基本的地方深入理解 ...

    & C: x) U6 q/ t2 T5 U  y& U9 V  O- V2 M$ u: ~5 H, Q0 i
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。! d( s. \( a. G: \' T6 z/ s

    ) i& C! Z; i; {% c9 k或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑
    + b' e0 l. b& R3 W+ z) c
    老福 发表于 2023-2-14 22:00
    9 P7 g% |) I- G. I3 `! P刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
      q2 H5 F! B" h
    2 O! j' c- ]* l. U% L或者把b但的起点改为1试试。 ...
    / _" `( N: V% V9 k  ]

    & I4 u( z1 d7 D9 _; F3 B你是对的。1 @; i9 j: `' Z" ]+ {
    去掉了随机部分
    6 m- }) Z6 d: D/ D( G' q#y = (x*27+15+random.randint(-2,3)).reshape(-1)- C3 p0 v$ t5 K" G) D3 z( v
    y = (x*27+15).reshape(-1)
    0 M$ c! b3 c. ?; D
    4 a7 ~" c/ M, q" b1 c' F" ?循环次数加成10倍,就看到 b 收敛了
    ( z1 ^! `7 U7 _. I( f: G2 Kw , b5 l% [9 s% l7 y
    27.002620697021484 14.826167106628418
    4 J6 H, ^! b' l3 M: p* W9 H. y4 Q" ~! P/ A) F! J* k
    和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-5-30 05:23 , Processed in 0.057910 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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