设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 " b+ H# ]$ u( R) m, q
    ' y0 G/ }( O/ d
    为预防老年痴呆,时不时学点新东东玩一玩。
    - j5 E3 }' k$ H! [' ?; X6 dPytorch 下面的代码做最简单的一元线性回归:1 h$ L8 x/ {  k$ Y
    ----------------------------------------------% x% f4 [, }/ r
    import torch( Y: ?8 s1 W6 k1 z5 w
    import numpy as np4 s  M) |) Y/ I
    import matplotlib.pyplot as plt
    : Q3 v( u. q- Iimport random
    1 q5 E9 v; l0 d
    ' G/ i! n1 F3 G2 f* |x = torch.tensor(np.arange(1,100,1))
    % i: i: [" i. ?" x# My = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=153 k+ c* g* D# H/ w8 x

    & ^; C5 `7 X4 S, Tw = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b/ b6 U+ H7 m% C3 T; V
    b = torch.tensor(0.,requires_grad=True)+ L* x4 r- ]$ q2 T6 [) h) `
    7 y/ x$ [2 G4 [2 g' j
    epochs = 100# X; u2 N; Z( Z+ R

    - d. {/ Z# `5 Elosses = []
    $ u; A! x( {. h8 ~) y) G; jfor i in range(epochs):; U. k0 R. V' B3 r7 b6 I* p. E
      y_pred = (x*w+b)    # 预测
      v+ c( u2 a$ w6 N% [7 |  y_pred.reshape(-1)9 v: D( j3 z* i. |
    ( W/ C; F- y8 v/ s
      loss = torch.square(y_pred - y).mean()   #计算 loss: z: ?3 ^6 H& V8 z' W
      losses.append(loss)
    . M$ s, h. ?5 Y$ s+ C* u1 [  0 X- D- E$ h" N
      loss.backward() # autograd
    * G* n6 f% q& |- A2 t: K  with torch.no_grad():
    2 P6 J! ]2 A4 H3 l( l2 v5 J% n% Y    w  -= w.grad*0.0001   # 回归 w
    ! ]4 V6 y$ \1 c8 Y, A: Z  b    b  -= b.grad*0.0001    # 回归 b
    7 y9 n; ^# u3 [  c6 z  w.grad.zero_()  
    - Q( G* D8 ~! q1 q  b.grad.zero_()2 v2 K) S$ }4 R5 X
    8 U- u) n+ k8 K# T, I$ D3 x7 j
    print(w.item(),b.item()) #结果/ M% P2 R8 G5 o2 \, c
    9 y% K. l8 l$ }5 ]* u- ~
    Output: 27.26387596130371  0.4974517822265625
    - Q/ e5 q$ F2 v----------------------------------------------) x, z; V8 h( m. j2 z, h
    最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。
    - z$ F4 X6 I0 ^/ K  A) E高手们帮看看是神马原因?
    & `9 d2 Y+ y+ X$ Z; z

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑
    . k. e. C% m: x1 \7 {2 a1 @
    ; P5 @/ p" S, S! G没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?- C  ^. H( U, f2 T; T/ c' ]( p
    -------
    & p& [4 \# j" n9 X. [) k" U1 J不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。) A6 ~; Y/ g  U) s; C  i
    -------( m7 _. `% L. u8 Q! P9 [5 J
    算法诊断部分,建议把循环次数改为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 I( ~; ?7 @5 T
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?  ?) k9 `- v+ Q
    -------
    % e, d: [2 a! c# H' D+ C不好意思, ...
    " M5 z  I" f: T" L6 v
    谢谢,算法应该没问题,就是最简单的线性回归。
    ! D& a8 {  E" T) p我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    ' ~- [5 S6 y" e
    雷达 发表于 2023-2-14 21:52
    , o8 p# g4 x( p% c5 [谢谢,算法应该没问题,就是最简单的线性回归。
    , G2 L; V4 W6 x2 ?我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
    - V" X. _/ k' N( S8 ^
    4 S7 |0 P0 Q1 n( Z* |
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。* r+ G  d4 q# D
    1 W6 J! Y7 L( b7 w: v
    或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑
      z3 O- c( B4 H" ^. n1 Z
    老福 发表于 2023-2-14 22:00
    ( c1 [+ x: |% \刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    . T  F9 o% r, b- ]' w9 u
    ) H" {! q( |6 w0 Q! O; A或者把b但的起点改为1试试。 ...
    0 J4 g+ u( K% t- z# g; K
      {8 ^$ S2 x# P
    你是对的。8 u6 c& {9 g0 a6 w; j" w
    去掉了随机部分
    # q% P9 y6 Z* g& L$ X! _& U#y = (x*27+15+random.randint(-2,3)).reshape(-1)
      p2 p# X8 \8 M# w2 ^( ]y = (x*27+15).reshape(-1)
    8 w0 w3 l8 |' }* ~/ U
    7 n* Y6 k9 r: S循环次数加成10倍,就看到 b 收敛了  L# \5 U/ [" o1 H6 C% n
    w , b' n/ a0 v5 }4 p# d1 x1 I
    27.002620697021484 14.826167106628418
    9 |: g* U" {6 M8 T# @
    ! t  ^, F! H' H; R" u和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2025-12-24 20:54 , Processed in 0.027497 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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