设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑
    - T! P: ?8 j: j# s4 q5 ~$ q! p! V% ~7 h
    为预防老年痴呆,时不时学点新东东玩一玩。/ ~- A1 ^1 {' ~7 g/ w# y
    Pytorch 下面的代码做最简单的一元线性回归:
    / c" E7 Z  K( K. k& S# d+ J  n----------------------------------------------
    7 c% k8 b7 F. Y) I7 Wimport torch
    9 X7 n) x2 H6 U; @" mimport numpy as np
    7 M, J' p: d% N' \; Limport matplotlib.pyplot as plt- e! ?6 i/ L5 z8 M2 W. ]3 }
    import random
    7 m6 S! _, F1 I: G; Q& o" u
    + |! O  y8 h- d' Cx = torch.tensor(np.arange(1,100,1))
    % F  U1 N5 q$ o0 ]# n6 ny = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=153 M2 R8 {$ b9 H* u; z: F( f

    7 K3 R9 E" X- ]0 m0 Q! ?w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b" F5 |5 Y: g8 ^
    b = torch.tensor(0.,requires_grad=True)
    # ~- u1 Q' r8 d& r) |* }3 N' E; `  o) a' Q; R8 T
    epochs = 1009 e+ w) h* C& k* j5 M* O
    , P- H  v$ J& @$ v/ N2 C
    losses = []- o/ Q, S& R" i+ b8 w& h! A
    for i in range(epochs):: H6 `9 N) V( x3 F, n5 g1 K
      y_pred = (x*w+b)    # 预测, }' ^+ f! g" w% g
      y_pred.reshape(-1)
    9 i$ Z+ h7 U7 T* Y# X
    " G' ]/ T7 u6 y, H5 P/ ]  loss = torch.square(y_pred - y).mean()   #计算 loss$ [" X( Q1 |: P( K; K/ |3 U9 u
      losses.append(loss)- e$ @4 t+ f' s. B8 a
      
    4 H; G4 j; `2 g1 T6 g  loss.backward() # autograd9 z& n7 ]' I* {0 ^; L2 ]5 c
      with torch.no_grad():
    - @3 q8 i5 @8 H5 S    w  -= w.grad*0.0001   # 回归 w' v3 S- c; V: A  k& W# `
        b  -= b.grad*0.0001    # 回归 b / T9 }' \8 S" J: P1 L% H0 R) s& `
      w.grad.zero_()  : ]8 y/ m; V/ @" F; ^1 ~' R
      b.grad.zero_()5 X& f5 E) {' r- Q, h5 }
    % x- G2 [! J! Z% x$ e5 Q
    print(w.item(),b.item()) #结果$ N$ Q% f$ s+ S% U+ G

    3 \! t- V/ z, }; W9 c( TOutput: 27.26387596130371  0.4974517822265625
    : ~) N$ ^9 V: u) v$ i+ F+ _----------------------------------------------2 ~+ i. @* d9 X# K
    最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。% O7 k! t# O( g9 m1 }
    高手们帮看看是神马原因?& q+ J- L; F+ b- o2 c  V- g

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑 1 t3 q9 t9 H' g% R$ j

    6 @) \: U: Y0 ^$ F8 g8 \6 [没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
      R3 c! x- y7 [$ O5 I$ i6 v  S-------
    1 r* T  r3 ?  K不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。& ^, ~4 }) i* M
    -------9 f/ b% B7 [3 _9 s1 Y
    算法诊断部分,建议把循环次数改为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
    3 K4 m! ?6 E+ B0 y2 h没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?" u$ F( |* ^7 Z; N! M" u
    -------
    + r3 s! G2 G8 w- M% n3 {不好意思, ...
    7 O4 I# o0 E- j4 B/ f# x. \  C
    谢谢,算法应该没问题,就是最简单的线性回归。
    + ~2 k! H5 T* e我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    ' J! B2 F- y. P( m, s( O
    雷达 发表于 2023-2-14 21:52
    6 U; h- Y0 B. H, l6 K# S" E2 ~2 B谢谢,算法应该没问题,就是最简单的线性回归。
    7 i. |4 O# s( e& y我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
      v# t" ]# v8 R# g* m. p

    + j) H. e* n: }刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。+ X) }5 n- L$ K, ~9 O% ?

      g. n3 M  p9 M# E3 n) m- i* Y- U$ d或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑   Y: O8 m+ R8 ~
    老福 发表于 2023-2-14 22:00
    * Q! l. G0 u" I2 P* N& r  p4 m9 _- m9 C刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。  c% d  A! G4 K

    ' \6 |% W4 r3 i- I+ G9 E& Q0 ]或者把b但的起点改为1试试。 ...
    ) v: X0 K2 L2 j4 {) W* M
    ! T2 c' ]5 I+ f& ~6 y; L; W
    你是对的。
    2 y" q1 ~  k0 x: P, A去掉了随机部分4 G$ s- K5 B8 A: Y
    #y = (x*27+15+random.randint(-2,3)).reshape(-1)
    9 a5 c+ f, r) U& p: g. Py = (x*27+15).reshape(-1)+ e) k: x" W7 e# `+ D* X
    % Z; \3 Y: K  Q$ j
    循环次数加成10倍,就看到 b 收敛了
    6 @& a6 D* v4 Z" z& A; Gw , b
    0 I" t3 F9 c2 g0 P4 g6 F1 g27.002620697021484 14.826167106628418
    / }. }( V6 |; O6 n8 |
    3 C% r9 j  P/ b# {和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-4-6 10:56 , Processed in 0.058372 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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