设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 : C9 `- N) d0 z4 {: y' c& G

    ; Y: {( a% b/ Y/ k8 y为预防老年痴呆,时不时学点新东东玩一玩。* p$ S( m' R- O9 T) |$ I7 @
    Pytorch 下面的代码做最简单的一元线性回归:! D/ j! W1 y7 ^1 T1 }: k
    ----------------------------------------------
    & l4 I4 f% [5 e$ Uimport torch
    " ~: r+ w7 ]- U, r9 gimport numpy as np
    ( M: x8 V6 o( l3 E4 ?( y' L1 pimport matplotlib.pyplot as plt
    + Y& h! G4 ]. s0 s3 ?import random
    ; E1 k' N0 R' K) O; {3 E% D5 D: z& ]( Z
    ) V6 a% Z0 d1 i5 o/ @% g1 Jx = torch.tensor(np.arange(1,100,1))
    5 P; I; p: v% S& ~, S& `- Gy = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=152 a/ C) h, W" s& }) ]1 Y$ v3 W

    8 z+ B% c; l# X+ q3 r& ~4 D% a/ pw = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b: `2 }( P: w1 o, Q- C  I: W+ _, E
    b = torch.tensor(0.,requires_grad=True)
    ( c5 {" J1 i9 n9 H
    3 J3 D: k/ [: O4 u* g6 n+ Depochs = 100) O) g- ^9 i, m: ]7 K/ ~. j, y" p

    . k2 q/ M. ?, m  k2 `1 closses = []3 B6 S/ U- n; Y
    for i in range(epochs):+ m7 t! I1 I1 k. |  u9 x6 x
      y_pred = (x*w+b)    # 预测3 {/ @! `( U0 D! E7 m5 S$ X) U
      y_pred.reshape(-1)8 u. u* N7 Y2 x, E

    ( |. M8 b6 a1 k' ^% L# I  loss = torch.square(y_pred - y).mean()   #计算 loss1 |9 h  f2 O. N( ^
      losses.append(loss)
    $ J9 e! C( m- F" J  
    ; L% }7 C' y. r  loss.backward() # autograd. m$ P3 g( Y4 r0 P5 K+ M. }
      with torch.no_grad():
    - s% g! z/ V  M    w  -= w.grad*0.0001   # 回归 w7 C$ o+ o2 A* N3 I
        b  -= b.grad*0.0001    # 回归 b $ S; j3 W% y  g3 Y2 [3 |
      w.grad.zero_()  
    / M' _8 I; b' ?& V9 C8 z  b.grad.zero_()0 P9 [( p( ]; Y9 t( r% k; @; I
    & _( s. p2 l- y7 ~- F. s
    print(w.item(),b.item()) #结果2 X5 Y, O" I2 |, m* A

    6 z; X& o+ M( h; a& ~/ f+ b8 N" XOutput: 27.26387596130371  0.4974517822265625' c5 Y5 m- h! a. i
    ----------------------------------------------7 ^# \! k4 u/ L) R  B- X
    最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。; M& E* ^5 H" U5 G. c
    高手们帮看看是神马原因?
    3 m( E1 v; U% q+ x% ]* h: |4 ~

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑 # S' r+ I) w3 v3 K4 |0 @; i
    ( m% H/ C1 U' m" T) S9 a! p8 J$ q
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?* F0 k3 C) U3 O- x% i; m  w
    -------
    ' b$ M7 V* \: d% U& ?不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。: C3 x+ q3 U* a3 N( _$ H
    -------
    8 D* N1 O( j2 L! P( L. k; _( N算法诊断部分,建议把循环次数改为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
    1 s8 Q/ ~% }: d! R2 y+ e$ T! Q& B7 |没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?" i- P! `  y. ~# x3 I5 X/ p  T
    -------
    ; q: B8 K& f" U* d) C5 I4 V不好意思, ...
    5 i" m& d. E9 E4 ^
    谢谢,算法应该没问题,就是最简单的线性回归。
    # S9 t6 l8 _, U9 S4 w! M我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑   B8 {& L9 U7 E, @, z; h+ z% [
    雷达 发表于 2023-2-14 21:52
    ! W' `! P- P+ h: g+ y% A谢谢,算法应该没问题,就是最简单的线性回归。
    6 ]" Y8 L9 ^$ ?3 G0 a6 n4 B( b3 @我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
    5 h4 ?5 b' H, }5 P- C; Y

    3 M/ h( _$ Y3 [. U4 O2 t3 T刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。, a1 h, o' n7 r1 X8 {. b- ^

    ( y9 M, E) z& V& h3 g$ e" T或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑
    ( x* A4 x  o- q/ d/ T- a8 Y
    老福 发表于 2023-2-14 22:009 k" K$ H4 u6 ?. y' U- O
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    , {- m2 Q" j; w( i. i/ x! c' z4 U- L7 L2 e
    或者把b但的起点改为1试试。 ...
    0 u9 X1 d1 [/ q/ K3 z5 {: E

    ! e) B9 W4 `8 V) ?( ?你是对的。* J+ T/ k* ]' }3 {
    去掉了随机部分
    & b5 L) }# L% K  b& g9 S#y = (x*27+15+random.randint(-2,3)).reshape(-1)9 q0 n. ~' m' C  l
    y = (x*27+15).reshape(-1)
    . f9 Q; D# d+ b/ V% f' l( U
    9 K2 T( v1 e7 c循环次数加成10倍,就看到 b 收敛了
    3 F0 j" D+ x2 m" |w , b
    3 z' i/ b2 t9 R- q27.002620697021484 14.826167106628418
    ; k! Q8 `# |& j
    # o2 e% Y+ R6 m5 |. _9 ~% p  c5 s和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-5-19 05:55 , Processed in 0.060342 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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