设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 ; \; S8 j0 g9 V) Z- V  z% u

    ( W# K/ \9 I" i为预防老年痴呆,时不时学点新东东玩一玩。2 S" D- o7 t$ T' G& W1 d& e4 {
    Pytorch 下面的代码做最简单的一元线性回归:0 s& `3 b; D- u2 e
    ----------------------------------------------
    & E; e- [) v$ y. i7 N/ k3 f4 timport torch
    ; J4 ]% a0 q* r) f% fimport numpy as np6 a- D5 v8 `4 G1 t
    import matplotlib.pyplot as plt
    # t0 b% c: F: `import random
    . @' Y3 @" t5 ~" E4 H4 \: S
    7 u3 f/ H. L/ s, Xx = torch.tensor(np.arange(1,100,1))- s) i- ^% D8 u
    y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15
    ( t7 w8 g1 `! W* x0 M2 \: k3 a, t! ~! q
    w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b; }- t7 }7 S/ F: V3 Q
    b = torch.tensor(0.,requires_grad=True)5 l: }+ T( h( y/ u

    ! O0 k3 X9 U4 g- l8 aepochs = 100
    $ g5 n8 K0 O2 F7 [0 [  K0 w4 c0 I" [) H+ T
    losses = []
    ) b1 m* o% c# |for i in range(epochs):
    " w( {" b! t  x: C4 e  y_pred = (x*w+b)    # 预测
    ! O6 V$ i: \% Y7 j1 e6 p  y_pred.reshape(-1)
    4 t$ `2 w* Q' w+ ?8 A3 n& L  _- N0 E/ \
    4 K2 U  p$ m: |" }- J4 A8 B* G  loss = torch.square(y_pred - y).mean()   #计算 loss
    , h  A4 }. O2 c; e! V4 X  losses.append(loss)4 j0 s, t3 B/ Q  I7 M
      . Z* y% S- g( p! R' l5 f( [
      loss.backward() # autograd
    / ?% G# Q" L8 _9 h, D6 E  with torch.no_grad():
    & w/ b  M* D% K; x+ B' m, N    w  -= w.grad*0.0001   # 回归 w* m3 W( |- `  Z" p  E: w
        b  -= b.grad*0.0001    # 回归 b
    - C& L' y( H- L0 ]5 C! f0 A  w.grad.zero_()  
    7 Y; d5 w6 \* V6 w9 b9 H, L  b.grad.zero_()/ L# [; e5 I5 ]! _
    : i) S' Z& E0 H% s" V% P
    print(w.item(),b.item()) #结果" y& C- s! n8 R& C

    ' s( f4 y' W8 R5 ~Output: 27.26387596130371  0.4974517822265625, d5 y! V, ^/ e+ v6 [- r
    ----------------------------------------------+ s! G2 f( A7 b. h: @7 f) y3 v% J
    最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。
    - E$ P) {, j8 P) @& x高手们帮看看是神马原因?
    " J9 j; B9 K5 [

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑 - r) O& S% I( g: P% G& D: S

    4 D/ C0 m$ t: ^' a没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    1 D9 q( Z# P/ m. u$ g-------
    ( P' K- _1 L4 Q, A) `; A4 }3 \不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。
    ! O! p8 |# Z3 k$ w% d3 Q: C2 V-------
    ( Q' g) m$ O, z* @! A) F算法诊断部分,建议把循环次数改为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:234 b6 P# }2 ^2 ~$ H2 k" T
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    - F) S+ s3 q% r- X-------
    $ ~/ Y+ X6 w+ D1 K+ A$ I# D不好意思, ...
    , F! l$ q, V( j8 T! O
    谢谢,算法应该没问题,就是最简单的线性回归。
    6 v: r+ T' K" ^9 F我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑 + i7 C, r: x1 u/ A( |" ]
    雷达 发表于 2023-2-14 21:523 Y( B2 G; R. g  i: G$ g8 ?6 V. q3 g
    谢谢,算法应该没问题,就是最简单的线性回归。# c5 j& i( ?4 f8 [
    我特意没有用现成的工具,就是想从最基本的地方深入理解 ...

    $ `$ z$ ^" @. O! w4 M& |) h0 n
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。+ l9 N9 U9 _# A5 o. X

    # \& u& v$ O6 M或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑 ( V0 X5 @& }: D" p
    老福 发表于 2023-2-14 22:00
    # n, C9 N  g' Z% |& u- h刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    ( T% W# h# Z. T, \
      N7 m. g' E; D$ v& X' r6 O, |/ \或者把b但的起点改为1试试。 ...
    + u/ I# f4 u/ M6 C! Q4 @, l* }: N
    ! }0 l3 X- ^+ E0 H
    你是对的。
    ' b& E% g, l& F* E) G6 ~! {- Y去掉了随机部分- f7 u5 h0 P. N' f  E6 E) \
    #y = (x*27+15+random.randint(-2,3)).reshape(-1)- [6 H3 @# s. Q* T. M
    y = (x*27+15).reshape(-1)
    - u% y8 \' ~9 j# `' n$ W. j6 Z0 G
    循环次数加成10倍,就看到 b 收敛了
    . J3 h1 f0 N( G  u4 J0 P2 z) p( iw , b/ k! z/ a& \0 I6 e' x# a- I
    27.002620697021484 14.826167106628418
    1 O" v* Z/ p! P
    * f6 f5 k; t; T和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-6-27 17:40 , Processed in 0.058883 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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