设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑
    * Q! e/ `7 _! q' Q- z6 h6 t7 ~7 t! r8 \3 h! V! h" B
    为预防老年痴呆,时不时学点新东东玩一玩。
    % s1 i$ o+ o- }  S" |. ^Pytorch 下面的代码做最简单的一元线性回归:
    ' V( S' f2 _* {----------------------------------------------
    $ {+ m2 `4 V  |import torch# `& S5 [% I& v# J! O
    import numpy as np
    & {/ z" p5 S, l3 B+ _! o0 mimport matplotlib.pyplot as plt
    ; J( u- {9 L! [# U. c4 t5 J- ~2 Aimport random* L0 T2 G  h1 L& C  m( k% I1 D
    6 X- _9 K! ~! B8 [5 ?8 D* O
    x = torch.tensor(np.arange(1,100,1))
    ' k  j) P' Y/ l/ P) I* ^+ f. Dy = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=152 d$ O# N! Z5 g1 f$ A
    9 y% y' L# e0 S& I, b0 O
    w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b
    ( R* x9 o2 Q( Q. ^2 \; tb = torch.tensor(0.,requires_grad=True)
    ( a8 [1 V2 f  p$ i/ m  D( a$ e( G( ]( G1 o
    epochs = 100/ }8 @! n% \- h) f/ t, M
      v5 j/ g; a, l4 b1 n3 \: j
    losses = []
    . y5 J  V, o; ]9 R+ W  jfor i in range(epochs):
    ! B4 l5 o$ N& a' J' ?  y_pred = (x*w+b)    # 预测
    9 @- S3 c* a9 \/ c3 w( T) Y& `# }  y_pred.reshape(-1)
    # S& A, i+ d) e) |. ? 1 C! u+ C; u9 e& H( W; p' ^
      loss = torch.square(y_pred - y).mean()   #计算 loss
    $ u& T0 L3 V# U; E$ c* s  losses.append(loss)7 F) D1 ]9 j* _& L
      
    0 h2 e& [' |5 U$ v9 y6 g  loss.backward() # autograd
    2 Z- |1 N9 L3 c9 [- J/ k$ e  with torch.no_grad():# L0 p4 S8 Q2 b+ j; D6 ]6 C0 l
        w  -= w.grad*0.0001   # 回归 w$ v4 G  F$ s( A3 Y
        b  -= b.grad*0.0001    # 回归 b % v4 y& c3 j+ v& t5 h. `
      w.grad.zero_()  " Z2 K* o6 k* R6 [6 R5 f+ u/ H
      b.grad.zero_()
    ' c$ T) R8 k+ s- O% F5 u; @( ~2 ]7 Q$ X0 V1 c% x$ v6 ~
    print(w.item(),b.item()) #结果* T1 t4 y$ I1 T9 \8 K% I2 B! \
    + W" I  L0 H9 [+ x: _: A3 {9 X' o
    Output: 27.26387596130371  0.4974517822265625
    8 F6 c' D. T2 N5 N, l! m3 E----------------------------------------------& |+ N% Y( @& D; j4 N+ o7 ]
    最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。/ n. T4 X' \) B
    高手们帮看看是神马原因?
    3 k% U6 t6 B, E2 T* P  r

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑 8 s7 n& Y4 F8 V* x( j

    ' B$ d0 n4 ]" E$ X5 ^# o没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?: e$ n/ L& q5 d
    -------  n6 j( K8 D+ ]" {0 N
    不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。# @* J' o4 b+ L8 g( r; E) c3 t0 i1 ^# x
    -------
    : r1 U  q0 Q2 l7 f算法诊断部分,建议把循环次数改为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
    $ h2 C) D. ]/ c1 @- F没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?. v$ g9 Q) k4 N8 W3 P; ~# D
    -------
    : b0 G# [# U0 q# e+ h0 D1 }不好意思, ...

    9 I2 n3 J& [1 O# D6 b- x7 M, V% s谢谢,算法应该没问题,就是最简单的线性回归。
    8 D- k( S; a: `8 F8 _我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑 & J0 _, ^7 b2 }" x$ L, i
    雷达 发表于 2023-2-14 21:521 r0 m# Y* z: i" x9 q# G/ c: l  T
    谢谢,算法应该没问题,就是最简单的线性回归。
    1 d6 n- ~( X! h, ]1 i3 x3 w  z我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
    * F% P4 [( G8 H; }; l$ k/ r

    & j5 g: l* J2 r- k" Q刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。0 W& y) z1 g/ P" J- u5 e. y" M/ E

    # L1 |- @6 W1 Z" r4 j0 V或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑 6 W# d7 y3 Y6 z5 q7 i# A
    老福 发表于 2023-2-14 22:00
    " y* E  w* r1 |% J; @4 Y刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    0 j4 {3 f3 i9 Y9 q& x; F  v6 E1 c9 i) G4 b, X7 a
    或者把b但的起点改为1试试。 ...
    % V5 F. w0 I7 h( J, f/ |# r

    6 P/ ]1 ]- G+ z' u- f你是对的。
    / O; M% v1 n: ]* ]. d, Y$ ]' {3 B去掉了随机部分4 H& ?3 A& I* O7 I# b7 t+ j+ p
    #y = (x*27+15+random.randint(-2,3)).reshape(-1)
    - Q! M! w4 J2 @* K# Dy = (x*27+15).reshape(-1)
    0 @* y+ _+ C" b2 X% K( z- D7 K
    % n- K+ c6 K% G- `! u3 I循环次数加成10倍,就看到 b 收敛了
    5 C. [( G7 T; U2 |  ?4 uw , b
    ( y) ?, O0 j4 y5 u" U9 }0 b27.002620697021484 14.8261671066284189 X- E4 u* e  D# ?) p  k$ \+ G0 C
    2 k$ }; {( h0 l% t- z$ c) ]% ~
    和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-8-4 04:33 , Processed in 0.059136 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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