权重尺寸的计算,张量(图像)的尺寸,以及卷积神经网络(CNN)中层参数的计算,以及FC的维度卷积替代方案 您所在的位置:网站首页 全连接层数量计算公式 权重尺寸的计算,张量(图像)的尺寸,以及卷积神经网络(CNN)中层参数的计算,以及FC的维度卷积替代方案

权重尺寸的计算,张量(图像)的尺寸,以及卷积神经网络(CNN)中层参数的计算,以及FC的维度卷积替代方案

2024-06-07 17:08| 来源: 网络整理| 查看: 265

文章目录 背景:权重层的概念Input 尺寸大小卷积层(Conv Layer)的输出张量(图像)的大小池化层(MaxPool Layer)的输出张量(图像)的大小全连接层(Fully Connected Layer)的输出张量(图像)的大小对 1 * 1 卷积可以减少参数进行举例 : Conv Layer参数数量MaxPool Layer参数数量Fully Connected (FC) Layer参数数量权重的权值共享机制参考:

背景:

设计某网络,

cfg = { 'A' : [64, 64, 'M'],} def make_layers(cfg): layers = [] input_channel = 3 for l in cfg: if l == 'M': layers += [nn.MaxPool2d(kernel_size=2, stride=2)] continue layers += [nn.Conv2d(input_channel, l, kernel_size=3, padding=1)] layers += [nn.ReLU(inplace=True)] input_channel = l return nn.Sequential(*layers)

在这里插入图片描述

这里面对于W的值(weight权重)的尺寸计算引起了兴趣:

权重层的概念 卷积层和全连接层具有权重系数,因此也被称为权重层;池化层不涉及权重,因此不属于权重层,在计算参数量时,不被计数。

其中, 卷 积 层 权 重 的 大 小 = 卷 积 核 的 s i z e × 卷 积 核 的 n u m b e r 卷积层权重的大小=卷积核的size × 卷积核的number 卷积层权重的大小=卷积核的size×卷积核的number (如:size为3x3x3,number 128,则权重为3x3x3x128); 卷积核的深度必须和输入张量的深度相同

全连接层的权重为:前一层节点数×本层的节点数。

以上都是不考虑偏置的前提下。

https://zhuanlan.zhihu.com/p/29119239

在这里插入图片描述

Input 尺寸大小

Input: 一张图像的尺寸是 1 ∗ 3 ∗ 32 ∗ 32 1*3*32*32 1∗3∗32∗32

卷积层(Conv Layer)的输出张量(图像)的大小

定义如下:

O=输出图像的尺寸。

I=输入图像的尺寸。

K=卷积层的核尺寸

N=核数量

S=移动步长

P =填充数

输出图像尺寸的计算公式如下:

O = ( I − K + 2 P ) / S + 1 O =( I-K+2P)/S +1 O=(I−K+2P)/S+1

输出图像的通道数等于核数量N

示例: 输入图像的尺寸为 1 ∗ 3 ∗ 32 ∗ 32 1*3*32*32 1∗3∗32∗32.第一个卷积层有 N = 64 N=64 N=64个尺寸为 K = 3 ∗ 3 ∗ 3 K=3*3*3 K=3∗3∗3的核。步长为 S = 1 S=1 S=1,填充为 P = 1 P=1 P=1.

输出尺寸: 单通道尺寸: O = ( 32 − 3 + 2 ∗ 1 ) / 1 + 1 = 32 O = (32-3+2*1)/1 +1 =32 O=(32−3+2∗1)/1+1=32 通道: N = 64 N=64 N=64 输出的图像为 64 ∗ 32 ∗ 32 64*32*32 64∗32∗32

池化层(MaxPool Layer)的输出张量(图像)的大小

定义如下:

O=输出图像的尺寸。 I=输入图像的尺寸。 S=移动步长 P S P_S PS​=池化层尺寸

输出图像尺寸的计算公式如下: O = ( I − P s ) / S + 1 O = (I - P_s)/S +1 O=(I−Ps​)/S+1

不同于卷积层,池化层的输出通道数不改变。

示例:每1层卷积层后的池化层的池化层尺寸为22,步长为2。根据前面卷积层的输出为6432*32。池化层的输出图像尺寸如下:

O = ( 32 − 2 ) / 2 + 1 = 16 O=(32-2)/2+1=16 O=(32−2)/2+1=16 输出尺寸为 64 ∗ 16 ∗ 16 64*16*16 64∗16∗16

全连接层(Fully Connected Layer)的输出张量(图像)的大小

全连接层输出向量长度等于神经元的数量。

全连接层在整个卷积神经网络中起到“分类器”的作用。

如果说卷积层、池化层和激活函数层等操作是将原始数据映射到隐层特征空间的话,全连接层则起到将学到的“分布式特征表示”映射到样本标记空间的作用。

在实际使用中,全连接层可由卷积操作实现:

对前层是全连接的全连接层可以转化为卷积核为 1 ∗ 1 1*1 1∗1的卷积;前层是卷积层的全连接层可以转化为卷积核为 h ∗ w h*w h∗w的全局卷积,h和w分别为前层卷积结果的高和宽。

目前由于全连接层参数冗余(仅全连接层参数就可占整个网络参数80%左右),近期一些性能优异的网络模型如ResNet和GoogLeNet等均用全局平均池化(global average pooling,GAP)取代FC来融合学到的深度特征,最后仍用softmax等损失函数作为网络目标函数来指导学习过程。

