【CNN】卷积神经网络CNN输出特征图计算+参数量计算+计算量计算

目录

  • 一、输出特征图大小计算
    • 1. 一维(通道)输入数据
      • 1.1 步长stride为1,padding为0
      • 1.2 增加步长stride,padding不动
      • 1.3 增加步长stride,同时还增加padding
    • 2. n维(通道)输入数据
  • 二、卷积网络参数量计算
      • 2.1 权重weights的参数量:
      • 2.2 偏差bias的参数量:
      • 2.3 总参数量就为:
  • 三、卷积网络计算量计算

一、输出特征图大小计算

1. 一维(通道)输入数据

假设输入图像的宽高为input,卷积核宽高为kernel,步长stride,填充padding(单边填充值),输出特征图的宽高为output

1.1 步长stride为1,padding为0

o u t p u t = i n p u t − k e r n e l + 1 output = input-kernel+1 output=inputkernel+1

1.2 增加步长stride,padding不动

o u t p u t = f l o o r ( i n p u t − k e r n e l s t r i d e ) + 1 output=floor(\frac{input-kernel}{stride})+1 output=floor(strideinputkernel)+1

floor代表向下取整,例如 f l o o r ( 6 − 3 2 ) + 1 = 2 floor(\frac{6-3}{2})+1=2 floor(263)+1=2

1.3 增加步长stride,同时还增加padding

o u t p u t = f l o o r ( i n p u t − k e r n e l + 2 × p a d d i n g s t r i d e ) + 1 output=floor(\frac{input-kernel+2 \times padding}{stride})+1 output=floor(strideinputkernel+2×padding)+1

2. n维(通道)输入数据

假设输入图像通道数为 n i n p u t n_{input} ninput,则卷积核通道数同样也应该为 n i n p u t n_{input} ninput,卷积核个数为 n k e r n e l n_{kernel} nkernel,输出特征图的维度(通道数)为 n o u t p u t n_{output} noutput,其余条件同上,则有

o u t p u t = f l o o r ( i n p u t − k e r n e l + 2 × p a d d i n g s t r i d e ) + 1 output=floor(\frac{input-kernel+2 \times padding}{stride})+1 output=floor(strideinputkernel+2×padding)+1

n o u t p u t = m n_{output} = m noutput=m

一句话总结:卷积核的通道数应等于输入图像通道数,输出图像通道数应等于卷积核的个数,而跟输入图像的通道数无关。

二、卷积网络参数量计算

参数量的大小决定了网络的复杂度,参数量越小则网络复杂度越低。

2.1 权重weights的参数量:

w e i g h t s = k e r n e l × k e r n e l × i n p u t × n k e r n e l weights=kernel \times kernel \times input \times n_{kernel} weights=kernel×kernel×input×nkernel

2.2 偏差bias的参数量:

b i a s = n k e r n e l bias = n_{kernel} bias=nkernel

2.3 总参数量就为:

w e i g h t s + b i a s = k e r n e l 2 × i n p u t × n k e r n e l + n k e r n e l weights+bias=kernel^{2} \times input \times n_{kernel}+n_{kernel} weights+bias=kernel2×input×nkernel+nkernel

三、卷积网络计算量计算

单次卷积,是单个卷积核的 k e r n e l ∗ k e r n e l ∗ n k e r n e l kernel*kernel*n_{kernel} kernelkernelnkernel个元素与输入图像对应位置相乘,则有 k e r n e l ∗ k e r n e l ∗ n k e r n e l kernel*kernel*n_{kernel} kernelkernelnkernel次乘法操作,相乘结束后还需要对 k e r n e l × k e r n e l × n k e r n e l kernel\times kernel\times n_{kernel} kernel×kernel×nkernel个数值进行累加,则一共有 k e r n e l ∗ k e r n e l ∗ n k e r n e l − 1 kernel*kernel*n_{kernel}-1 kernelkernelnkernel1次加法,因此,一次卷积操作所需要的乘加计算量为:

2 × k e r n e l × k e r n e l × n k e r n e l − 1 2\times kernel\times kernel\times n_{kernel} - 1 2×kernel×kernel×nkernel1

由于输出特征图的大小为 o u t p u t × o u t p u t output \times output output×output,那么对全图进行卷积操作,则需要的乘加计算量为:

( 2 × k e r n e l 2 × n k e r n e l − 1 ) ∗ o u t p u t 2 (2\times kernel^{2} \times n_{kernel} - 1)*output^{2} (2×kernel2×nkernel1)output2

若卷积核不止一个,即输出特征图的通道数 n o u t p u t ≠ 1 n_{output}\neq 1 noutput=1,则需要的总乘加计算量为:

( 2 × k e r n e l 2 × n k e r n e l − 1 ) × o u t p u t 2 × n o u t p u t (2\times kernel^{2} \times n_{kernel} - 1)\times output^{2}\times n_{output} (2×kernel2×nkernel1)×output2×noutput

你可能感兴趣的:(CNN,cnn,深度学习,神经网络)