设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 5 y# H$ j% j3 t

    " x6 W% @& J% e( W* {% J7 b3 @* A, ~为预防老年痴呆,时不时学点新东东玩一玩。
    6 ^6 ?0 i: L+ m' t! W( O$ }, VPytorch 下面的代码做最简单的一元线性回归:) [/ Q1 P( h/ s' G' d
    ----------------------------------------------. D+ d8 u! C% r; G2 q- a
    import torch
    6 W1 ^2 m4 C$ ~5 h* |import numpy as np
    6 s( J& V1 i+ W$ l# I0 g  g3 zimport matplotlib.pyplot as plt( z) j1 k6 H# P: z
    import random' |) C. o2 @. j9 h1 I# F9 r
    " g& ^/ W, |: m* N# Y
    x = torch.tensor(np.arange(1,100,1))
    + N$ h- w' |% h" }: o$ ?: h, n5 O0 Ty = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15, m$ x* w$ G, K# T( s8 W2 c

    & D" X  |* [! P  X4 R6 }; r, f% ?" Kw = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b
    7 D9 l: k: T9 @b = torch.tensor(0.,requires_grad=True), p/ C; _& H5 \# S  H6 I3 `

    3 t, J5 ^& M0 I* ]2 Z5 Repochs = 1006 b, q9 o- f4 k& }- m6 J  n
    6 A; z) o9 {5 t& @  p+ Q- E. a
    losses = []4 N" j9 N# E* z
    for i in range(epochs):9 e+ B; ~/ P6 {7 V4 {# W
      y_pred = (x*w+b)    # 预测
    ) e! D& t. l6 P& c  y_pred.reshape(-1)% Z* e0 H( W$ O8 g; V" s1 X

    % H6 z6 g( v3 d( s) u  V  loss = torch.square(y_pred - y).mean()   #计算 loss
    3 c- {0 W8 w" e' I3 k: I  losses.append(loss)
    5 }) h" ~  H; t  P0 G  
    % V9 h1 y; D( j& [3 Z7 e) R! E  loss.backward() # autograd
    4 M1 O  D* N+ \, r6 m& J  with torch.no_grad():
    $ A, l* @# I6 ]  c* B    w  -= w.grad*0.0001   # 回归 w! P' V# U0 L! t7 K1 A  C1 @* g( f$ m8 H
        b  -= b.grad*0.0001    # 回归 b 0 ]! f( u! B0 a4 }
      w.grad.zero_()  * K/ H& Z' J$ G2 r- x( e6 l& {" Q6 U
      b.grad.zero_()
    2 L% b$ j$ T1 ^* N, g
    ) L, D# h, f, p/ k1 |3 w# ^) r7 ]; _print(w.item(),b.item()) #结果/ m6 Q- C) `1 E

    % C: ]/ ^. q* cOutput: 27.26387596130371  0.4974517822265625
    . `. g! I7 n4 J$ {" o. W----------------------------------------------
    " W5 g  F2 f5 v" ?$ B0 [3 m% ~; n) {. W% P最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。
    7 g6 T0 z! \) ]1 r# [6 m高手们帮看看是神马原因?' |- y$ H9 @; j$ o

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑 0 Y+ I2 X$ n( B  m

    1 q4 R. W9 k+ C' K; y没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    + b" l7 f) A7 O7 `* y: r. b-------7 l- m4 Z9 B4 [, @6 H
    不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。
    $ g6 M7 M1 h# e" W: [8 {7 f-------" h. W! x# m' E& 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:23% `7 p9 f" P; \: `! i  X. I! X, R; B
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    7 L, z; L& [, l5 a-------- B; }1 D9 ]3 d. [$ ~
    不好意思, ...
    / y( x6 S) B. ~9 {
    谢谢,算法应该没问题,就是最简单的线性回归。
      z6 P+ `* H3 I& `+ N; j) y6 d3 \我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    $ {! n# n# W  J0 E0 }) f
    雷达 发表于 2023-2-14 21:52
    7 v% A/ }" b+ s2 _谢谢,算法应该没问题,就是最简单的线性回归。+ \* v# S! Y: K/ F1 L, N, D" K% a7 _1 ]8 q
    我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
    , H( E" [5 Y0 t$ P8 Y' D$ ~
    # H9 Q$ D( \; u# p7 v8 a
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。- t# b. I, g3 e) _' o! s
    9 }6 a! ?  }/ H
    或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑 : e4 t9 ~: ~6 m
    老福 发表于 2023-2-14 22:00
    ) i9 _0 a4 U- _' l! v7 Z刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    9 s! C0 H5 m* @& P1 {: k. O8 u. P1 `% n+ ?0 o
    或者把b但的起点改为1试试。 ...
    * r1 P* H1 w2 c( h

    5 ?2 o- Z5 Q! J: `2 l5 @# v7 H你是对的。
      }0 C6 s2 K0 m去掉了随机部分. @3 |# f& F) u# p) X! f4 L
    #y = (x*27+15+random.randint(-2,3)).reshape(-1)7 J0 O! @, F* N& h) P- q
    y = (x*27+15).reshape(-1)1 w& `  r8 k7 h+ Y0 Z
    4 n% v, q6 M  v" z/ Y$ P% E
    循环次数加成10倍,就看到 b 收敛了9 O& _! g  ?- j6 S* z% b7 Z6 w9 N8 R
    w , b
    . B* g8 ^0 _7 ^7 @1 a( r27.002620697021484 14.826167106628418$ K, w- @9 L; |  t7 c  ^

    - h7 c# O+ f; q) c和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-5-12 06:52 , Processed in 0.065655 second(s), 22 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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