在使用Tensorflow编码的ResNet32网络中,输入大小为32 x 32 x 3, 层是32 x 32 x32。为什么使用32通道?
tf.contrib.layers.conv2d(
inputs,
**num_outputs**, /// how to determine the number of channel to be used in my layer?
kernel_size,
stride=1,
padding='SAME',
data_format=None,
rate=1,
activation_fn=tf.nn.relu,
normalizer_fn=None,
normalizer_params=None,
weights_initializer=initializers.xavier_initializer(),
weights_regularizer=None,
biases_initializer=tf.zeros_initializer(),
biases_regularizer=None,
reuse=None,
variables_collections=None,
outputs_collections=None,
trainable=True,
scope=None
)
先谢谢了
答案 0 :(得分:0)
输入中的3
是表示输入图像是RGB(彩色图像)(也称为彩色通道)的数字,如果它是黑白图像,则它应该是{{1 }}(单色图像)。
此输出中的1
代表神经元数量\特征数量\正在使用的通道数,因此基本上您是用32通道的3种颜色表示图像。
这有助于学习图像的更复杂和不同的特征集。例如,它可以使网络学习到更好的边缘。
答案 1 :(得分:0)
通过分配stride=2
,您可以减小输入张量的空间大小,以便输出张量的高度和宽度成为该输入张量的一半。这意味着,如果您的输入张量形状为(batch, 32, 32, 3)
(3表示RGB通道)到具有32个具有stride=2
的内核/过滤器的卷积层,则输出张量的形状将为(batch, 16, 16, 32)
。另外,池化也被广泛用于减小输出张量的大小。
通过堆叠conv层学习层次表示的能力被认为是CNN成功的关键。在CNN中,随着深度的增加,张量的空间大小减小,而通道数增加,这有助于处理复杂目标对象的外观变化。空间大小的这种减少极大地减少了所需的算术运算和计算时间,其目的是提取有助于最终输出/决策的突出特征。然而,找到滤波器/内核/输出通道的最佳数量是很费时的,因此,人们遵循经过验证的较早的体系结构,例如。 VGG。