设为首页收藏本站

爱吱声

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

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

[复制链接]
  • TA的每日心情
    擦汗
    2024-12-25 23:22
  • 签到天数: 1182 天

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑
    7 u$ [, M9 V! D9 b7 ?3 u5 y, q
    2 f. s! n- _/ H% L, e8 ~, q为预防老年痴呆,时不时学点新东东玩一玩。* W8 J9 S9 N5 C; P" `0 ~
    Pytorch 下面的代码做最简单的一元线性回归:
    # h* A% d) [9 k- [5 ]$ [" X6 M----------------------------------------------
    % l7 g' E0 ^, }; y% Oimport torch
    0 K5 B6 z( S1 C; a: o% }0 Mimport numpy as np
    ; e2 R" _- G) `: _) r- uimport matplotlib.pyplot as plt
    % t6 Y; }2 [/ E* D0 Zimport random
    3 `4 L6 d% N0 @! ], Q+ e# W1 F: R. ^4 z, a3 {
    x = torch.tensor(np.arange(1,100,1))
    ! g0 m$ S# l6 K: j" hy = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15
    ! t3 T: Y/ Y5 Q; _  @0 b9 ~( ~( f- V, ^- f9 M. x( R
    w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b
    ; @( l1 [6 I0 Pb = torch.tensor(0.,requires_grad=True)) c4 `/ D* d" |9 e7 f8 i8 L
    , Z3 M1 o. Y& w7 B+ n& {% e2 @+ ~
    epochs = 100
    2 l- I  e# P# _2 V* n- M
    9 X( s7 S; ^5 A6 mlosses = []+ e& h' E) d1 a
    for i in range(epochs):
    ( T: a  `9 Q: B! g6 U4 }  y_pred = (x*w+b)    # 预测/ x2 K  l/ U- E4 H+ E% F+ q1 j
      y_pred.reshape(-1)! V. U# Q2 m: P) K8 l

    # k6 E+ z- y6 C, s! I2 o( N  loss = torch.square(y_pred - y).mean()   #计算 loss
    * E3 h1 A& I; r# K/ {) D0 c0 o  losses.append(loss)
    9 G2 J" m. Q( ?0 V. l  # O# ~0 b( `" |+ S% o# ^6 K8 l$ U# v. t
      loss.backward() # autograd7 m" S7 x- v: s1 W) S* g1 s4 k" h
      with torch.no_grad():
    + O7 S# h( o9 h- @$ {& {- H    w  -= w.grad*0.0001   # 回归 w
    ' s8 m7 y, g, q3 F9 e6 A9 r    b  -= b.grad*0.0001    # 回归 b ; G5 t6 u9 k/ J. ]3 j9 k. o
      w.grad.zero_()    y- K6 k; x: j  x2 D- z
      b.grad.zero_()
    4 b) _8 S! ~2 l. M1 X
    " x, o7 i- K6 z4 R0 R9 Z8 c) {6 Sprint(w.item(),b.item()) #结果/ @2 ~. M+ ~% [

    + x2 n! C1 V# W% e/ ROutput: 27.26387596130371  0.49745178222656258 ]  ^/ ?+ c4 [: U& Q6 [  A! q1 s
    ----------------------------------------------
    * n3 }6 z6 J! M0 v8 S3 K2 @9 z最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。  g$ |, v0 L( S8 ^
    高手们帮看看是神马原因?
    5 w" e1 y) b7 \2 r4 S" v) [# v

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑
    ; o$ B; Z: \" U- a8 Q' U# S. K% ^$ A
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    4 A. w1 ^/ R5 [& r' x, g; L-------
    & Y% P) y0 Q3 |- t不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。2 _) [5 t. O2 _) y7 b2 x
    -------8 N- m2 P' F& _0 K
    算法诊断部分,建议把循环次数改为1000, 再看看loss是不是收敛。有点怀疑你循环次数不够,因为你起点是0, 步长很小。只是直观建议。

    评分

    参与人数 1爱元 +10 收起 理由
    雷达 + 10 谢谢建议

    查看全部评分

    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2024-12-25 23:22
  • 签到天数: 1182 天

    [LV.10]大乘

    板凳
     楼主| 发表于 2023-2-14 21:52:57 | 只看该作者
    老福 发表于 2023-2-14 19:23
    0 h! p1 ]5 @: U, g7 K# }" \: `没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    1 C: O$ O1 s, P! ^8 W! f-------
    6 P2 P+ D! K8 m3 F9 ?$ r, r; g不好意思, ...

    / s& O: [" F; {6 \1 n谢谢,算法应该没问题,就是最简单的线性回归。. \* o# p% [7 w) O1 q) |0 x0 ?
    我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑 1 Q; z! L$ f, H1 g
    雷达 发表于 2023-2-14 21:52
      x4 i3 W! U' f谢谢,算法应该没问题,就是最简单的线性回归。9 W# B, x3 A) b& j; C. t
    我特意没有用现成的工具,就是想从最基本的地方深入理解 ...

    : Q3 i, H" O  G$ c: I0 r5 Q, \. ]7 [( J/ G, Q  x# R# ~( \* n( e
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    ) L# _3 {. T: w# p5 |: f8 M5 G" u1 m9 z, P% y! T
    或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2024-12-25 23:22
  • 签到天数: 1182 天

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑
    ! ]- K1 k, S, t! @+ P6 j# l
    老福 发表于 2023-2-14 22:00/ b2 [0 Y% v! X& D) C  U
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    ( A! j& z( M& W( P, ]
    8 Z) z6 v  g& R6 p或者把b但的起点改为1试试。 ...

    , u# p, N% b8 B  R7 a- [4 w$ T9 h) l( |, }, w
    你是对的。
    4 q) U- f% s( }' G* b去掉了随机部分$ e+ r. `' E7 g* q) u1 a: n$ J
    #y = (x*27+15+random.randint(-2,3)).reshape(-1)
    + E% N" c' X  X6 M2 e) o' `' Gy = (x*27+15).reshape(-1)6 g3 \9 e$ b+ Q' J9 m+ K" N+ t

    % I6 u; m4 h$ Q% F, m2 D3 r循环次数加成10倍,就看到 b 收敛了
    5 l, T7 O8 s: u6 Hw , b
    1 i# H8 ?) J: A( F7 P, R27.002620697021484 14.826167106628418
    9 }+ h# ^' n0 O7 a/ p7 e; O* ]
    和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2025-7-6 08:51 , Processed in 0.049516 second(s), 22 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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