设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑
    5 ?" {* I6 M1 V8 A  f( F7 Y, P1 F! p5 L
    为预防老年痴呆,时不时学点新东东玩一玩。: |# p3 \4 C8 |) Q2 S/ U3 t+ v
    Pytorch 下面的代码做最简单的一元线性回归:9 f, @* B. _% D6 o  V# k
    ----------------------------------------------
    8 Z, p2 c& N7 E- o* Z5 G) p1 |& Ximport torch& n  T; t, I+ V% q& y% M
    import numpy as np+ ?/ V) H6 P" w+ U5 [# o
    import matplotlib.pyplot as plt; z  f% D- U( P  m, m
    import random
    $ l! D2 G9 g# r8 K
    8 Y+ [5 Y  C$ C% px = torch.tensor(np.arange(1,100,1)). Z" S; A2 D( G) z
    y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=157 U4 `: v+ j  X' n

      O0 g) B6 D4 E% |7 Ow = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b3 U- [: e7 S0 z( H8 t
    b = torch.tensor(0.,requires_grad=True)
    : j# f* E5 J& B8 w( C, |! o( K; C! I. k1 N& ?+ T2 [8 E  [  {
    epochs = 100
    6 v+ E7 a# t; b
    9 e, t. A9 X( a- X, flosses = []# \4 h% {- n7 K2 u' P% r
    for i in range(epochs):
    3 c5 y9 g- c* X9 m2 [  @0 |+ [' e# {  y_pred = (x*w+b)    # 预测
    , z1 w2 q+ Y9 X2 L+ j  y_pred.reshape(-1)
    , \8 [4 `' |, }( n7 A' \4 _" X  W: B
    3 i' Y+ m* s& j- g4 A* y0 @  loss = torch.square(y_pred - y).mean()   #计算 loss
    9 @! y4 e+ G& h5 j9 E0 K; y  losses.append(loss)# h. [8 q3 \* O, v, [' |
      
    7 n. k9 |! W9 K3 |5 `4 Q0 B  loss.backward() # autograd2 Q6 J" _6 h9 V1 k3 }
      with torch.no_grad():
      I- Q! {4 B8 _; U% o: J    w  -= w.grad*0.0001   # 回归 w
    - N& S$ L# H' z+ X# R5 Y    b  -= b.grad*0.0001    # 回归 b
    6 }4 j. S9 T4 J: E* j  w.grad.zero_()  
    * D; C9 V5 t7 j. j& g2 U  b.grad.zero_()& ~8 Y8 L2 U% ~, G$ L- O4 o
    3 A5 d) I* D3 P
    print(w.item(),b.item()) #结果
    : F+ O+ n7 g& o/ I2 d/ Z) {8 [' p' n) e1 e
    Output: 27.26387596130371  0.4974517822265625! P& y& T3 K9 L; d. o- c( j
    ----------------------------------------------) C; G/ n+ h- F
    最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。9 f' i8 z0 N+ V: m8 m; a
    高手们帮看看是神马原因?
    % l& ]& d  N2 W0 x6 D2 Q

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑 2 x+ ?6 ?' z9 Z0 x
    0 T4 I7 E1 }" h
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    ( S7 i6 ^4 `& I: g+ l-------
    8 z; E5 t* e9 R8 z不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。
    2 R+ f% Y3 b$ ?0 r* t-------4 G. R5 Y% P+ a  U: W0 U7 }, u- m
    算法诊断部分,建议把循环次数改为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
    0 @4 C+ C9 Y7 ]. q! R9 w没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    7 t! ~+ R1 U. a9 ?4 N7 v2 j: d-------3 n3 @* M4 X  e: n2 z2 m9 E8 H
    不好意思, ...
    9 u1 ^, l( X/ M
    谢谢,算法应该没问题,就是最简单的线性回归。) i& t1 a# H, Z6 r
    我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑 + b2 V4 s  U5 \- |
    雷达 发表于 2023-2-14 21:528 K% M1 V: x5 U5 k+ j  P
    谢谢,算法应该没问题,就是最简单的线性回归。
    / ^& F$ @  l! R我特意没有用现成的工具,就是想从最基本的地方深入理解 ...

    # ~, L( |7 }, s9 x/ b! L6 u$ K! [* E- L  I$ m0 J" A* C
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    2 B1 E* s* n; S( o; q$ d" K0 ~! ^% f8 l* W$ I, t) p7 k) c, S/ h
    或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑 & B, {  A8 e; I/ F& T8 T
    老福 发表于 2023-2-14 22:00, G7 K1 `6 h$ A, J5 y+ }6 a* G
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    $ U( B) C3 E: m& o/ E! A% @4 T! q  E2 l; g! H6 r6 u
    或者把b但的起点改为1试试。 ...
    : Y+ v" `) N# L3 i7 y! N8 @
    1 L* |  G% D/ z( Z5 W" K1 d9 V
    你是对的。, b1 a' b3 I. ~
    去掉了随机部分4 M( A2 C) F9 {( b' w
    #y = (x*27+15+random.randint(-2,3)).reshape(-1)
    ) e. R7 R" J- }1 H" Y0 Qy = (x*27+15).reshape(-1)2 S- w9 K" H3 c5 s  S0 ~8 q+ F
    $ F/ e; p: _+ b. P' W
    循环次数加成10倍,就看到 b 收敛了2 e4 j/ q# O  z& `& j  E
    w , b
    : M  Y! W% j3 b% [27.002620697021484 14.826167106628418
    7 L# S' |1 J& l( K
      o) b, ]2 ]& T7 a0 {0 D, {8 e$ a6 m和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-9-3 00:59 , Processed in 0.057353 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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