打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
小白必读:5个简单的例子教你把基础数学与机器联系起来

作者——Raimi Karim

5个简单的例子教你在FFNN, RNN和CNN模型中计算参数个数。

手动计算深度学习模型的参数个数往往被认为太过于琐碎,而且是在做无用功。因为你的代码已经可以为你做到这一点。但是我还是执意想写这篇文章,以便我们偶尔参考一下。下面是我们要用到的模型:

1. 前馈神经网络(FFNN)(https://towardsdatascience.com/counting-no-of-parameters-in-deep-learning-models-by-hand-8f1716241889#9fe4)

前馈神经网络是一种最简单的神经网络,各神经元分层排列。每个神经元只与前一层的神经元相连。接收前一层的输出,并输出给下一层,各层间没有反馈。是目前应用最广泛、发展最迅速的之一。研究从开始,目前理论研究和实际应用达到了很高的水平。

2.递归神经网络(RNN)(https://towardsdatascience.com/counting-no-of-parameters-in-deep-learning-models-by-hand-8f1716241889#192e)

递归神经网络(RNN)是神经网络的一种。单纯的RNN因为无法处理随着递归,权重指数级爆炸或消失的问题( gradient problem),难以捕捉长期时间关联;而结合不同的LSTM可以很好解决这个问题。

时间递归神经网络可以描述动态时间行为,因为和(feedforward neural network)接受较特定结构的输入不同,RNN将状态在自身网络中循环传递,因此可以接受更广泛的时间序列结构输入。手写识别是最早成功利用RNN的研究结果。

3.卷积神经网络(CNN)(https://towardsdatascience.com/counting-no-of-parameters-in-deep-learning-models-by-hand-8f1716241889#5137)

卷积神经网络(Convolutional Neural Networks, CNN)是一类包含计算且具有深度结构的(Feedforward Neural Networks),是(deep learning)的代表算法之一 。

同时,我将使用来自Keras的api来构建模型,以便进行简单的开发,并编写干净的代码,因此让我们快速导入相关的对象:

在构建模型之后,调用model.count_params()来验证有多少参数是可训练的。

1. FFNNs

i,输入的大小

h,隐藏层的大小

o,输出的大小

对于一个隐藏层而言,

num_params

= (i×h + h×o) + (h+o)

下面让我们进行举例论述。

示例1.1:输入大小为3,隐藏层大小为5,输出大小为2

图1.1:在该前馈神经网络中,输入大小为3,隐含层大小为5,输出大小为2。图形反映了计数的单元。

i = 3

h = 5

o = 2

num_params

= (i×h + h×o) + (h+o)

=(3×5 + 5×2) + (5+2)

= 32

示例1.2:输入大小为50,隐藏层大小[100,1,100],输出大小为50

图1.2:前馈神经网络有三个隐藏层。图形不反映计数单元。

i = 50

h = 100, 1, 100

o = 50

num_params

= (i×h + h×o) + (h+o)

= (50×100 + 100×1 + 1×100 + 100×50) + (100+1+100+50)

= 10,451

2. RNNs

g,门的数量。(RNN有1个门,GRU有3个门,LSTM有4个门)

h,隐藏单元的大小

i,输入的大小

每个门的权值个数实际上是一个FFNN,有输入大小(h+ i)和输出大小h,所以每个门都有h(h +i) + h个参数。

num_params = g×(h(h + i)+ h)

示例2.1:LSTM包含两个隐藏单元和输入维度3。

图2.1 :LSTM'细胞'。源自:https://towardsdatascience.com/animated-rnn-lstm-and-gru-ef124d06cf45

g = 4 (LSTM有 4个门)

h = 2

i = 3

num_params

= g × [h(h+i) + h]

= 4 × [2(2+3) + 2]

= 48

例2.2:有5个隐藏单元的双向GRU以及输入大小为8+有50个隐藏单元的LSTM。

图2.2:由BiGRU层和LSTM层叠加的RNN。图形不反映计数单元。

有5个隐藏单元的双向GRU,输入大小为10

g = 3 (GRU有3个门)

h = 5

i= 8

num_params_layer1

= 2 × g × [h(h+i) + h] (第一项是2因为这是一个双向式)

=2 × 3 × [5(5+8) + 5]

= 420

有50个隐藏单位的LSTM

g = 4 (LSTM有4个门)

h = 50

i = 5+5(因为GRU输出是双向连接,且GRU的输出大小为5)

num_params_layer2

= g × [h(h+i) + h]

= 4 × [50(50+10) + 50]

= 12,200

total_params = 420 + 12,200 = 12,620

默认情况下,merge_mode是串联的。

CNNs

在只有一层的情况下,

i,输入通道个数

f,过滤器大小(只是长度)

o,输出通道个数。(这是由使用了多少过滤器来定义的)

每个输入通道都有一个过滤器。

num_params

= [i × (f×f) × o] + o

例3.1:1×1过滤器的灰度图像、输出通道为3

图3.1:灰度图像的卷积为2×2过滤器,输出通道为3

i = 1 (灰度图只有一个通道)

f = 2

o = 3

num_params

= [i × (f×f) × o] + o

= [1 × (2×2) × 3] + 3

= 15

例3.2:有着2×2过滤器,输出通道为1的RGB图像

每个输入特征映射都有一个过滤器。生成的卷积按元素顺序添加,并向每个元素添加一个偏差项。这将给出一个带有特征映射的输出。

图3.2:一个2×2的RGB图像的卷积过滤器输出1通道

i = 3 (RGB图像有3个通道)

f = 2

o = 1

num_params

= [i × (f×f) × o] + o

= [3 × (2×2) × 1] + 1

= 13

例3.3:图像有2个通道,2×2过滤器,和3通道的输出

每个输入的特征映射有3个过滤器(紫色、黄色、青色)。生成的卷积按元素顺序添加,并向每个元素添加一个偏差项。这给出了一个带有3个特性映射的输出。

图3.1:2通道图像的卷积为2×2过滤器,输出3频道

i = 2

f = 2

o = 3

num_params

= [i × (f×f) × o] + o

= [2 × (2×2) × 3] + 3

= 27

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Deep Learning | 循环神经网络系列(SRNN, LSTM, GRU)
Char RNN原理介绍以及文本生成实践
动画图解RNN, LSTM 和 GRU,没有比这个更直观的了!
自然语言处理领域深度学习研究总结:从基本概念到前沿成果
seq2seq学习笔记
深度学习在自然语言处理中的应用
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服