设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 ; I5 ?7 a- \7 ?
    % V5 Y+ r8 p; A5 ?
    为预防老年痴呆,时不时学点新东东玩一玩。& X5 U- d9 j2 V6 `  J
    Pytorch 下面的代码做最简单的一元线性回归:8 [! f3 z# F1 `, _- |2 u  l
    ----------------------------------------------2 Z: ~" ?& J( y: w
    import torch
    ( j5 e! l8 m5 Dimport numpy as np
    . G/ h% _9 U; D& g/ \import matplotlib.pyplot as plt
    2 q. R) }* c6 l$ y( oimport random- z* ]8 K6 y9 b" I- t- p% K+ c5 y. j
    ; H$ l" D3 \$ `
    x = torch.tensor(np.arange(1,100,1))$ R" h, x; H' ~/ Z" K( A4 l9 g
    y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15! f3 Z7 ^3 x6 `) T

    ' V# S6 v1 f) cw = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b
    2 i. q, q% C9 k+ U( T- Sb = torch.tensor(0.,requires_grad=True), E6 p3 A2 ?* S$ c5 Y

    ) n3 e7 Z1 }% _0 G0 u5 W$ ^* I! \epochs = 100
    - z2 M' X% V' e+ I
    $ a2 n& W; C$ f4 ]' k* ylosses = []
    & E" o3 b" f8 M; N- Z" M, D/ f' kfor i in range(epochs):! x, R& n. _9 r( P
      y_pred = (x*w+b)    # 预测
    1 T; L0 N- A8 |' e  y_pred.reshape(-1)
    3 g( m. j8 h5 \4 g
    5 A4 ~' Z8 T  T( y) A, d- z3 }% [  loss = torch.square(y_pred - y).mean()   #计算 loss
    ' R, o$ m% n/ G' Y- D( B7 C  losses.append(loss)5 h2 p5 l; F* a+ f% s1 [
      5 {% ~! G* E  F6 B5 U  D- K
      loss.backward() # autograd
    / F% ?% `: H4 \( T  with torch.no_grad():
    , P* @: R" C, w5 g    w  -= w.grad*0.0001   # 回归 w
    6 J8 ?- U9 y3 o8 d4 b9 k    b  -= b.grad*0.0001    # 回归 b
    0 h: T# X3 @8 n& R  s' }! x9 b2 A  w.grad.zero_()  * s" \, G% p# U: m  ^* y. w
      b.grad.zero_()
    ' c3 z7 k( O; n: a% I; m
    9 Q/ S; u( O+ h7 {7 u" o4 zprint(w.item(),b.item()) #结果& L  ]/ d9 z2 x% P$ Y

    8 [0 p8 u2 |5 w9 y" O# m- BOutput: 27.26387596130371  0.49745178222656250 u& X' E+ D0 r) O
    ----------------------------------------------
    . D- d5 ]0 e" S8 V6 U# h+ o& h最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。1 T* G0 a* G2 W) U/ K
    高手们帮看看是神马原因?
    0 H* z- |+ L8 {. c2 F

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑 5 ?+ i7 [; p; f  F

    1 Z8 {. F9 `! r' K没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?3 ^0 R& [) b- W1 X* O0 P8 p
    -------
    9 \; C7 k* C4 p: V: r" c不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。3 `- d3 W8 O# |1 H+ b
    -------
    ) A/ A7 V3 I- A8 U7 ]2 n; g算法诊断部分,建议把循环次数改为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:231 F3 ]+ R- S0 P7 a% _7 d7 f8 i! M
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?  S7 X# ?3 P6 B* [6 c
    -------$ P4 s5 V0 N" K: O( E
    不好意思, ...

    3 i9 l  V" V5 T# X& j7 U- w谢谢,算法应该没问题,就是最简单的线性回归。
    5 v- k  d+ |3 ^; q我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    5 Y+ Q2 I. n( u+ K7 h
    雷达 发表于 2023-2-14 21:52
    + z8 p3 y1 L) x' A* [% B谢谢,算法应该没问题,就是最简单的线性回归。
    0 v  l9 s# q" W! f2 A) z我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
    " Y' R5 F  h$ l" \8 _) `* D

    / a9 `5 M, m% S  b. x刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。# _$ y- R( `# L' s* _
    ) {7 p' {- Y( }+ Z
    或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑 3 _6 F+ S' y! C
    老福 发表于 2023-2-14 22:00* S4 B! n& t9 _" H! }- }# N6 b6 h
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    5 ^6 A* ?# n' c, ?1 q7 {# S6 _
    : f! X# e7 E9 S或者把b但的起点改为1试试。 ...

    7 k, p( W; b& e8 V) M2 T7 y: y; d' M: {' |
    你是对的。3 S. p. Y2 I6 [$ y  f- e) M- [8 e
    去掉了随机部分; i, H9 r( w, o: W
    #y = (x*27+15+random.randint(-2,3)).reshape(-1)! I" O0 x5 `, D, F
    y = (x*27+15).reshape(-1), w1 H/ P, @2 M

    & X9 G% ]! y/ Q, G循环次数加成10倍,就看到 b 收敛了& @6 Q4 T5 S* M
    w , b5 c0 O6 }! j3 @6 a* v9 P
    27.002620697021484 14.826167106628418
    0 L8 B8 h! n! s6 ]
    7 v2 L% t  l. I1 t6 |' E- s7 [和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-5-5 11:05 , Processed in 0.060251 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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