conv2D函数如何更改输入层

时间:2019-10-01 09:04:25

标签: tensorflow size tensor resnet

在使用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
)

先谢谢了

2 个答案:

答案 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。