设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑
    4 K5 Q* o4 O  U) {; j0 F
    8 Y. c! C5 W' D8 p, i" S为预防老年痴呆,时不时学点新东东玩一玩。
      t+ l. r( u6 k1 s0 B5 t! `- T% [* lPytorch 下面的代码做最简单的一元线性回归:0 O) ?4 i0 x* F5 P6 w  `
    ----------------------------------------------$ n5 s0 L+ d$ C- I
    import torch
    - D( P+ e3 Y. fimport numpy as np  [9 j! c5 y9 V# Q
    import matplotlib.pyplot as plt' y1 u' Z; |- L5 j8 z. w
    import random
    6 \" _& P9 o; `8 t( \( Q: b. R7 R% O1 @" q+ a
    x = torch.tensor(np.arange(1,100,1))2 @6 d) v8 Z4 f4 D) T
    y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15
    0 @$ I! G* N/ y6 i0 ]; t5 l& e
    9 m: u  k5 q- g1 N" }4 i; I1 Nw = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b
    . Q0 W' O+ J3 @) Jb = torch.tensor(0.,requires_grad=True)1 Y; \" `6 z7 ?# {2 G6 R  j
    3 }. e! D( G1 C; v0 S" t
    epochs = 100
    , o  s5 q) d' s$ B3 R+ b" z4 b( H( a& l! q7 ]
    losses = []. Z7 a5 b# S$ l( s: B# p
    for i in range(epochs):
    0 U/ A. ^, o6 _" D( f1 O  y_pred = (x*w+b)    # 预测
    4 [  `1 r+ s9 Y' e; h' k$ L! J* F; \  K  y_pred.reshape(-1)+ N( I. f1 {, M( ^6 R, z
    3 A" X8 b) n3 G
      loss = torch.square(y_pred - y).mean()   #计算 loss
    9 e2 c# Z3 }% B8 M+ J  losses.append(loss)
    / W4 F, b/ s" q  b% A% f' }/ _4 @, {; K  
    8 H5 z3 V$ B, k8 g+ m  y( C& k  loss.backward() # autograd8 f; {- W1 i; o% V- n' b
      with torch.no_grad():; H9 e, u- n2 f
        w  -= w.grad*0.0001   # 回归 w
    1 h) m2 U+ L4 {+ Z9 N    b  -= b.grad*0.0001    # 回归 b , n  a8 @* }% G' r9 N, t! x
      w.grad.zero_()  
    - C& ]: R0 h5 h- v* f+ K4 R# S  b.grad.zero_()
    ( h& p; j4 P; ^' z* Z+ t) H4 T3 C. G. K" ~
    print(w.item(),b.item()) #结果
    5 Q8 m9 l/ f& O$ u$ V; z1 y9 z
    / ?5 ?# L1 Z+ b3 z( T* M9 I" VOutput: 27.26387596130371  0.49745178222656257 O/ r: C3 B  B1 n
    ----------------------------------------------
    & E( G- q2 G/ y0 {# d最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。
    . \9 X2 O0 k8 s, ^( i$ y5 f) i高手们帮看看是神马原因?
    4 `2 S/ \' C2 l8 K/ ]- w  Q

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑 5 p# }$ I$ m2 C1 I6 ]2 j4 t
    - ^( e4 _* W( \3 @% {. R: v
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    8 D) F6 J! f$ j7 Y  p; I2 v-------
    8 ]& U& a+ q( a- b8 m. ?不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。
    8 W9 R5 t: n$ ?; l& B; t, D-------9 H- k2 i: p% D
    算法诊断部分,建议把循环次数改为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
    6 S2 g; M; s" X+ s没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    ' m9 H! z" J; w- F/ {4 g8 T-------; M* l3 z( }4 ~7 f. j, I% _, B
    不好意思, ...

    8 \4 k1 O; M$ k2 {) p. l谢谢,算法应该没问题,就是最简单的线性回归。
    % y( {' L  F0 s  A2 h我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    % R: a/ w$ w# j* ]
    雷达 发表于 2023-2-14 21:522 g& @) I- t9 O6 L* T
    谢谢,算法应该没问题,就是最简单的线性回归。7 K$ J: U, X3 P/ l" X, X5 F, o2 Z
    我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
    8 [; k& e: C4 J" `. \
      `. N" _/ A0 ?
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    , z5 c: G8 p* |% y5 ^0 v+ a: ?3 N4 t1 S5 |
    或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑
    . ^1 l1 y. x8 m) _6 |  S
    老福 发表于 2023-2-14 22:009 w  X" }/ j5 q; K- P
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    1 C+ l# i* {! p8 p4 S. t: g
    ) [4 X: L# B- x6 I& E. J7 p9 ]( |+ V( D或者把b但的起点改为1试试。 ...

    4 O9 m# \* q. A+ u% T9 }
    - J: f; d0 ^( w2 i7 }& f你是对的。
    ! H0 ?$ s' o. S9 g. A. O去掉了随机部分0 c% M4 p9 [% R! L. l  Q
    #y = (x*27+15+random.randint(-2,3)).reshape(-1)  c' x) O; V! a; Y
    y = (x*27+15).reshape(-1)# T5 n$ X7 r8 D7 F
    & l+ `, J6 T2 E+ ?
    循环次数加成10倍,就看到 b 收敛了- h/ ?/ ~- A* V6 b
    w , b8 z) `1 n' {; C& X4 y" E
    27.002620697021484 14.8261671066284185 j# y6 H1 n( J* V5 I2 c

    # {$ R2 ?! A& d; ]7 W和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-7-29 12:37 , Processed in 0.058372 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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