设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 ' y: l8 Z- p9 k3 A2 Y4 Y
    % T5 ~' C& F$ r. u1 g
    为预防老年痴呆,时不时学点新东东玩一玩。
      @& o! l; w' s. h! `Pytorch 下面的代码做最简单的一元线性回归:2 _" X, k5 G4 e  ^* O, A3 P+ A5 s
    ----------------------------------------------
    $ l9 h7 I- V& Y0 qimport torch+ n2 N3 X/ F' Q5 X" T. b3 D
    import numpy as np
    ; J5 |: O5 n- x; b- ]! rimport matplotlib.pyplot as plt
    3 A' }/ v' @2 U8 ~6 l' k2 f) ]& limport random6 y5 |* T9 J' P- F
    5 B9 m" x. H, {  W
    x = torch.tensor(np.arange(1,100,1))
    4 {# @  N2 U4 e" X4 N% hy = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15
    ! L5 @( d  f3 k1 W. G  |
    - G) `" O7 ]9 U. c: r* M. Qw = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b5 m, p' r: @" S& h* k) H
    b = torch.tensor(0.,requires_grad=True)
    3 R) i% L  t2 c4 P* m4 H! [, w
    * w7 x6 q; }+ U# ?1 Zepochs = 100' R, c* m, [6 Z$ k: Y

    2 M- t0 U' ]/ \( d, H+ K% Klosses = []+ u5 y2 e1 t- D5 l) x
    for i in range(epochs):
    % z$ p% v( t! a  y_pred = (x*w+b)    # 预测
    5 |, ]' z  `" b+ K  y_pred.reshape(-1)9 R. n: ?  X+ B+ K' C2 N
    4 D6 y# u  h0 F) e  r
      loss = torch.square(y_pred - y).mean()   #计算 loss2 t0 j/ [1 K3 Y& c
      losses.append(loss): e, Q! _7 C! j# a2 a
      
    - F4 H9 }, C- U6 E# F  loss.backward() # autograd
    9 ?2 ^' C( [$ q; ~  with torch.no_grad():
    6 O* Z- Q" h$ C    w  -= w.grad*0.0001   # 回归 w
    ' @- Q! z: s- _7 s6 n/ i    b  -= b.grad*0.0001    # 回归 b
    9 i- `. D( K1 N7 @5 e7 l* f  w.grad.zero_()  
    / I) R' m1 h" {! i7 X  b.grad.zero_()
    3 g. I4 x- r) |: j' l. M' e) `
    & z0 M  t1 b% f- j" v" d: Y3 wprint(w.item(),b.item()) #结果
    ! ]9 i4 ^9 P+ F+ e  S3 ^
    # n  ]7 s9 r* Q7 q, {Output: 27.26387596130371  0.4974517822265625' d3 V% ^& Z; \$ [
    ----------------------------------------------
    0 y# w+ m  ?: e  u: j  [9 b最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。7 o/ D0 n. t  d# r/ \2 ~# t- c
    高手们帮看看是神马原因?
    , h. w* A3 y3 [  g; l0 l

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑 4 V4 w+ N2 H; J
    % S" ]2 l6 X3 H
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?' _" W. v  X9 a. K
    -------
    8 s) a6 ^( M( O1 ^# G不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。
      U  d8 V+ M# i-------
    * l. W7 g* M4 _算法诊断部分,建议把循环次数改为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; U6 ~/ L8 J: a$ |
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?  r( K# D. R& m" Y
    -------
    ( _7 L3 n5 N: I3 `! i( K不好意思, ...

    3 x8 `2 ?8 I0 S5 }- p4 Y  n谢谢,算法应该没问题,就是最简单的线性回归。
    * D1 x- m1 @+ A% N9 ~我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑 ( Z8 T7 ?. j2 O9 \. F- k
    雷达 发表于 2023-2-14 21:525 X: b, f) H# r
    谢谢,算法应该没问题,就是最简单的线性回归。: K8 T, B7 \$ X2 P* k
    我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
    + x; ~* \7 R9 G  N) G
    + P. z% _! G$ |. B( j
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。" T* U; c, I5 u' Q8 c8 }2 q0 U

    ! y! `0 ^4 W; H0 t0 m3 T或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑
    3 g6 V) E- x$ T! D) p$ H
    老福 发表于 2023-2-14 22:00% U5 L+ U% h6 u5 Z. c, U+ F
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。6 T: x) G2 O$ B3 r6 Y; O' ?7 X
    * m. t6 `) l. q
    或者把b但的起点改为1试试。 ...

    1 J' r4 ~. f7 W- @; G# N# `6 U* g$ E3 ^% l6 s
    你是对的。, y) h# y( {. _7 ?7 k6 z+ p$ c& P  |
    去掉了随机部分
    ( e- X7 {! I3 [$ p, `, K9 y#y = (x*27+15+random.randint(-2,3)).reshape(-1): s7 V0 j% o  i9 b3 _8 C
    y = (x*27+15).reshape(-1)
    " o) X# f3 L# l0 J8 C, K/ ^6 B( }. N! s  J0 x) }: x. a
    循环次数加成10倍,就看到 b 收敛了
    . X( ~4 P. L/ P  P1 @1 jw , b
    " C! `. q( w; U27.002620697021484 14.826167106628418! _8 m" w' z" N+ m

    " @3 t; @$ o% Y2 H和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-1-11 18:05 , Processed in 0.030085 second(s), 23 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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