设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑
    0 ]/ A# {3 n$ p' p* A
    ! |( y, v: x: e为预防老年痴呆,时不时学点新东东玩一玩。. J. H* P) \; ^) ]3 G/ B
    Pytorch 下面的代码做最简单的一元线性回归:* p( @& l; D3 }9 w! @/ n
    ----------------------------------------------
    9 d( T3 D( o& Nimport torch- G9 e; A" r! j" ^' d4 r
    import numpy as np
    2 c( B+ C0 b8 R& t. b5 ^+ Timport matplotlib.pyplot as plt4 }/ }0 \  \. U2 C5 w0 C
    import random
    % a  h' j$ Q' l6 L+ X  \" w; W; w* P' O% q
    x = torch.tensor(np.arange(1,100,1))! u# m4 a& Y/ I& v
    y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=152 {2 N" V! b+ I8 ?3 v

    9 \( Y! B0 C  e0 J; Zw = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b
    + L3 V2 F- j0 W" xb = torch.tensor(0.,requires_grad=True); }2 t/ u) H6 Z' j8 `0 F
    7 K. W' n& |5 p7 a: b
    epochs = 100
    * y% [& L* A& L+ H7 @4 ?0 n, Q% L* d
    losses = []
    ! N6 |% K6 j4 i) X+ ~* e* P* wfor i in range(epochs):1 L( k/ R5 S+ B  j/ p
      y_pred = (x*w+b)    # 预测: h& f+ E* ^' P# W% x1 P! E  Y8 P
      y_pred.reshape(-1)
    - ~: v! I+ e4 X+ A. {
    # Z) s' I1 \/ M8 Q% F  loss = torch.square(y_pred - y).mean()   #计算 loss
    & ~) U4 P: D2 K* N" @# Z5 z( d1 |  losses.append(loss)+ n7 I2 }7 N1 H1 a( x# v
      
    8 M  d) H0 p' L& D, v, \: M0 }  loss.backward() # autograd
    2 Q( V* Z. T. r1 B' G  with torch.no_grad():* q3 s' g3 ^# i
        w  -= w.grad*0.0001   # 回归 w
      j, L5 f, h7 {/ `5 [& I9 Z' o    b  -= b.grad*0.0001    # 回归 b
    , a! V: `0 Z& G  w.grad.zero_()  
    5 u% S$ o; V. K' D9 X  b.grad.zero_()( @# L/ _# G) b2 H. F
    ( W6 x, x/ T( ^8 I
    print(w.item(),b.item()) #结果7 G- q: w/ A/ ?
    " D- K$ b0 M5 P& H- s; [" X8 P0 g
    Output: 27.26387596130371  0.4974517822265625
    # y2 b, O5 l5 t4 o  B8 q. m----------------------------------------------$ x3 ]- G9 d' I( ]! r- V6 L
    最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。
    % s5 q( ~  N7 p# Q: D高手们帮看看是神马原因?
    9 w( H; I: j, {( z" Y0 y) H* [

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑
    - Y3 w% a5 f4 E0 t' K" P6 Y2 t4 `* a. H8 t0 U
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    # K/ e( R. M) n' e-------8 c. t  V8 m* j% R
    不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。8 H* D8 A- u: R9 s( D0 t0 @
    -------; c. v5 C5 m. q! R) h3 ]
    算法诊断部分,建议把循环次数改为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:238 p. Y" @( t4 X' ?2 n9 Y
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?; z, ^: W4 E+ y: ?! O1 N. C- T
    -------# i6 h9 O! F/ E7 p' J
    不好意思, ...

    * c2 V% c! P) \+ S谢谢,算法应该没问题,就是最简单的线性回归。
    / Q  `% o5 N8 |! s# I! g我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    ) ?; Y0 F5 ^5 z
    雷达 发表于 2023-2-14 21:52
    / b1 J1 w3 D0 E2 J谢谢,算法应该没问题,就是最简单的线性回归。
    + ~, l$ e+ {6 D+ E+ z! y我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
    ' r2 m& v0 X( H( V8 M  o
    8 ^/ ^1 R. A, E# @- Z7 G
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。+ ]+ W9 y5 z4 ~# q8 t8 Z" b

    - E. |$ }# _5 H6 `5 s2 e0 ^( s2 ^0 ^, I或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑
    & n3 j; [5 [( H+ j0 Z2 J* m- u
    老福 发表于 2023-2-14 22:00$ [  O  D; \6 M) j$ F2 s  I
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。. `  X( [+ s6 |! V4 u* {6 T6 l
    5 K' P2 r) \, S2 `3 I# R% Q
    或者把b但的起点改为1试试。 ...

    9 c% G+ ]( s2 N/ x3 Z: o) A! l5 R+ C. p# [
    你是对的。+ y* I/ N9 W$ T- I+ @( d
    去掉了随机部分
    9 @, w( {! L1 @1 q: r' {# l#y = (x*27+15+random.randint(-2,3)).reshape(-1)/ R0 q: a6 q) Y  q6 r
    y = (x*27+15).reshape(-1)2 Z2 s! \( Q5 D% X' r8 _0 K( h

    8 ~2 z0 q7 H+ `/ k* W循环次数加成10倍,就看到 b 收敛了' R) ~) O' I! \" f/ L" h
    w , b6 C4 p! E- A4 _( |& o: w/ P* O
    27.002620697021484 14.826167106628418
    " e& Y1 U; u1 \3 c
    , E5 h* d. N8 N) |和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-7-22 05:57 , Processed in 0.064917 second(s), 22 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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