设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 ( |# Z3 s5 J( N4 D
    $ Z' A; Q. l4 b5 |  k; V
    为预防老年痴呆,时不时学点新东东玩一玩。
    8 v; t$ E4 Z+ z' xPytorch 下面的代码做最简单的一元线性回归:
    ' ?, {$ y; J4 H----------------------------------------------7 a9 }% M+ V) E% Q: M( F& F1 }3 D
    import torch
    9 p. V, K* P2 |/ v$ n. y" U% \import numpy as np
    7 U" @4 o5 p* I# w  E$ }import matplotlib.pyplot as plt
    " |1 r: @8 s% s$ L1 ?) k8 {import random
    1 Z2 q5 V" W2 B2 R/ H; _: }9 n6 ?6 O5 J
    x = torch.tensor(np.arange(1,100,1))
    " X3 {" h# C7 Q! b2 W/ e0 Iy = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=155 C9 Y2 v1 n; Z
      O2 h( L& C7 Z
    w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b' n$ g; {+ T% F3 v2 J2 {
    b = torch.tensor(0.,requires_grad=True)# h* G! g2 ?1 g5 n' S; l. y  ~

    7 o* f0 l7 C' ?" p* gepochs = 100/ e/ B8 {1 I. `  C3 i: y2 W! a

    ' d+ i! `0 t* h* E( Zlosses = []" n0 s' j" T% F' [' b9 ^
    for i in range(epochs):
    : L' g2 s5 u0 f) H) ^  W- i  y_pred = (x*w+b)    # 预测6 G; c( O6 N. r2 X- c8 W! U$ P
      y_pred.reshape(-1)3 `  f1 l# X# P& T: j8 e& q

    . T$ O9 b  z7 W4 J; k  loss = torch.square(y_pred - y).mean()   #计算 loss
    ( z6 k! }8 ?! j* B  losses.append(loss)- N5 I) E9 ], O* w2 `
      
    / t0 ~8 U4 R! {$ u& y7 {  loss.backward() # autograd7 {1 [" K+ m' y  o
      with torch.no_grad():
    $ b* C+ O7 ?& ^! j    w  -= w.grad*0.0001   # 回归 w
    4 ^; ]7 M% q9 _; e    b  -= b.grad*0.0001    # 回归 b
    ; c- `& N, Y+ _% Z, h  w.grad.zero_()  9 n2 `; L# _- q, S) }& Q$ [
      b.grad.zero_(): @& M; Z! g5 [% K
    2 ~1 V: ?. R$ [, `/ N6 s
    print(w.item(),b.item()) #结果
    ) B# E8 d3 s! s4 C3 C3 ~
    4 }  p3 r7 I1 Q" o3 ^' ]6 X, C: _: _Output: 27.26387596130371  0.4974517822265625
    3 n1 s! [* r9 K% o" \----------------------------------------------
    / v2 y2 v0 K% H最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。
    " Z0 d! ~6 n% w1 _+ y高手们帮看看是神马原因?2 s* \( L. ^& y4 G2 {, J

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑 ) D0 ~( I3 _( V( w$ {

    # K/ c* X6 J9 W4 x没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?$ E) ^1 w  C" O1 v! S  Y0 O
    -------
    ( I) m" \1 }/ @1 E7 S不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。
    / h6 W; r  W0 ^7 }. N9 m-------
    $ l9 ~4 P4 ~- t算法诊断部分,建议把循环次数改为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
    9 d5 F8 m$ `" T没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?9 U; K) [) f9 ]2 v
    -------
    : |% _) K8 I7 T# Z1 S; J7 [不好意思, ...
    . K  K2 }% A# r
    谢谢,算法应该没问题,就是最简单的线性回归。
    : O0 l' |' X3 h4 h: g. B& ^- O: J我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑 9 z' b: E  C) N! H# w. r
    雷达 发表于 2023-2-14 21:52
    * I; v( i# V, J, ~0 B# C7 s3 P5 k* K谢谢,算法应该没问题,就是最简单的线性回归。2 _" @. I. S9 }
    我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
    9 j# s6 V" R# x9 Z% ?/ P. G8 [( v" J

    ; |" A* ?6 }0 k+ b$ }( K+ l6 k3 n刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。0 x( w! h. i, t, A3 U( U$ b' y

    1 y1 O. ^. n- ~+ G0 u或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑
    ( r8 h6 V1 w4 D9 h2 _
    老福 发表于 2023-2-14 22:007 H* ~7 @2 Z, P) h% h
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。$ Y0 Q* R7 G- _+ U' S

    ' F; @; n1 U, v& {" z6 L2 l* P或者把b但的起点改为1试试。 ...
    " f  U; z, ?5 _4 g

    : h0 l% Y) F3 v/ O. U) P2 N& x- l你是对的。
    3 @8 V. b. D+ s& d4 q6 X" o- c& }# [0 C, z去掉了随机部分. ^' K* f% g9 _
    #y = (x*27+15+random.randint(-2,3)).reshape(-1)
    5 L$ K1 g0 C. i( |y = (x*27+15).reshape(-1)
    9 x. ]0 u' G1 _" p+ a
    ( I. Z' H6 g" j  m6 L循环次数加成10倍,就看到 b 收敛了" Z9 a" P3 F$ e4 Z9 x
    w , b
    3 u, p/ B* S, A27.002620697021484 14.826167106628418
    2 J* B7 \  A& G, i2 {3 ^6 B% Z" }/ M7 `3 {+ l- v$ p3 M; D4 _- A
    和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-4-20 09:16 , Processed in 0.071558 second(s), 19 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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