设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑
    9 M7 Q1 t% G% O. O' o+ W1 \+ I% n6 r
    为预防老年痴呆,时不时学点新东东玩一玩。
    7 p% p5 i5 A2 q5 R$ a5 R  qPytorch 下面的代码做最简单的一元线性回归:
    : k: c# E; L( W( [9 D----------------------------------------------; Q- Z; X/ Z0 r. L) d) I
    import torch
      ?4 M7 T& d2 V+ d" kimport numpy as np
    ) y: i' b6 }4 Timport matplotlib.pyplot as plt
    4 n) d0 l, o$ ?( p0 w% bimport random
    " J) z1 X8 H' h) ^+ y
    ' j$ X; }' x5 d7 _x = torch.tensor(np.arange(1,100,1))! _  e  w' G1 s/ l1 @/ V
    y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15
    - A5 _1 f/ F+ a" A4 g* ^
    . l. A7 E% w. H1 z" F/ `/ cw = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b  d# F8 q& u4 ~
    b = torch.tensor(0.,requires_grad=True)
    # _9 r6 ?$ ~2 U0 l3 ?) b
    # R) O% j; I0 B* V/ F' N2 G7 ^epochs = 100. W1 R4 B9 F! m' i/ |+ l

    3 i& o0 F( ^+ J3 P/ z' ~" [losses = []
    7 S! |, E  c) lfor i in range(epochs):
    9 X9 _8 q1 B( e1 i$ D3 n( e. I  y_pred = (x*w+b)    # 预测
    ; y: q9 n- }% V# }, p3 H* |  y_pred.reshape(-1)4 N+ w8 ?- n) O2 _9 z( }7 E
    1 i; @" q6 V* ]/ v) @% g$ E2 q' R
      loss = torch.square(y_pred - y).mean()   #计算 loss  ]" d# p8 V8 T0 @# f
      losses.append(loss)
    $ x! _+ D& ~8 D8 s8 z  
    8 K" ]( q0 ^+ K% w# [# h, [  loss.backward() # autograd7 y& g& y( l" a) E; J1 k
      with torch.no_grad():  D9 Q5 |# u7 f4 P1 H; `' {- s
        w  -= w.grad*0.0001   # 回归 w0 T/ A# y- I" T) h) o4 f( U1 C
        b  -= b.grad*0.0001    # 回归 b - {* Q4 X7 b& F
      w.grad.zero_()  
    % w) d# A5 A* e' w( |  b.grad.zero_()
    ) E$ G, Q6 S  ~1 |6 B4 K; L  b8 [- _5 ?! X
    print(w.item(),b.item()) #结果) x0 v) ?! ?- b! V" F; s

    7 z/ m! J- a& Q' ]) f  hOutput: 27.26387596130371  0.4974517822265625
      F( J3 j1 c: A& _9 f----------------------------------------------- }# Y3 V# k/ I
    最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。3 u9 }- L7 A3 u
    高手们帮看看是神马原因?
    - @5 T' i2 u* ?  e

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑
    # z# G$ B' |8 ~, a  X, b4 Z) B6 n5 }* Q. M2 A' Z$ Y
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?' {) k# X, @6 [% i
    -------- O5 Y5 Z# K0 Z4 n, d8 a  Y
    不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。+ V" n2 I, U6 r8 L" l, C: b7 l
    -------4 W! r3 ^$ B8 y6 `4 l* E
    算法诊断部分,建议把循环次数改为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:237 x; z% a. C. W8 m% Z
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    , B6 t0 j3 w4 |; j; q. D! P-------
    * [# C& |. s. T. K- j  j0 P不好意思, ...

    * ~# q, }0 }; S3 E* [5 N9 O谢谢,算法应该没问题,就是最简单的线性回归。
    ) r4 y8 d% j1 q我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑 ; S) m" q# J4 T+ ]9 [/ M5 M$ a
    雷达 发表于 2023-2-14 21:52
    3 }8 R- j% k2 D3 \3 a) R* I谢谢,算法应该没问题,就是最简单的线性回归。1 b. r0 }1 q" Y; A# S! u+ i/ t& s
    我特意没有用现成的工具,就是想从最基本的地方深入理解 ...

    2 t# b, c, E9 a' u; u$ d5 B
    0 k3 B% @0 C- |, ~0 }; A! X' h刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    5 {/ |2 L: v7 D! Z5 m  j5 r! P( z% w( [1 c
    或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑
    6 f0 P# r& p8 s
    老福 发表于 2023-2-14 22:00
    - h  X( z" x! T: \8 L刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    7 p, Y# I; h; y& W
    0 V8 w7 b0 _, V7 a' \# I: e1 d或者把b但的起点改为1试试。 ...
    5 Z& r9 ^3 u' K- [& g
    $ [, G- d3 U8 i0 I% I0 \) U( C
    你是对的。( ]& q4 ~) P; H' Z
    去掉了随机部分
    . S' N% p$ _% K, Z, ^#y = (x*27+15+random.randint(-2,3)).reshape(-1)/ P" C( Z/ S! q1 }: R( [* [
    y = (x*27+15).reshape(-1)
    1 \* X3 X  m+ j/ f+ ?
    4 J% Q- E2 O) b循环次数加成10倍,就看到 b 收敛了& `5 I7 ^; j' D& j6 [
    w , b
    / @: o, Q# y& y; M4 R5 L27.002620697021484 14.826167106628418+ r. F" z6 b+ ?5 W" q8 N

    $ [( O( U9 X! R$ B5 r- p和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-1-17 14:09 , Processed in 0.029607 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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