定义
参数量(Params)
参数量是指模型训练中需要训练的参数总数。用来衡量模型的大小(计算空间复杂度)。
计算量(FLOPs)
浮点运算次数,理解为计算量(计算时间复杂度),可以用来衡量算法的复杂度,常用做神经网络模型速度的间接衡量标准(虽然最近已经有文章证明靠FLOPs间接标准评价模型的速度是不靠谱的,因为模型的计算速度还跟内存的吞吐等因素相关,但此标准依然广泛用作模型速度的参考评价标准)。在计算 FLOPS时,我们通常将加,减,乘,除,求幕,平方根等作为单个FLOP进行计数。
公式表示
卷积层
输入维度:
W
i
n
∗
H
i
n
∗
C
i
n
W_{in}*H_{in}*C_{in}
Win∗Hin∗Cin
输出维度:
W
o
u
t
∗
H
o
u
t
∗
C
o
u
t
W_{out}*H_{out}*C_{out}
Wout∗Hout∗Cout
卷积核:
k
w
∗
k
h
k_w*k_h
kw∗kh
参数量:
k
w
∗
k
h
∗
C
i
n
∗
C
o
u
t
k_w*k_h * C_{in} * C_{out}
kw∗kh∗Cin∗Cout
参数量(包括偏置bias):
(
k
w
∗
k
h
∗
C
i
n
+
1
)
∗
C
o
u
t
(k_w*k_h * C_{in} + 1) * C_{out}
(kw∗kh∗Cin+1)∗Cout
计算量:
k
w
∗
k
h
∗
C
i
n
∗
W
o
u
t
∗
H
o
u
t
∗
C
o
u
t
k_w*k_h* C_{in} * W_{out} * H_{out} * C_{out}
kw∗kh∗Cin∗Wout∗Hout∗Cout
计算量(考虑加法和偏置):
[
(
k
w
∗
k
h
∗
C
i
n
)
+
(
k
w
∗
k
h
∗
C
i
n
−
1
)
+
1
]
∗
W
o
u
t
∗
H
o
u
t
∗
C
o
u
t
[(k_w*k_h* C_{in}) +\boldsymbol{(k_w*k_h* C_{in}-1)+1}]* W_{out} * H_{out} * C_{out}
[(kw∗kh∗Cin)+(kw∗kh∗Cin−1)+1]∗Wout∗Hout∗Cout
PS: 其中
k
w
∗
k
h
∗
C
i
n
k_{w} * k_{h}* C_{i n}
kw∗kh∗Cin表示乘法计算量,
k
w
∗
k
h
∗
C
i
n
−
1
k_{w} * k_{h}* C_{i n}-1
kw∗kh∗Cin−1表示加法计算量,+1表示偏置
池化层和激活层
激活、池化层仅仅对原来的矩阵做了一个变换,不会引进新的参数,这些其他层类型肯定需要时间,但它们不使用点积,并且成为网络总计算复杂度的舍入误差。
全连接层
全连接层设置下一层神经元的个数,并使用仿射变换
y
i
=
W
⃗
i
⋅
x
⃗
+
b
i
y_i = \vec W_i \cdot \vec x+b_i
yi=Wi⋅x+bi得到下一层神经元的值,因为两层之间的神经元会全部连接起来,所及叫做全连接,如图所示。
输入维度:
d
i
n
d_{in}
din
输出维度:
d
o
u
t
d_{out}
dout
参数量:
d
i
n
∗
d
o
u
t
d_{in}*d_{out}
din∗dout
参数量(包括偏置bias):
(
d
i
n
+
1
)
∗
d
o
u
t
(d_{in}+1)*d_{out}
(din+1)∗dout
计算量:
d
i
n
∗
d
o
u
t
d_{in}*d_{out}
din∗dout
计算量(考虑加法和偏置):
[
d
i
n
+
(
d
i
n
−
1
)
+
1
]
∗
d
o
u
t
[d_{in}+(d_{in}-1)+1]*d_{out}
[din+(din−1)+1]∗dout
PS:
d
i
n
−
1
d_{in} -1
din−1表示加法运算量(权重矩阵与输入/上一层值的矩阵向量相乘所需的加法运算),+1表示偏置,输入是多维的直接相乘即可。
BN层
BN层引入的参数和输入层神经元个数相关,假设输入神经元个数为n,则该层引进的参数为2n,不过但部分情况下可以完全忽略Batch Normalization层的影响
总结: 对于神经网络模型,减少网络参数应主要针对全连接层;而进行计算量优化时,重点应放在卷积层。
补充: 在笔试时,有时不会给出输出特征图的大小,需要自己计算,特征图大小的计算如下:
卷积层:
o
u
t
s
i
z
e
=
I
n
P
u
t
S
i
z
e
−
K
e
r
n
e
l
S
i
z
e
+
2
∗
P
a
d
d
i
n
g
S
t
r
i
d
e
+
1
\LARGE {out_{size} = \frac {InPutSize-KernelSize + 2*Padding} {Stride}+1}
outsize=StrideInPutSize−KernelSize+2∗Padding+1
池化层:
o
u
t
s
i
z
e
=
I
n
P
u
t
S
i
z
e
−
K
e
r
n
e
l
S
i
z
e
S
t
r
i
d
e
+
1
\LARGE {out_{size} = \frac {InPutSize-KernelSize } {Stride}+1}
outsize=StrideInPutSize−KernelSize+1
PS: 计算结果不是整数时,卷积层上取整,池化层下取整。
版权归原作者 枉费红笺 所有, 如有侵权,请联系我们删除。