pytorch基础回顾_pytorch搭建两层神经网络的几种方式(numpy搭建-pytorch搭建-快速搭建)

这篇博客回顾了PyTorch的基础知识,通过比较numpy和PyTorch实现两层神经网络的不同方法,包括手动计算梯度与使用自动求导,以及利用nn库和optimizer进行模型构建和优化。详细讲解了从基本操作到模型定义的全过程。
摘要由CSDN通过智能技术生成
import torch
import numpy as np

numpy实现两层神经网络

# N = 64 : 64个输入数据
# D_in = 1000 : 每个数据都是1000维的
# H : 隐藏层是100维的
# D_out : 输出时10维的
N,D_in,H,D_out = 64,1000,100,10
# 随机创建一些训练数据
x = np.random.randn(N,D_in)
y = np.random.randn(N,D_out)

w1 = np.random.randn(D_in,H)  # 参数w1
w2 = np.random.randn(H,D_out) # 参数w2

learning_rate = 1e-6 # 学习率

# 迭代
for t in range(100):
    # 前向传播
    h = x.dot(w1) # h是隐藏层的数据  N * H
    h_relu = np.maximum(h,0) # 相当于对隐藏层进行了relu操作. maximun表示大于0就是原来的值,小于0则为0
    y_pred = h_relu.dot(w2) # 预测的结果
    
    # 计算损失,为了反向传播
    loss = np.square(y_pred-y).sum() # 对1为向量求sum(),变成了一个数. square==平方
    print(t,loss)
    
    # 反向传播
    # 计算梯度
    grad_y_pred = 2.0 * (y_pred - y)
    grad_w2 = h_relu.T.dot(grad_y_pred)
    grad_h_relu = grad_y_pred.dot(w2.T)
    grad_h = grad_h_relu.copy()
    grad_h[h<0] = 0
    grad_w1 = x.T.dot(grad_h)
    
    # 更新参数w1 和 w2
    w1 -= learning_rate * grad_w1
    w2 -= learning_rate * grad_w2
    
0 30347035.384433888
1 24718568.653240222
2 23597788.63894424
3 23096459.851170607
4 21029319.754320197
5 16968220.82334677
6 12006552.7923388
7 7665316.670990429
8 4635940.666159237
9 2805222.211301748
10 1770659.9903594556
11 1193155.2029025808
12 861150.3712543799
13 659489.3501920444
14 528196.5922209043
15 436497.0161011358
16 368430.5840908838
17 315511.6611286531
18 272954.117259877
19 237933.08903132967
20 208598.70601409825
21 183750.43490385017
22 162566.31829082302
23 144334.967152506
24 128542.32416747476
25 114802.88316409125
26 102805.98169063582
27 92279.9275370203
28 83010.09700840812
29 74824.2279950018
30 67582.70144117868
31 61152.19873813349
32 55421.62923632564
33 50303.05854643542
34 45725.902359306834
35 41619.659155106914
36 37927.95084726674
37 34605.97425757133
38 31611.648090010305
39 28905.456200955367
40 26455.884397423237
41 24236.857316136233
42 22223.643186388297
43 20394.08862393687
44 18730.045056513158
45 17214.080157408902
46 15832.055550383366
47 14571.038324127541
48 13418.386602541708
49 12365.538760812191
50 11403.50309077913
51 10522.160463743843
52 9714.33894789827
53 8972.911901268339
54 8292.43265949931
55 7667.840191008367
56 7093.634143361322
57 6565.278272220198
58 6078.726836276828
59 5630.501209933924
60 5217.494767908937
61 4836.555157077071
62 4485.152986181674
63 4160.7489051267285
64 3860.96225583552
65 3584.1074455714843
66 3328.3717047603645
67 3091.9034212241377
68 2873.0359176828133
69 2670.4789754930616
70 2482.89088282988
71 2309.2004426825206
72 2148.2041159985074
73 1998.9290527010658
74 1860.4678090436898
75 1731.9929371075132
76 1612.8280894162003
77 1502.1449234975764
78 1399.4309631926496
79 1304.0625960549223
80 1215.369920797412
81 1132.9729313715118
82 1056.455426863299
83 985.2916366640375
84 919.059425165188
85 857.4425263852534
86 800.1558009341131
87 746.7987866063822
88 697.1188566016917
89 650.84884613353
90 607.7756551572991
91 567.6300088867403
92 530.276023968143
93 495.50123290163606
94 463.06217142632556
95 432.8126495265047
96 404.593327991592
97 378.27784385721804
98 353.71425819348053
99 330.7921299156915



pytorch实现两层神经网络

  • numpy的dot() 等价于 torch的 mm : 矩阵的乘法
N,D_in,H,D_out = 64,1000,100,10

# 随机创建一些训练数据
x = torch.randn(N,D_in)
y = torch.randn(N,D_out)

w1 = torch.randn(D_in,H)  # 参数w1
w2 = torch.randn(H,D_out) # 参数w2

learning_rate = 1e-6 # 学习率

# 迭代
for t in range
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值