设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 / O4 d" ?' l! H8 E5 o

    6 |2 v% ?  [8 J, E5 S+ r为预防老年痴呆,时不时学点新东东玩一玩。: `$ p; o) e5 E. ]9 W9 W, T3 y
    Pytorch 下面的代码做最简单的一元线性回归:
    " |" v) o8 B8 C4 ^& Y6 b- W7 _) R----------------------------------------------2 \/ [& f+ Y: p0 |
    import torch
    4 B# G; p: y1 k2 E$ k4 f# R; ]" D. Yimport numpy as np
    . V2 [/ E9 `8 T/ `8 u/ \, ?import matplotlib.pyplot as plt% H8 t; L+ S$ }: a1 f
    import random
    ( v& P$ l7 h+ G* W2 n8 i6 R. G: y5 |: k
    x = torch.tensor(np.arange(1,100,1))$ ~2 k$ Q+ [+ U0 D8 ]/ ?( H
    y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15
    9 J0 j6 p* F) u) c
    5 c7 x7 n1 J- n' vw = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b7 p5 E; m) o9 \
    b = torch.tensor(0.,requires_grad=True). {. [4 R  x6 u% W7 J8 X
    & N# [2 p5 ?+ p# {1 M+ P0 N- V4 p
    epochs = 100# }8 P9 Q) Q7 T- B! y

    # s" e! W2 b; S) t# x" v6 [7 Nlosses = []+ T2 p* I: k( m# E$ B* r
    for i in range(epochs):" o2 t8 K* u& ~9 ~  [* t- f5 r
      y_pred = (x*w+b)    # 预测9 {' E7 W* _2 l
      y_pred.reshape(-1)" j  S, e9 G& i& Y8 F
    # ^) {, z  w3 `7 n9 I1 [% d
      loss = torch.square(y_pred - y).mean()   #计算 loss; e: K6 J2 V  d, y' |3 k3 {) Y
      losses.append(loss)
    ! w  b0 l# h2 Q) X4 X  ; y1 v; \+ K% s) q" N0 D1 n6 u
      loss.backward() # autograd
    3 s' M% D' ]7 `; d$ i  with torch.no_grad():
    0 X. R  _9 H+ l6 ~% O    w  -= w.grad*0.0001   # 回归 w
    , U3 Y8 x: O  K" F, w) J    b  -= b.grad*0.0001    # 回归 b
    1 ~9 M* R  C, m  i5 X  w.grad.zero_()  
    , @& v5 q' `8 |, ~& l. _  b.grad.zero_()
    " V  n  l" g1 d* C3 |- w! m; e, E- {
    print(w.item(),b.item()) #结果
    2 K3 b- Z0 s. R3 K' z
    1 E! c3 |, v. K7 \! G  yOutput: 27.26387596130371  0.4974517822265625, }+ h* ^) w! S0 S# y  R
    ----------------------------------------------
    - O* Z' ~% u4 Z- L最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。
    & e' l2 N$ g& Y& _/ z9 e高手们帮看看是神马原因?
    ; H3 O3 Q* T# w% z  o

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑
    1 J4 S! E) {# y$ m# x
    9 m, U9 C$ a# z* y$ e% `% y没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    " y* W9 k( X- o- n-------
    $ u  R2 y) P/ i5 N9 n+ ~' u不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。4 }6 h+ J( j$ x( u  y2 T# U; q
    -------
    . x7 M- ~8 [* S5 v! U算法诊断部分,建议把循环次数改为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) A, s+ {6 b1 R& _! ^; f
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?, [1 t0 M0 ^" {3 G  w, j, w: m
    -------( ^0 E3 h# Y$ I3 H7 x
    不好意思, ...
    1 p& s6 f$ H  \2 D
    谢谢,算法应该没问题,就是最简单的线性回归。
    " W; m( p$ J! c. g我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    " x* B8 L" i* d# a. I4 _' r
    雷达 发表于 2023-2-14 21:52, ?8 G: S6 Z  n6 q
    谢谢,算法应该没问题,就是最简单的线性回归。4 W. R7 r0 A' {2 B& A
    我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
    7 W7 B2 u/ v" h/ ^0 A

    " R1 I, \7 s" K$ g7 p! w刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。- ]% p8 O7 @1 l* z9 }: }

    8 v% k' A% C9 s或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑 ; _6 L* B0 ^! q' I3 W* D% |
    老福 发表于 2023-2-14 22:000 Y1 L; g) {2 ^: A; P7 d9 r. m* x# y
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
      g- ?8 a& Z* n9 Z- z2 ^( Y. `. L* Y! l  P5 p
    或者把b但的起点改为1试试。 ...

    + a, M; q2 Z* S
    0 `9 ^+ B! {: F2 E3 t8 a你是对的。$ p' x4 z5 q5 ^  G3 N' q) n! `
    去掉了随机部分5 T) C) p/ Y; b9 @9 T7 J
    #y = (x*27+15+random.randint(-2,3)).reshape(-1)
    / _3 i0 ?4 N- [/ xy = (x*27+15).reshape(-1)& _/ u' P6 g: B& g" V
    / S6 }4 D+ u' x7 B) b; L
    循环次数加成10倍,就看到 b 收敛了0 ?0 W, X5 V4 N( H
    w , b% Y( N- L2 A: s) p6 h' W
    27.002620697021484 14.826167106628418
    ' g* r* Y2 O9 H$ Z" l0 f
    3 u- b, l* L6 i8 i: ^$ g和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-8-12 09:58 , Processed in 0.071609 second(s), 17 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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