设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 # P0 p- ~3 s, S: K  ~

    9 F) f7 c- ~; e7 y5 r为预防老年痴呆,时不时学点新东东玩一玩。, W+ _. ]+ ^& V# K- k$ y
    Pytorch 下面的代码做最简单的一元线性回归:
    ' S: O* Y! p- O" G% n# C0 [* @  Q- D----------------------------------------------! {% b+ }& W: O6 l, H2 u
    import torch1 W7 K) l4 K; b8 c  E
    import numpy as np" R+ f* f5 y: W1 y
    import matplotlib.pyplot as plt
    # z! ?2 y: ~9 S( x2 }import random: J( R. K: u- \; }1 `% Q

    : _' q) s) ~% b2 ]* N; Bx = torch.tensor(np.arange(1,100,1))
    * @/ u! @1 L. L- f' S4 |/ cy = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15" e: `( t8 \# X. m' }
    . Q9 Y  ~, z! `4 h: A
    w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b
    + M& ^- w. [3 h5 C$ S) q) cb = torch.tensor(0.,requires_grad=True)( |) O) d2 R8 d3 U) e

    ' R! U9 t9 m% [, f7 l% kepochs = 100# w5 Z. |' ]; W. k

    & a# @2 q5 {' o# ?2 H: B5 d$ rlosses = []
    $ h7 p* {+ e# x, v9 L% Wfor i in range(epochs):% F5 o) \5 \6 I) s7 n. A! B
      y_pred = (x*w+b)    # 预测% \3 O+ t$ h# A0 p# M1 g
      y_pred.reshape(-1)8 t& X7 V( b5 }" I1 O

    % j6 W- j5 i, c: f+ E; A  loss = torch.square(y_pred - y).mean()   #计算 loss2 I0 u. f+ \, b0 {, K% t. J9 f; H. I
      losses.append(loss)0 t7 K* H" F  j
      
    ! X, M- s' d$ {  loss.backward() # autograd7 b; \) o- j; D4 V8 q
      with torch.no_grad():
    / f; z) z: f( H    w  -= w.grad*0.0001   # 回归 w) G( q& W3 E* L" D! v3 G& P
        b  -= b.grad*0.0001    # 回归 b
    2 l0 U2 R% N8 @. ~  w.grad.zero_()  
    1 K  F; Y: j: `0 J1 N! X! {  b.grad.zero_()+ L* H5 w7 _+ M: G

    + W/ R- i0 S9 z9 r/ eprint(w.item(),b.item()) #结果
    * Z! W$ R! z6 v7 v$ @+ I( J0 ?6 a  V4 |7 L9 p6 T
    Output: 27.26387596130371  0.4974517822265625
    . n9 N, x0 A& `8 w1 M7 O1 j: r----------------------------------------------0 N+ s; _7 |# ]3 s2 Q
    最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。
    + |/ E9 l. G0 J. l高手们帮看看是神马原因?
    , ^1 C& D7 G2 [( O

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑
    % m, ]* ]% M( ^6 W1 {/ t% E! P! S/ W
    % l9 U7 _' {: C" t: ]/ H) I, X9 G没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    * V0 j, o; O' a! d$ J; J-------7 T3 B3 w/ d: X/ L: y: v9 L
    不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。$ K- A: l) z. e! o3 }. F" d+ @6 _
    -------
    ' z" l: {. f" w  @算法诊断部分,建议把循环次数改为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! G. ?) o* O, E
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    8 S5 t$ C7 T5 G! `-------
    ' ^0 G, N( p6 J& O7 l不好意思, ...
    ! R2 I* U5 e3 Y7 T) O
    谢谢,算法应该没问题,就是最简单的线性回归。% j- g- a$ F. u8 j+ I6 v# @" g, D9 T
    我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑 & i$ b+ k, p4 B
    雷达 发表于 2023-2-14 21:525 Z6 n- }; K, {& Y  g
    谢谢,算法应该没问题,就是最简单的线性回归。
    # H" c3 {0 N: F我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
    * k1 h! k0 j" f
    ! X# ~5 L4 s& H9 \+ q
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    1 D" v. m8 R- n  H/ {  A$ R# M' H0 u: E2 C  V1 v0 M( Z
    或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑
    6 C5 S) G2 K1 \! U( w; }0 A1 ~
    老福 发表于 2023-2-14 22:00+ G8 T  h6 y# ^+ d6 ^& a. a. E
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。" w* T! X- D7 P( [8 w2 J
    7 |8 @0 K" _- k6 e9 t( K
    或者把b但的起点改为1试试。 ...

    4 z# j+ x; n& ^& Z) O6 y% v: s4 ?+ _  x1 e
    你是对的。! ^; ]- C5 l$ f% j  x0 e. t. B2 \
    去掉了随机部分
    , U8 J. o) k: O3 t" ~  W: N- N#y = (x*27+15+random.randint(-2,3)).reshape(-1); `9 }. L: s0 m. e) S5 A
    y = (x*27+15).reshape(-1)
    % J/ f( G: X# P0 ~4 e0 `& b: A6 E0 z7 `( N9 r7 o% O: B
    循环次数加成10倍,就看到 b 收敛了6 \7 l: U, \# h! r! g* @- R
    w , b
    0 N6 s; I1 }) W$ W8 j- k& n27.002620697021484 14.8261671066284184 [* {9 q3 b! u( n
    ' b4 \, K6 M: Q  P- O- @
    和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-3-15 14:13 , Processed in 0.057399 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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