据我所知,只有输出大小,内核大小,输入通道数,输出通道数和批处理大小会影响卷积层中FLOP的数量。
但是有人告诉我填充和膨胀也会影响FLOP。
是真的吗?如果是真的,为什么?
答案 0 :(得分:0)
填充直接更改输入大小,因此内核必须与更大数量的输入值进行卷积,从而导致更多的FLOP。
扩张更有趣:增加操作数不会改变。但是,卷积核变得更大,并且更少的运算适合输入。因此,FLOP的数量减少了。从这个意义上讲,膨胀是填充的对应物。
您可以使用Netscope CNN analyzer了解填充和膨胀参数如何改变MACC的数量(多次累加= 2FLOP)。
例如,默认配置:
layer {
name: "data"
type: "Input"
top: "data"
input_param {
shape: { dim: 1 dim: 3 dim: 227 dim: 227 }
}
}
layer {
name: "conv1"
type: "Convolution"
bottom: "data"
top: "conv1"
convolution_param {
num_output: 96
kernel_size: 3
}
}
估计有131.22M个MACC。使用pad: 1
(“相同”填充)为133.56M。仅使用dilation: 2
时,它变为128.9M。但是,如果您通过填充来补偿膨胀,则:
layer {
name: "data"
type: "Input"
top: "data"
input_param {
shape: { dim: 1 dim: 3 dim: 227 dim: 227 }
}
}
layer {
name: "conv1"
type: "Convolution"
bottom: "data"
top: "conv1"
convolution_param {
num_output: 96
kernel_size: 3
dilation: 2
pad: 1
}
}
又是131.22M。