Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >一文搞懂 FFN / RNN / CNN 的参数量计算公式 !!

一文搞懂 FFN / RNN / CNN 的参数量计算公式 !!

作者头像
JOYCE_Leo16
发布于 2024-04-16 00:16:52
发布于 2024-04-16 00:16:52
3.6K05
代码可运行
举报
文章被收录于专栏:计算机视觉计算机视觉
运行总次数:5
代码可运行
文章目录

前言

1、前置条件

2、前馈神经网络FFN

3、循环神经网络RNN

4、卷积神经网络CNN

5、复杂例子


前言

为什么我们需要了解计算深度学习模型中的参数数量?

  • 计算复杂性和资源需求:模型参数越多,通常需要的计算资源(如处理器时间和内存)也越多,了解参数数量有助于估计训练和推理过程中的资源需求。
  • 模型性能:容量越大的模型可以捕获更复杂的模式,但也容易过拟合,即在训练数据上表现良好但在未见过的数据上表现差,因此,了解参数数量有助于在模型复杂性和泛化能力之间取得平衡。
  • 内存需求:对于有限的硬件资源,如移动设备和嵌入式系统,了解参数数量有助于设计合适的模型结构。
  • 调优和优化:了解模型的参数数量有助于调优超参数,比如学习率和正则化项。

1、前置条件

为了详细说明,本文重点介绍三类网络训练参数的计算方式:

  • Feed-Forward Neural Network(FFN)
  • Recurrent Neural Network(RNN)
  • Convolutional Neural Network(CNN)

同时,本文将使用Keras的API构建模型,以方便模型设计和编写简洁的代码。首先导入相关的库函数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from keras.layers import Input, Dense, SimpleRNN, LSTM, GRU, Conv2D
from keras.layers import Bidirectional
from keras.models import Model

使用上述库函数在建立模型后,通过调用 model.count_params() 来验证有多少参数用以训练。

2、前馈神经网络FFN

前馈神经网络相对比较简单,多个全连接层构成的网络结构,我们不妨假设:

  • i:输入维度
  • h:隐藏层大小
  • o:网络输出维度

那么一个隐藏层的参数的计算公式为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
num_params = (connections between layers + biases) in every layer
           = (i×h + h) + (h×o + o)

先来看个图例,如下:

观察上述图例中,我们知道 i=3,h=5,o=2,带入上述公式,得到的训练参数量为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
num_params = (3×5+5) + (5×2+2)
           = 32

我们用代码实现上述过程,如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
input = Input((None, 3))
dense = Dense(5)(input)
output= Dense(2)(dense)
model = Model(input, output)
print(f"train params of the model is {model.count_params()}")

运行上述代码,得到结果如下:

3、循环神经网络RNN

前馈神经网络里相对简单,我们接下来分析循环神经网络的参数计算方式,这里假设:

  • g:一个单元中的FFN数量(一般来说,RNN结构中FFN数量为1,而GRU结构中FFN数量为3个,LSTM结构中FFN数量为4个)
  • h:隐藏单元的大小
  • i:输入大小

RNN中对于每个FFN,最开始输入状态和隐藏状态是concat在一起作为输入的,因此每个FFN具有 (h+i) x h + h 个参数。所以总的参数量的计算公式为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
num_params = g × [(h+i)×h + h]

我们来看以下LSTM的例子,含有2个隐藏单元,输入维度为3,图示如下:

观察上图,我们将 g=4,h=2,i=3 带入上式,得到上述LSTM的参数量为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
num_params = g × [(h+i)×h + h] 
           = 4 × [(2+3)×2 + 2] 
           = 48

我们用代码验证上述过程,如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
input = Input((None, 3))
lstm  = LSTM(2)(input)
model = Model(input, lstm)
print(f"train params of the model is {model.count_params()}")

结果如下:

4、卷积神经网络CNN

对于卷积神经网络,我们主要观察卷积层,这里对每一层的卷积,我们假设:

  • i:输入特征图的通道数
  • f:滤波器的尺寸
  • o:输出的通道数(等于滤波器的个数)

则对应卷积层的参数量计算公式为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
num_params = weights + biases 
           = [i × (f×f) × o] + o

我们来看个例子,对灰度图像使用 2x2 滤波器,输出为3个通道,图示如下:

观察上图,我们知道 i=1,f=2,o=3 带入上式,得到结果为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
num_params = [i × (f×f) × o] + o 
           = [1 × (2×2) × 3] + 3 
           = 15

我们用代码进行验证,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
input  = Input((None, None, 1))
conv2d = Conv2D(kernel_size=2, filters=3)(input)
model  = Model(input, conv2d)
print(f"train params of the model is {model.count_params()}")

得到结果如下:

5、复杂例子

由于卷积神经网络多在计算机视觉领域得到应用,我们再来看个稍微复杂点的例子,针对2个通道输入使用32x2 的卷积核进行卷积操作,图示如下:

