设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 : G3 a: [- S2 C( j' S

    7 P; x% i0 C( S, q$ ]为预防老年痴呆,时不时学点新东东玩一玩。
    ( P1 Q( |! P. d/ _Pytorch 下面的代码做最简单的一元线性回归:- Y$ z2 ?" |% o' E/ R& w4 x  ?. R# ]
    ----------------------------------------------" x% G( c, B+ ~6 l6 L1 l
    import torch
    7 a3 p. E# I: {4 v8 B4 d8 I5 himport numpy as np
    8 S/ g" o6 C4 y; L% Q* |import matplotlib.pyplot as plt3 {' d' b& }; t' K
    import random, a( f7 p; e$ I) _% Q

    ; ?, b4 Q9 N! R8 }x = torch.tensor(np.arange(1,100,1))
    $ t& K. d( e+ s, o) q4 Z6 f$ sy = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15
    5 f. q1 e4 j0 S1 h' C0 z5 G. G: j) N
    w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b
    & S+ W3 d, ^: x; P  Bb = torch.tensor(0.,requires_grad=True)
    % }" x! d0 _5 |# W3 i* Z4 O+ c
    ; H, ~- f2 s1 G! zepochs = 100
    # A, N) T- i2 ?( f( |) z# q/ A
    4 @% A3 W  J8 {. Y' }! dlosses = []
    ( m; x8 r7 i( @$ t2 k) ^  ufor i in range(epochs):# `' {' J! p/ X( c
      y_pred = (x*w+b)    # 预测  z- t* u6 ?; R
      y_pred.reshape(-1)
    , U! x  ]* J+ [7 U2 e. ]* {
    & Z$ b/ @& L" V5 S5 h" o! F) C  loss = torch.square(y_pred - y).mean()   #计算 loss
    # k4 r: D8 S) C8 {  losses.append(loss)
    " C/ f5 G, r# Z  
      T1 h! q) }, J% R/ Z3 L( Y  loss.backward() # autograd) l9 h# t2 `" b' K6 e, q% J
      with torch.no_grad():1 A( T' @, w7 y9 [8 n3 T9 o
        w  -= w.grad*0.0001   # 回归 w/ Y+ I- M) O3 r1 {- N9 a
        b  -= b.grad*0.0001    # 回归 b * }4 z: Z; q4 u$ q0 V3 y2 b
      w.grad.zero_()  
    : H9 C* }: T% b9 y* x9 I" t; q7 O  b.grad.zero_()' U6 R9 f3 A. w/ J6 j% T) d

    6 b$ f7 `; n! P! Mprint(w.item(),b.item()) #结果
      J  i, E0 j( Q% {" x$ ]0 j- G! r! X) {# a
    Output: 27.26387596130371  0.4974517822265625, P+ V" {( X( k  {
    ----------------------------------------------
    8 O& B. m( F) C6 d最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。
    - u3 ]& |6 F4 y$ E高手们帮看看是神马原因?
    : H' l* ~: D7 W

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑
    + e3 m" [' i& E" x! V9 Y" f" W5 w- I7 B1 \
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    # K& c5 {  r3 H3 Q& E-------
    ( ]3 r8 p" S9 T$ U" ?* w. n6 ~不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。
    8 h) O8 W5 W0 O, q: ^-------
    4 c+ A2 z$ f  Z1 X8 ?2 N; 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:23+ [% W, j/ K( X5 M
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?; {2 p/ H6 p0 ]0 d
    -------: c- p1 H% C( R; z4 n, v
    不好意思, ...
    % S- |4 Y2 {! g8 `2 F
    谢谢,算法应该没问题,就是最简单的线性回归。5 t* e" A& ^/ O0 z# S% d
    我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    & G5 j) m- q0 P: _8 v1 g& Q
    雷达 发表于 2023-2-14 21:52, I7 |5 W1 N3 s1 l8 x! E$ {  O% B8 F
    谢谢,算法应该没问题,就是最简单的线性回归。: a6 E; @+ X5 ], \, V' s* t
    我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
    + J( [5 `0 _  F$ p5 S/ T1 l, p

    9 G2 B  T6 w0 ?; j刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。. P  G" [& q7 O: A$ u+ W

    # x8 f+ H, C: Y4 ~/ n2 |/ R& H; p: T或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑 3 x( F7 P1 C6 Y3 y. D7 P- N2 l# J
    老福 发表于 2023-2-14 22:00! u7 z# m0 t8 Z" U
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。/ [( A% N% U, e1 _4 a
    ! z1 i" E& I% ^/ g6 E6 [! P
    或者把b但的起点改为1试试。 ...

    . r8 G8 F' t: v6 X) ^# L1 d8 ~/ b0 e4 |
    你是对的。7 k; O& a8 }, A
    去掉了随机部分
    6 n" H/ H3 r8 v: P  f3 }# i5 ?/ Q#y = (x*27+15+random.randint(-2,3)).reshape(-1)
    ! G0 W; U; g6 `0 S. q$ xy = (x*27+15).reshape(-1)1 h5 e, q9 X/ Y( t; a+ S' W
    ' f7 l* q! U: d; O+ I0 R
    循环次数加成10倍,就看到 b 收敛了
    6 x, @( k: v+ d. d- n9 Jw , b. n8 w9 ]6 M0 `3 A$ V/ i
    27.002620697021484 14.826167106628418% s8 g3 D3 D4 j8 m% c
    8 |# C6 U2 `; f1 {( Q3 D
    和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-4-2 21:45 , Processed in 0.055625 second(s), 17 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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