设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 - I( j( q0 B) u3 Q" A

    ) P) J4 n8 l0 J% ?- o4 m' c为预防老年痴呆,时不时学点新东东玩一玩。
    $ W6 A. ?' D" t. ~# u9 B3 pPytorch 下面的代码做最简单的一元线性回归:
    ; n' ]! m1 U' ?----------------------------------------------) ^3 G9 z. a% K% U! U# V; @2 u
    import torch
    & F2 K& H% S  }6 qimport numpy as np& R/ e) u- U0 d% [4 }3 X
    import matplotlib.pyplot as plt
    / N9 k' ^. c$ t1 W0 K$ Ximport random; d$ x- @& G6 W, ]/ F. c
    , e0 d4 Y8 J# Q9 H8 k& t9 Z
    x = torch.tensor(np.arange(1,100,1))6 N/ i6 q7 c% @( q; o5 o
    y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15
    0 c( s! W2 W$ e. r2 U; n) J# j4 Q/ K) H' [0 R$ D: ?% Y0 ~+ Q
    w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b
    $ u9 ~* I3 ?1 M+ V$ W+ F. r# Db = torch.tensor(0.,requires_grad=True)
    9 I' q/ G7 Z) F( `- j: P& I' L  H: {$ w& W: y4 K) m( e. U
    epochs = 100# E- i7 b- z# Z- S% y
    0 B4 [9 o. v) f# q4 \, l7 F
    losses = []
    ( t) T, A  `9 e. M% l4 o, ffor i in range(epochs):. @9 B3 p+ }( f* o2 Z: J
      y_pred = (x*w+b)    # 预测3 Z. b0 B& |) D. F
      y_pred.reshape(-1)
    . J* [' t$ j8 J
    # K! t) O: U9 i" U/ V( u: c6 z  loss = torch.square(y_pred - y).mean()   #计算 loss8 }, N4 ], y5 ]/ ~. o2 \" @
      losses.append(loss)
    / X+ i. N5 N4 y  
    1 u$ q2 g3 s/ I8 J' D3 l2 f: C  loss.backward() # autograd
    $ p; F3 k  C* o0 f% }) m' i1 o  with torch.no_grad():
    ) [$ h- v1 E9 Y. g& [& d' M    w  -= w.grad*0.0001   # 回归 w
    ; Y9 ^9 |5 S( y3 m% A8 z3 N    b  -= b.grad*0.0001    # 回归 b
    ' {) E6 l% C& u  \' u  w.grad.zero_()  
    9 \% Y' `7 j* x: z! Z  b.grad.zero_()" F) F$ Z0 y9 {! w" J# ~

    ! M# W% M3 M. ~: p' H8 u/ ]print(w.item(),b.item()) #结果7 p# L) Q) G9 H, p7 C
    " B  v( g( N$ ~& C: o, T5 W: f
    Output: 27.26387596130371  0.4974517822265625
    # [3 L# \+ Z9 m% U! c2 ~8 J----------------------------------------------# Q. U$ M( m- |" x  L7 ~3 J
    最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。
    % T6 V1 Z  U$ ~, P* _1 T% X高手们帮看看是神马原因?
    1 F  G# @4 p( B

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑 8 b: k/ j* X' x( }0 t. u" `
    . l+ l$ a* e" R3 A6 T2 R& |
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?. s8 z+ d. H/ _
    -------# b  w) |: h+ B6 \& \$ A
    不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。
    - e0 N4 y# p  Y-------
    ) g8 ~- F) i; D& 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
    ! l9 {! N) ]9 D1 t5 s没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?  \+ i- y! p& x( ]6 M. d. Y
    -------
    8 L9 k7 ?9 z' @不好意思, ...
    5 t1 U1 H* s! d! U! C' N: Z" o
    谢谢,算法应该没问题,就是最简单的线性回归。  X. x1 B- ]8 ^7 H9 ?7 V
    我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    , D3 g$ q( B8 n  T' Q$ R! d7 @
    雷达 发表于 2023-2-14 21:52
    " S" b! {) W/ o' Z% a  w0 ]谢谢,算法应该没问题,就是最简单的线性回归。
    ' ?( p+ L$ c9 a# C. k  y我特意没有用现成的工具,就是想从最基本的地方深入理解 ...

    ' [! I3 k. n- u" b* K; V. b8 D) H4 l
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。6 e3 m4 `& @1 X" P; x* h
    0 U  c! F4 V* F7 \# y
    或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑
    % Y$ A( Y: E" v; K4 Q$ ]: x
    老福 发表于 2023-2-14 22:00* p: ]1 N% [+ L
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    2 f% v$ ^; u% o" b1 ^
    9 a% W& s( k* Q或者把b但的起点改为1试试。 ...

    6 m$ k, I6 E& U" x# d
    # N" U( U$ q  ^' l! l1 h你是对的。
    6 A$ U; |6 `5 d" p7 g# u2 W9 ]去掉了随机部分
    4 M  c. p! N/ G4 g- ]  T#y = (x*27+15+random.randint(-2,3)).reshape(-1)
    6 _7 h- o4 b7 Y+ Xy = (x*27+15).reshape(-1)
    ' ~# ~0 X. Q" Y5 N+ n3 Z
    * H- d" G( @: r# B) n$ {- A循环次数加成10倍,就看到 b 收敛了
      Y" Y/ l* R. q4 N+ lw , b
    / g- w# f, x5 V9 Z) u0 Z- L, B27.002620697021484 14.8261671066284187 Q& l# G4 j& {6 E1 F# [
    # p7 l& h8 N3 V/ C* b
    和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-7-30 02:25 , Processed in 0.058109 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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