观察上图,我们知道 i=2,f=2,o=3 带入上式,得到结果为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
num_params = [i × (f×f) × o] + o 
           = [2 × (2×2) × 3] + 3 
           = 27

我们用代码进行验证,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
input  = Input((None, None, 2))
conv2d = Conv2D(kernel_size=2, filters=3)(input)
model  = Model(input, conv2d)
print(f"train params of the model is {model.count_params()}")

得到结果如下:

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-04-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
手动计算深度学习模型中的参数数量
为什么我们需要再次计算一个深度学习模型中的参数数量?我们没有那样去做。然而,当我们需要减少一个模型中的文件大小甚至是减少模型推理的时间时,我们知道模型量化前后的参数数量是派得上用场的。(请点击原文查阅深度学习的高效的方法和硬件的视频。)
AI研习社
2019/05/08
3.8K0
手动计算深度学习模型中的参数数量
带你一文搞懂CNN以及图像识别(Python)
卷积神经网络(Convolution Neural Networks,CNN)是一类包含卷积计算的前馈神经网络,是基于图像任务的平移不变性(图像识别的对象在不同位置有相同的含义)设计的,擅长应用于图像处理等任务。在图像处理中,图像数据具有非常高的维数(高维的RGB矩阵表示),因此训练一个标准的前馈网络来识别图像将需要成千上万的输入神经元,除了显而易见的高计算量,还可能导致许多与神经网络中的维数灾难相关的问题。
JOYCE_Leo16
2024/03/19
1.4K0
带你一文搞懂CNN以及图像识别(Python)
【机器学习】神经网络的无限可能:从基础到前沿
在当今人工智能的浪潮中,神经网络作为其核心驱动力之一,正以前所未有的速度改变着我们的世界。从图像识别到自然语言处理,从自动驾驶到医疗诊断,神经网络的应用无处不在。本文旨在深入探讨神经网络的各个方面,从基础概念到最新进展,带领读者一窥其背后的奥秘与魅力。
破晓的历程
2024/08/20
3400
如何计算LSTM层中的参数数量
长短期记忆网络(通常称为“ LSTM”)是一种特殊的RNN,经过精心设计LSTM能够学习长期的依赖。正如他的名字,它可以学习长期和短期的依赖。
deephub
2022/11/11
2.8K0
如何计算LSTM层中的参数数量
一文弄懂CNN及图像识别(Python)
卷积神经网络(Convolutional Neural Networks, CNN)是一类包含卷积计算的前馈神经网络,是基于图像任务的平移不变性(图像识别的对象在不同位置有相同的含义)设计的,擅长应用于图像处理等任务。在图像处理中,图像数据具有非常高的维数(高维的RGB矩阵表示),因此训练一个标准的前馈网络来识别图像将需要成千上万的输入神经元,除了显而易见的高计算量,还可能导致许多与神经网络中的维数灾难相关的问题。
算法进阶
2022/06/02
1.5K0
一文弄懂CNN及图像识别(Python)
使用CNN,RNN和HAN进行文本分类的对比报告
你好,世界!!我最近加入Jatana.ai 担任NLP研究员(实习生and),并被要求使用深度学习模型研究文本分类用例。在本文中,我将分享我的经验和学习,同时尝试各种神经网络架构。我将介绍3种主要算法,例如:
银河1号
2019/04/12
1.3K0
使用CNN,RNN和HAN进行文本分类的对比报告
入门 | CNN也能用于NLP任务,一文简述文本分类任务的7个模型
本文是我之前写过的一篇基于推特数据进行情感分析的文章(https://ahmedbesbes.com/sentiment-analysis-on-twitter-using-word2vec-and-keras.html)的延伸内容。那时我建立了一个简单的模型:基于 keras 训练的两层前馈神经网络。用组成推文的词嵌入的加权平均值作为文档向量来表示输入推文。
机器之心
2018/07/26
1.8K0
入门 | CNN也能用于NLP任务,一文简述文本分类任务的7个模型
Keras框架速查手册(Python For Data Science Cheat Sheet Keras)
Keras框架速查表 1 Keras 1.1 一个基本示例 2 数据 2.1 Keras数据设置 3 模型结构 3.1 Sequential模型 3.2 多层感知器(MLP) 3.2.1 二元分类 3.2.2 多类别分类 3.2.3 回归 3.3 卷积神经网络(CNN) 3.4 循环神经网络(RNN) 4 预处理 4.1 序列填充 4.2 创建虚拟变量 4.3 训练集、测试集分离 4.4 标准化/归一化 5 模型细节提取 5.1 模型输出形状 5.2 模型总结 5.3 get模型参数 5.4 g
荣仔_最靓的仔
2022/01/05
3950
Keras框架速查手册(Python For Data Science Cheat Sheet Keras)
机器学习-用keras做cnn手写数字识别
在用全连接做手写数字识别的时候,准确率有97%了,但是还是会出现一些测试图片没有预测对,出来更好的去优化参数,现在就直接改进神经网络的模型,用cnn去训练数据。
sjw1998
2019/09/28
1K0
AI人工智能算法工程师系列一(慕K学习分享)
从而提高图像分类的准确率。以下是一个使用VGG16模型的示例,该模型在ImageNet挑战中表现优异。
用户11127530
2024/05/29
2320
基于ResNet和Transformer的场景文本识别
对于自然场景的文字识别我们会遇到了许多不规则裁剪的图像,其中包含文本表示。虽然已经引入了许多复杂的想法来从图像中提取确切的文本。例如光学字符识别 (OCR)、基于 RNN 的 seq2seq 注意方法都是被认为是从结构图像中提取序列信息的传统方法,但许多研究人员发现,很难处理不规则图像和训练时间使他们更加昂贵。基于 RNN 的 seq2seq 注意力方法需要输入的序列表示,这些输入因输入而异,因此很难训练数百万张图像。大多数时间模型无法预测文本或字符,因为我们正在处理自然场景图像。
deephub
2021/07/23
9970
基于ResNet和Transformer的场景文本识别
AMS机器学习课程:Keras深度学习 - 卷积神经网络
David John Gagne, National Center for Atmospheric Research
bugsuse
2020/10/09
9470
AMS机器学习课程:Keras深度学习 - 卷积神经网络
keras 基础入门整理
在进行自然语言处理之前,需要对文本进行处理。 本文介绍keras提供的预处理包keras.preproceing下的text与序列处理模块sequence模块
学到老
2019/01/25
1.6K0
《机器学习实战:基于Scikit-Learn、Keras和TensorFlow》第15章 使用RNN和CNN处理序列
第10章 使用Keras搭建人工神经网络 第11章 训练深度神经网络 第12章 使用TensorFlow自定义模型并训练 第13章 使用TensorFlow加载和预处理数据 第14章 使用卷积神经网络实现深度计算机视觉 第15章 使用RNN和CNN处理序列 [第16章 使用RNN和注意力机制进行自然语言处理] [第17章 使用自编码器和GAN做表征学习和生成式学习] [第18章 强化学习] [第19章 规模化训练和部署TensorFlow模型]
SeanCheney
2019/12/23
1.6K0
Deep learning with Python 学习笔记(11)
机器学习(machine learning)是人工智能的一个特殊子领域,其目标是仅靠观察训练数据来自动开发程序[即模型(model)]。将数据转换为程序的这个过程叫作学习(learning)
范中豪
2019/09/10
5170
深度学习第3天:CNN卷积神经网络
这张图显示了一个滤波器的某时刻的运作过程,最左边的是原图,中间是滤波器,最右边是结果,它会进行一个内积运算,图中也展示了这个过程
Nowl
2024/01/18
2840
深度学习第3天:CNN卷积神经网络
TensorFlow2.X学习笔记(6)--TensorFlow中阶API之特征列、激活函数、模型层
特征列通常用于对结构化数据实施特征工程时候使用,图像或者文本数据一般不会用到特征列。使用特征列可以将类别特征转换为one-hot编码特征,将连续特征构建分桶特征,以及对多个特征生成交叉特征等等。
MiChong
2020/09/24
2.2K0
TensorFlow2.X学习笔记(6)--TensorFlow中阶API之特征列、激活函数、模型层
cnn lstm pytorch_pytorch怎么用
BP网络和CNN网络没有时间维,和传统的机器学习算法理解起来相差无几,CNN在处理彩色图像的3通道时,也可以理解为叠加多层,图形的三维矩阵当做空间的切片即可理解,写代码的时候照着图形一层层叠加即可。如下图是一个普通的BP网络和CNN网络。
全栈程序员站长
2022/10/01
6500
cnn lstm pytorch_pytorch怎么用
精通 TensorFlow 1.x:6~10
在涉及有序数据序列的问题中,例如时间序列预测和自然语言处理,上下文对于预测输出非常有价值。可以通过摄取整个序列而不仅仅是最后一个数据点来确定这些问题的上下文。因此,先前的输出成为当前输入的一部分,并且当重复时,最后的输出结果是所有先前输入的结果以及最后一个输入。 循环神经网络(RNN)架构是用于处理涉及序列的机器学习问题的解决方案。
ApacheCN_飞龙
2023/04/23
1.4K0
一文总览CNN网络架构演进:从LeNet到DenseNet
卷积神经网络可谓是现在深度学习领域中大红大紫的网络框架,尤其在计算机视觉领域更是一枝独秀。CNN从90年代的LeNet开始,21世纪初沉寂了10年,直到12年AlexNet开始又再焕发第二春,从ZF Net到VGG,GoogLeNet再到ResNet和最近的DenseNet,网络越来越深,架构越来越复杂,解决反向传播时梯度消失的方法也越来越巧妙。新年有假期,就好好总结一波CNN的各种经典架构吧,领略一下CNN的发展历程中各路大神之间的智慧碰撞之美。
小草AI
2019/05/29
8890
推荐阅读
相关推荐
手动计算深度学习模型中的参数数量
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档