需要指出的是,用GAP替代FC的网络通常有较好的预测性能。思想就是:用 feature map 直接表示属于某个类的 confidence map,比如有10个类,就在最后输出10个 feature map,每个feature map中的值加起来求平均值,然后把得到的这些平均值直接作为属于某个类别的 confidence value,再输入softmax中分类, 更重要的是实验效果并不比用 FC 差。 对 1 * 1 卷积可以减少参数进行举例 :

如果: input feature map是 7 ∗ 7 ∗ 512 7*7*512 7∗7∗512 output feature map是 1 ∗ 1 ∗ 4096 1*1*4096 1∗1∗4096

如果使用全连接,那么需要的权值参数数目(忽略偏置参数,下同)为 7 ∗ 7 ∗ 512 ∗ 4096 7*7*512*4096 7∗7∗512∗4096

如果使用 7 ∗ 7 7*7 7∗7卷积核,需要的权值参数数目为 7 ∗ 7 ∗ 512 ∗ 4096 7*7*512*4096 7∗7∗512∗4096

如果使用 1 ∗ 1 1*1 1∗1卷积核,且权值共享,需要的权值参数数目为11512*4096

但得到的output feature map为774096需要再做一个global average pooling才能变为114096此时确实可以减少权植参数数目。

https://blog.csdn.net/qq_34807908/article/details/81736336

Conv Layer参数数量

在CNN中,每层有两种类型的参数:weights 和biases.总参数数量为所有weights和biases的总和.

定义如下:

W C = 卷 积 层 的 w e i g h t s 数 量 W_C=卷积层的weights数量 WC​=卷积层的weights数量

B C = 卷 积 层 的 b i a s e s 数 量 B_C=卷积层的biases数量 BC​=卷积层的biases数量

P C = 所 有 参 数 的 数 量 P_C=所有参数的数量 PC​=所有参数的数量

K=核尺寸

N=核数量

C =输入图像通道数

卷积层中,核的深度等于输入图像的通道数.于是每个核有 K ∗ K K*K K∗K个参数.并且有 N N N个核.由此得出以下的公式.

W C = K 2 × C × N W_C=K^2×C×N WC​=K2×C×N

B C = N B_C=N BC​=N

P C = W C + B C P_C=W_C + B_C PC​=WC​+BC​

MaxPool Layer参数数量

没有与MaxPool layer相关的参数量.尺寸,步长和填充数都是超参数.

Fully Connected (FC) Layer参数数量

在CNN中有两种类型的全连接层.

第1种是连接到最后1个卷积层 Conv—>FC另外1种的FC层是连接到其他的FC层 FC–>FC

两种情况我们分开讨论.

类型1:连接到Conv Layer (Conv—>FC)

定义如下:

W c f = w e i g h t s 的 数 量 W_{cf}= weights的数量 Wcf​=weights的数量

B c f = b i a s e s 的 数 量 B_{cf}= biases的数量 Bcf​=biases的数量 P v f 总 参 数 的 数 量 P_{vf}总参数的数量 Pvf​总参数的数量 O= 前卷积层的输出图像的尺寸

N = 前卷积层的核数量

F = 全连接层的神经元数量

W c f = O 2 × N × F W_{cf}= O^2×N×F Wcf​=O2×N×F B c f = F B_{cf}=F Bcf​=F P v f = W c f + B c f P_{vf}=W_{cf} +B_{cf} Pvf​=Wcf​+Bcf​

参数数目远大于所有Conv Layer的参数和.

类型2:连接到FC Layer ( FC–>FC)

定义如下:

W f f = w e i g h t s 的 数 量 W_{ff}= weights的数量 Wff​=weights的数量

B f f = b i a s e s 的 数 量 B_{ff}= biases的数量 Bff​=biases的数量

P f f = 总 参 数 的 数 量 P_{ff}= 总参数的数量 Pff​=总参数的数量

F= 当前FC层的神经元数量

F − 1 = 前 F C 层 的 神 经 元 数 量 F_{-1} = 前FC层的神经元数量 F−1​=前FC层的神经元数量

W f f = F − 1 × F W_{ff}= F_{-1} ×F Wff​=F−1​×F

B f f = F B_{ff}= F Bff​=F

P f f = W f f + B f f P_{ff}= W_{ff}+B_{ff} Pff​=Wff​+Bff​

权重的权值共享机制

在这里插入图片描述https://blog.csdn.net/qq_40962368/article/details/82864606 在下图中,如果不使用权值共享,则特征图由10个32321的特征图组成,每个特征图上有1024个神经元,每个神经元对应输入图像上的一块553的区域,所以一个神经元和输入图像的这块区域有75个连接,即75个权值参数,则共有75102410=768000个权值参数,这对于参数的调整和传递非常不利,因此卷积神经网络引入权值共享原则,一个特征图上每个神经元对应的75个权值参数被每个神经元共享,这里的共享其实就是指的每个神经元中75个权值参数采用对应相同的权值,权值共享时,只是在每一个filter上的每一个channel中是共享的,这样便只需75*10=750个权值参数,而每个特征图的阈值也共享,即需要10个阈值,则总共需要750+10=760个参数。

参考:

https://www.cnblogs.com/jfdwd/p/10964031.html



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有