设为首页收藏本站

爱吱声

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 # R5 ^" C0 N* |. B& {+ \8 K

    - ~& o2 S- T% [, u% l. G5 k为预防老年痴呆,时不时学点新东东玩一玩。
    / X& Q  c! O) n: Q  d6 a2 CPytorch 下面的代码做最简单的一元线性回归:
    3 ?# ^1 z9 {# D6 b& O9 C----------------------------------------------
    ; N$ k- F# b" `# m; g4 U4 jimport torch$ u: L: }  G5 H$ S5 x6 H
    import numpy as np
    % O0 l' q  q) x  h- ^import matplotlib.pyplot as plt  l8 X  i9 q9 T: ]* J  v# K" _  O! P
    import random
    $ Y6 q- X# E4 I% P/ A7 l$ f4 g
    ) g. x4 {( t$ H  X! a; zx = torch.tensor(np.arange(1,100,1))# Z) M8 `3 g7 G
    y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15# @) {) L* C  h6 W

      {+ x) K$ F, z2 Zw = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b$ u7 v$ c+ t0 F6 L
    b = torch.tensor(0.,requires_grad=True)  |9 [# H# H4 b- S& s" a# Z
    + N/ T1 `) e+ q1 S/ N
    epochs = 100
    4 K# @% h$ D1 ^* G* g" q$ U+ t. Q6 v% m+ G& k- P
    losses = []# E, w6 h7 y, Y3 L# e+ V
    for i in range(epochs):
    8 S* \) o& }& \; W7 M  y_pred = (x*w+b)    # 预测. k$ @  e7 @( \9 o6 A" @( O/ O
      y_pred.reshape(-1)
    + g3 J  _5 U! i5 N( {
    5 b( @8 J) U4 j; s, I9 P  loss = torch.square(y_pred - y).mean()   #计算 loss
    / w3 l4 M6 J2 X+ y  losses.append(loss)
    # i7 I7 y2 `- b  
    . m/ G* c" I. \0 }- N, X' s  loss.backward() # autograd
    9 \1 e: M+ t# [9 l# d  with torch.no_grad():
    ! J5 N% M' A. ^3 V4 P    w  -= w.grad*0.0001   # 回归 w- ?' S6 u3 n$ D8 S9 a" x+ H" {6 H
        b  -= b.grad*0.0001    # 回归 b 9 q6 _) q. S% q3 @+ F7 F: o$ `
      w.grad.zero_()  1 G0 d! t4 C+ [5 N# m2 C
      b.grad.zero_()2 L9 c" w/ s3 F: a7 R

    ; B9 e" {8 X. @& J9 e5 N9 _print(w.item(),b.item()) #结果( O& i5 p, [% `" y5 A. E/ a

    4 I* k) M* i* D. ?# U2 f6 l' j/ mOutput: 27.26387596130371  0.4974517822265625
    & g# N# I) S9 s1 v4 w; P& A! l----------------------------------------------
    - F. c9 \; ^. E) I; P! y# B* _4 r最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。" H- N3 D7 A/ U8 s8 x$ q6 x$ q' x
    高手们帮看看是神马原因?
    4 C% o: E/ F. t3 J) E0 V$ G

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑
    9 N9 _' V: I+ o' ]8 _- [! g; A
    % G  k9 L5 K* q/ m没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    . n. t- @- O  L  x! e-------# g' @0 u, y4 ^8 F( h, l8 h$ K) u
    不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。  S* M" s3 E. u; j( |# X
    -------
    6 r! M6 P3 j8 l/ K/ S8 [( o4 ]/ x4 O算法诊断部分,建议把循环次数改为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- o0 ^1 I1 J3 b$ n/ }' ^
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    - E6 b0 |' `3 [$ a( c$ Z-------) \' @8 P  q) @: `% i  j
    不好意思, ...
    3 P: P' U; p/ H; x; H6 P9 v2 i
    谢谢,算法应该没问题,就是最简单的线性回归。& b6 |( L3 S" D, e2 E
    我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑 6 y0 y& T1 k9 {, Q
    雷达 发表于 2023-2-14 21:520 F: K7 _# E4 d+ n: J
    谢谢,算法应该没问题,就是最简单的线性回归。
      y5 M. Z. \- U5 N  E+ K( A我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
    . e' E; {+ h2 @# @. H' @) U) I

    8 s2 b) j& p& k刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。, S5 B1 W0 a5 I+ V+ K$ m- f

    7 z* s) E  ?- M! q# R+ m1 [或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑 7 {7 l  m6 X  b! s2 i9 N, u/ M& t
    老福 发表于 2023-2-14 22:00
    4 d. C9 I. W: T刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。& Z7 R6 h* O" n& a

    / w. {( Q+ l4 `. ]) r或者把b但的起点改为1试试。 ...
    , A& A7 ^& P) w; v. B' h
    + c( [  g+ D/ G( v& l* v& O! q
    你是对的。8 S# h# }% q+ l9 Z) B4 X& f- J( B
    去掉了随机部分
      A4 q) Y) e& r#y = (x*27+15+random.randint(-2,3)).reshape(-1)& O* _  h0 \7 A" J
    y = (x*27+15).reshape(-1)
    - Q9 J/ j. P: H1 L" L- z
    & }4 N; z! O8 s) Y3 Z循环次数加成10倍,就看到 b 收敛了3 K- @0 V, W, L& k$ @) n
    w , b% v$ u5 [+ ]* h6 t' Y4 D
    27.002620697021484 14.826167106628418+ X3 b( k+ A5 v
    3 K& r2 I" E0 n1 `9 R
    和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2025-9-4 03:52 , Processed in 0.034778 second(s), 22 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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