设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑
    9 F( W/ @' f9 L4 K4 r* G7 \2 @) J; D, c( j5 ^/ s
    为预防老年痴呆,时不时学点新东东玩一玩。! a% P; m0 ^0 c" x* z
    Pytorch 下面的代码做最简单的一元线性回归:
    5 Z. G3 R) H# r& a! g1 E1 R6 z: c----------------------------------------------4 _, |/ X# K8 u) H* ^' E7 J
    import torch& Q2 a: T- @, u3 n* F; Z( V+ w: p3 c' A
    import numpy as np
    : w( b- M1 ]; K" b/ himport matplotlib.pyplot as plt
    9 E8 N* Y4 Q) w) L  _3 N) Q# w- a8 ]! Zimport random
    * h2 g; b7 [- N6 X
    4 }% U8 }  n2 @6 c( Ex = torch.tensor(np.arange(1,100,1)); r5 S! Z$ B2 c1 `/ o. D
    y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15
    ) C% c4 n& y* H2 F
    6 i8 _( z9 \9 y1 `7 ], Aw = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b
    * x: R# s' _3 j% c5 e5 D* ab = torch.tensor(0.,requires_grad=True)
    9 F$ d+ p+ g; d9 u5 p0 b8 T" V6 h; o( p
    epochs = 100
    4 x" c9 |$ E  R7 q( p& G8 |0 n3 ?. R( p1 O8 R# W) _6 ?, W
    losses = []
    ; P3 {9 h6 z# C4 w9 B6 Efor i in range(epochs):+ ^( e; g5 Z( l! V3 p
      y_pred = (x*w+b)    # 预测- s& w1 b" B) G  R0 I% Z. L
      y_pred.reshape(-1)
    ' E0 Y! }& e) T0 i5 R
    6 f( u& t* D3 V  F  loss = torch.square(y_pred - y).mean()   #计算 loss
    4 L$ a+ Y2 z* _0 |) x5 ]* i  losses.append(loss), K& m, ]4 i1 l$ ]8 I0 r" n
      
    8 K# U; S/ Y) K+ b0 n: f/ r  loss.backward() # autograd! a* a, D# d* H- ^1 S
      with torch.no_grad():
    * h8 K- G, }2 C& C    w  -= w.grad*0.0001   # 回归 w
    & P/ _: Q( ^& E: \    b  -= b.grad*0.0001    # 回归 b ' N; J6 W2 T, ^' [6 ~; Z& @9 ]) h% x
      w.grad.zero_()  
    ( U( p; s! _# ?# i1 L  b.grad.zero_()
    ( T& E0 r* P  O* N' |' Q
    0 E; j6 d! b& y" j1 {  O  P- pprint(w.item(),b.item()) #结果$ [+ W$ F8 Q1 ~3 v1 U3 [( ~- s
    / T; w( M4 E2 j
    Output: 27.26387596130371  0.4974517822265625& w4 J7 ]/ m7 j. U7 c  s; I
    ----------------------------------------------% Y* i% R  s. n2 u: \
    最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。. X7 M1 h2 \$ u' Q, f, t8 A
    高手们帮看看是神马原因?: w, q; l5 b2 M+ T& O

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑 * C0 c' r: x* D! x2 W& e
    + f+ c8 N% A- O' }7 w# F' ]
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    ' }- A. I. _( k, F  u$ y# y-------
    ) l, Q% G! O% G9 r- V不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。
    , k8 E' w7 d+ C  l( x- D-------
    ( Z3 K0 M$ |0 Y# ]算法诊断部分,建议把循环次数改为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:233 ]& b0 G1 R+ _& x
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?$ G. _, K* Z# V* Q( {; n
    -------: K' q) P4 [' N. ~" i
    不好意思, ...

    $ F8 v1 b: _8 ~% `7 o谢谢,算法应该没问题,就是最简单的线性回归。$ ?/ Q! X) k9 e) X# v5 z# n1 l% _
    我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑 7 D; e. t8 V' c% E$ r
    雷达 发表于 2023-2-14 21:52& k; B/ k" O2 z! V: I# k. a
    谢谢,算法应该没问题,就是最简单的线性回归。7 n$ c) T5 T+ Y" Z
    我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
    & w2 S9 s7 A+ f7 d( I+ @
    1 A: C9 X3 M+ ^9 S: d7 l
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    - R( ^4 R+ W2 Y$ c! f9 U
    ' I8 z+ R6 s% Y: ?! x或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑 9 ^8 |/ M6 e, ^5 |" I( v5 ]# `
    老福 发表于 2023-2-14 22:00- F* n6 R& T" r* F) T1 b
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    $ a4 v7 I. h9 w; a" ]# s/ s4 k7 {
    4 h: _9 P& y8 H( C  p% N( G$ k或者把b但的起点改为1试试。 ...
    9 V# Y' U) _5 d# b' R; A7 N* }+ O$ o

    / i" a) P  {: O* l: b+ a你是对的。
    & D$ L( M0 ^( O- {' t) Y; Z去掉了随机部分$ r; N/ L! m2 i  `7 O" [! \* d1 d
    #y = (x*27+15+random.randint(-2,3)).reshape(-1)) D2 w  C, u' i& n9 Y- v# s
    y = (x*27+15).reshape(-1)" L* [7 }1 U0 S/ b6 K' K

    ) X+ v% S" r$ e' I8 b1 f循环次数加成10倍,就看到 b 收敛了
    & r+ [- s  I% }! Kw , b
    % B; O9 u7 P/ |6 G6 K7 W27.002620697021484 14.826167106628418
    ; B$ b) C0 [- D+ _7 k: |3 h$ ]0 e2 v2 v: r# D
    和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-4-10 01:54 , Processed in 0.062776 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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