设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑
    ! Y  F+ p4 M3 H  N" F/ F0 u
    * H; Y4 A2 j) E/ b) _为预防老年痴呆,时不时学点新东东玩一玩。8 M3 c, w; R7 r/ c
    Pytorch 下面的代码做最简单的一元线性回归:. a+ D6 L& u% ]/ _0 ^& m* r
    ----------------------------------------------
    3 D8 t7 d$ y* ~" H( A) T  }: vimport torch* z& |6 K1 n  {
    import numpy as np
    8 ?) q* ~4 J/ himport matplotlib.pyplot as plt
    $ R/ B) h$ w: }4 P3 K+ h5 G7 g( Oimport random
    1 g( P' ?0 p  z4 z' l" v/ @# S
    6 J8 a1 t( }% x5 ?/ yx = torch.tensor(np.arange(1,100,1))  _9 A, p0 C1 K
    y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15% z: B, R. U/ Y2 Q, U

    ! z; _! |9 }, P% tw = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b
    % O& U2 M6 [' n8 K8 U7 i2 e, ab = torch.tensor(0.,requires_grad=True)
    2 M! x3 D% K4 F. k8 _. Q. N( P. ]5 e* x% ]9 j+ r
    epochs = 100
    4 P6 ^3 U1 W) r1 g' K3 g% o1 X% d$ ~! X% B5 A
    losses = []5 M- G7 ]: k+ p6 A- [8 F3 d% Q
    for i in range(epochs):
    % M* h7 `& j2 t+ n  y_pred = (x*w+b)    # 预测) t8 X; H+ a# l. Q8 R! [
      y_pred.reshape(-1)- j2 y. f4 Z( l/ @0 F+ C
    9 ~( e, d% s2 g1 X
      loss = torch.square(y_pred - y).mean()   #计算 loss
    ( o4 O, p' O/ j& V  losses.append(loss)
    0 Q0 _1 j* Z/ S/ A; @% t  
    ( o/ o% w* S' R* o1 _4 F2 v( U  loss.backward() # autograd
    $ ^0 V2 \/ m+ q7 K  with torch.no_grad():  r+ Z* F3 [7 Z9 {
        w  -= w.grad*0.0001   # 回归 w
    " f$ ~& _7 w" b! U* I' S    b  -= b.grad*0.0001    # 回归 b 0 Y2 p2 c; m6 {9 h7 O
      w.grad.zero_()  5 L- e; Z9 @4 v" k! e" z
      b.grad.zero_()( X9 k" o! [3 c7 a! G; M6 P
    ) Y8 C3 p( D0 A6 Y5 y1 }6 t# g
    print(w.item(),b.item()) #结果
    5 D" ?/ Q1 C+ t  t" S
    9 N6 N4 P1 Y" x. j$ }' l) Q; HOutput: 27.26387596130371  0.4974517822265625
    ! O, u8 K( }7 E$ G( W----------------------------------------------
    % I; {% w9 ]) F2 d$ c& y最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。
    / `) o0 Y. }# K高手们帮看看是神马原因?
    7 l6 f: y! U. b# `! S; a& r# A; X

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑
    0 e, i7 ]1 F; S+ L) O* y8 ?6 m" G, _8 V8 h9 G7 b6 W
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?* F: _7 P5 h0 u( X/ f& X
    -------
    7 q% k4 I) {/ Q) K" J; R8 M不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。
    * ?* F2 C+ F' l* @( X-------
    7 {4 p; |! T, x1 \* |算法诊断部分,建议把循环次数改为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:23/ E/ p- X& D3 D1 Z
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    ' W" I: s  l8 c) V$ y, |* g-------
    , [3 _! k# f/ t1 p1 j/ S不好意思, ...
    ) L3 a# v+ G* q6 M5 W5 U( r
    谢谢,算法应该没问题,就是最简单的线性回归。
    % a: D& I0 s" H5 L我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
      u2 P, S1 P( K" w8 `! U
    雷达 发表于 2023-2-14 21:52
    ) L! i+ o) n$ A, q; ?- G谢谢,算法应该没问题,就是最简单的线性回归。
    - K! ?0 O+ C1 m9 ~我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
    $ T& O# L: S( B- S
    % S) s& C. @! I, J
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    ( {( }/ r5 j, |0 \( l# b7 l3 K9 y. n3 a; J" x4 j; R
    或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑
    , M: h2 G8 r2 R% W) z
    老福 发表于 2023-2-14 22:00: R, F1 W/ h. J1 [
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    6 @! A4 T* n) \/ F3 j4 r1 S! L* k; B8 `5 [
    或者把b但的起点改为1试试。 ...

    ( E3 V  e, z. u2 l# Q6 Z+ I5 `; E% `: Z$ f' u8 B; [
    你是对的。0 K" P$ r% |+ ~! V# I+ R' w3 [
    去掉了随机部分
    ! k, ~6 }5 j; c#y = (x*27+15+random.randint(-2,3)).reshape(-1)
      q+ i  h5 P6 fy = (x*27+15).reshape(-1)
    % W1 L- s) k; P% J5 ]2 h& g$ ?) p2 a9 `4 k0 B
    循环次数加成10倍,就看到 b 收敛了. N. y( p. t" r0 K
    w , b5 G( O8 D8 ~1 \& S6 A! g/ X
    27.002620697021484 14.826167106628418
    4 B# U. P3 y! s/ @
    ( d0 C+ _8 y  [8 J' q; p# X和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-4-21 18:01 , Processed in 0.056138 second(s), 17 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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