设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 9 ^% D5 \1 F+ o' J7 S# N: {
    ) [/ }6 d, I: ?1 b/ i/ P
    为预防老年痴呆,时不时学点新东东玩一玩。& E/ _2 ?: \0 @5 ?7 ~6 f& t
    Pytorch 下面的代码做最简单的一元线性回归:4 o( g; f' v2 F3 i5 O$ `
    ----------------------------------------------
    + t$ D. s0 \! F. W( t6 C6 i; _import torch
    1 h0 [; W7 W  p5 t* V( W6 @% Kimport numpy as np: \$ J* o3 @0 ~; D+ F0 K/ j
    import matplotlib.pyplot as plt
    ' D4 o' @; `' Fimport random. B8 Q9 ^& R# }, E5 p3 p& N9 t8 i
    ! @" b1 e8 d! r1 S1 U( Q+ V# D
    x = torch.tensor(np.arange(1,100,1))
    3 C2 Y6 @& L, Yy = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15
    , `* ?9 `0 I, S7 Q7 |8 T/ s6 E7 v# L* C# n$ _
    w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b' I+ H" x9 A, _  k  h2 a
    b = torch.tensor(0.,requires_grad=True)2 J; z+ w6 h. n& [

    / f; a6 ]7 [3 _) Z& ]epochs = 100
    8 E- I  g$ J& h; D+ b0 o
    " J$ Q( I& v7 o$ j  r. Llosses = []8 l4 p8 O: e& X0 |. H! K) a
    for i in range(epochs):) G0 Q. P( Z# Y9 J2 {* H
      y_pred = (x*w+b)    # 预测
    / R4 m7 x( [2 |% M, C  y_pred.reshape(-1)
    $ X  x; J/ V; c. _, a% g
    ( ]7 l( ~2 R9 Z! O# P  loss = torch.square(y_pred - y).mean()   #计算 loss9 N1 I  W( w4 O5 U' |( B$ A
      losses.append(loss)# G$ W) f+ t$ B# {7 `/ E7 k
      
    ) p% n% K  m( ^# D& b* X5 g+ [, E' ]  loss.backward() # autograd
    5 u6 I8 h# X2 f  with torch.no_grad():0 v; f' D! d' f2 P1 O& H, x% c
        w  -= w.grad*0.0001   # 回归 w& w! @' A: ~6 k3 G5 {
        b  -= b.grad*0.0001    # 回归 b 6 i: n( \2 V! z( a% _
      w.grad.zero_()  
    - j" I& @' e% N& D/ J+ t  b.grad.zero_()
    0 p: h5 e4 U  c* B
    3 g/ r& C& d" ^" Cprint(w.item(),b.item()) #结果& K' f. V. A6 O" P$ k) h* g

    - p; i% i6 p4 Y$ ]Output: 27.26387596130371  0.4974517822265625
    9 J. v! ^3 H6 z6 D; f# ?, n----------------------------------------------
    + P) Z) Z1 G% Y6 ?: q7 ^最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。
    + G* U) Y) \& s7 P% T( Y; r$ k! C' j+ z高手们帮看看是神马原因?; t; l2 O$ O4 F5 {! Q% Q

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑 . Y' b' w  t8 i/ o% d9 O' @" i! o  F
    $ m+ v7 X- p  b! D% c- j! ]7 A; F
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    ; x4 E7 U1 |# z# p  N, f-------
    " [& k8 P* {( x  g7 L4 X6 w' A不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。" H8 H/ d8 Q* l8 d' ~9 Q. Q0 i' R
    -------
    $ ?2 y% l. _$ ^6 f/ o算法诊断部分,建议把循环次数改为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
    3 @1 k7 V& _0 K& }- z- l没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    ; |- a! t$ w6 B( i2 C  [: W-------5 F  ^' S( o! M2 Z3 z
    不好意思, ...
    . B' F# j9 v* C) S7 l
    谢谢,算法应该没问题,就是最简单的线性回归。
    3 S" H9 h/ I/ v5 }我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑 1 p; ?  k" ~6 D, {8 C/ w  B4 z
    雷达 发表于 2023-2-14 21:52
    " }7 ~9 M' e) T" W谢谢,算法应该没问题,就是最简单的线性回归。
    2 F2 U6 F3 |" Q7 F+ o我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
    " x1 V% G1 ]) o3 O$ l0 W3 ?( c

    / ]) ~2 y, ~9 ~* S# B刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。) L0 M" P( D/ Z/ ^

    1 i9 o& {" W2 i5 z) O6 b. R或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑
    * s/ E" t% @1 X# J8 s, k
    老福 发表于 2023-2-14 22:00% C4 c8 A2 |* S7 }+ K
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。- z5 O  I" c3 @, S. N+ V* t
    . Q" Z( _* p! l5 z1 T
    或者把b但的起点改为1试试。 ...
    ( I* W0 K+ D$ t  q( O3 S: H
    3 U* [2 V8 o1 e! R7 Y  w' S
    你是对的。
    # Z# W# \2 B4 f0 p$ k, W9 a去掉了随机部分! R7 ~7 ?9 D( c$ Q+ @+ A( H6 ]& c* @
    #y = (x*27+15+random.randint(-2,3)).reshape(-1)7 m3 q4 }* l: @# b1 y! [& B
    y = (x*27+15).reshape(-1). ?# ~! |0 u8 k4 k- @# J. _% l
    : k2 v2 F# F8 b4 t# m( A. j% a
    循环次数加成10倍,就看到 b 收敛了( C+ L8 D2 q) F  o. W, _; X  g2 L5 {
    w , b
    8 i  n, }% K. D& {27.002620697021484 14.8261671066284187 Y- Q+ l0 Q* h& u& W0 m+ M2 r

    & H9 [1 e& s' e/ A- D; a* }1 B和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-3-14 23:12 , Processed in 0.057004 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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