设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 0 ^7 M: e8 x  Y% u0 M* Y

    4 q1 b3 \0 N% r1 w/ V3 c! d2 P为预防老年痴呆,时不时学点新东东玩一玩。8 Q6 j. D: g# V9 \' R1 j
    Pytorch 下面的代码做最简单的一元线性回归:
    5 a* I0 l* {4 a6 `----------------------------------------------
      q# K7 O4 \- ]% C" e- E" b) vimport torch
    1 j% y7 D) O* F9 b$ U9 j% Zimport numpy as np0 M# `  q5 V8 T, S6 ]& x
    import matplotlib.pyplot as plt
    % p$ A3 U8 T6 q% t. F9 wimport random5 w% Q  c1 q+ x/ m$ t" L$ r

    7 k8 F% |/ Q+ q( P4 Z4 e9 Z% |# Sx = torch.tensor(np.arange(1,100,1))
    3 h& Y$ t, K$ N# U. N9 my = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15
    : u5 w# b- o% @% u* p$ M; k. }0 ~: x. x0 @
    w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b
    $ c# l& ?* ^, t$ G" ^b = torch.tensor(0.,requires_grad=True)
    " r. m0 q# ?: y" R
    ) A4 h$ `6 {6 K' V- g. w& kepochs = 100# I( X) X  {5 e4 Y' ?) c* n% s2 W
    ' \# U' O0 ^3 K9 o
    losses = []" j0 |- D$ ~$ I7 b" k# J: y
    for i in range(epochs):
    ( u, d2 o+ ?) k) D  y_pred = (x*w+b)    # 预测
    7 ^. J4 m( c5 |& b  y_pred.reshape(-1), [3 d  j* ~% f' G7 h/ C
    : S2 k1 u% l* k+ e- d
      loss = torch.square(y_pred - y).mean()   #计算 loss
    5 J- s+ {6 ?! \4 M. m1 C7 E$ P  losses.append(loss)
    + ~; L5 u$ q2 K  ]# R2 Z  # T5 m" o! T, i& S1 V
      loss.backward() # autograd0 i+ R  ?5 Y! Q) m% M# F  O
      with torch.no_grad():+ A3 Z# C+ V$ b( U4 z2 ~
        w  -= w.grad*0.0001   # 回归 w8 J, m( q; k8 w5 N; l" G3 p# S4 ^
        b  -= b.grad*0.0001    # 回归 b
    / S5 [/ S, ~; x3 }$ J0 ?, ]4 U  w.grad.zero_()  
    2 u, E# J; {1 L  b.grad.zero_()
    9 [1 l' f% a7 ]. P8 M$ u+ P' `5 W9 x: j
    print(w.item(),b.item()) #结果1 l: ?# h6 L" m/ {; |# e0 \

    ! J$ Q* S2 t8 M4 r/ d% LOutput: 27.26387596130371  0.4974517822265625
    & z/ E# P( W* ~% I# I----------------------------------------------
    # I7 H: ^# v4 z( z$ u$ p/ M最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。" y- y6 q0 _* y) K0 T
    高手们帮看看是神马原因?
    - ~$ t, s- S3 w: m8 M6 `: @

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑 ! D  w7 L8 e: G

    + @+ ~. T  f+ |6 M没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    9 S1 d3 \. E3 M4 t# A-------
    9 b) O3 }+ P1 ~. g* O' D不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。- V* @6 R3 y) E' W! U
    -------
    % H1 f3 u4 k8 q/ ~4 K算法诊断部分,建议把循环次数改为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:238 |4 }& z  e' J9 s
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?3 k$ s+ l$ i, r; U1 _; ~: O! T( c
    -------& _3 j, S+ L6 I' g' \
    不好意思, ...
    ! H! C8 x/ [7 [
    谢谢,算法应该没问题,就是最简单的线性回归。! f7 ?3 |: k% t3 a
    我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    * T. N( ]1 H) Q/ N0 P
    雷达 发表于 2023-2-14 21:52
    8 U$ b6 [! b/ V# B, h谢谢,算法应该没问题,就是最简单的线性回归。
    / M2 @! N  r+ A" j- k* U3 q2 c# f我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
    0 Y6 X8 k) m8 J1 S/ F2 U/ W

    ) Z0 T% e" F  l9 Z刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    0 o0 a! w3 J1 u! R" G
      W" a& _) P& \  h6 U或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑
    6 u& L$ V# Z# o3 m2 K: L5 p
    老福 发表于 2023-2-14 22:00. l! R# y& T7 R7 m1 S
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    0 T: }  T$ {# D: H, w
    7 O; Q6 i0 h! `* R9 n' T或者把b但的起点改为1试试。 ...

    , Z- q$ Q4 Y: ?! T8 h
    ; {1 v8 U* Q* B- e* F  b# f/ [8 r- t你是对的。) D% c8 e9 b0 b3 s7 I
    去掉了随机部分
    8 T5 I- h1 C3 O3 s1 p" d$ Y  a. T#y = (x*27+15+random.randint(-2,3)).reshape(-1)
    9 b2 t$ x# Y" X* u- Fy = (x*27+15).reshape(-1)
    ; c: }2 c1 O5 M& @8 [9 {4 U1 q+ j/ b6 p- T5 O* w$ G. A
    循环次数加成10倍,就看到 b 收敛了4 k0 n4 @4 D9 U* i& z) I2 p1 r8 {( E
    w , b
    4 W" C  E- ]& f+ c; H; Q27.002620697021484 14.826167106628418
    ) R! o9 B0 V1 q/ j) f, l
    6 w( |- s: K% }% @4 D; X和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-8-19 02:29 , Processed in 0.065323 second(s), 19 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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