为什么 conv2d 层需要 ndim=4 输入?

Why is the conv2d layer requiring a ndim=4 input?

我想在我的网络中使用 2d 卷积层,作为输入我想给它图片。所以我有一批图片,这意味着 ndim=3 矩阵, 例如:

我输入的维度:

[10, 6, 7]

10 值是 batch size,另外两个值是图像大小。那么 conv 2d 层需要的第四维是什么?

这里是有趣的代码行:

self.state_size = [6, 7]

self.inputs_    = tf.placeholder(tf.float32, shape=[None, *self.state_size],  name="inputs_")


# Conv2D layer 1
self.conv1   = tf.layers.conv2d(inputs = self.inputs_,
                                filters = 4,
                                kernel_size = [4, 4],
                                strides = [1, 1],
                      kernel_initializer=tf.contrib.layers.xavier_initializer_conv2d())

这是我得到的错误:

Input 0 of layer conv2d_1 is incompatible with the layer: expected ndim=4, found ndim=3. Full shape received: [None, 6, 7]*

这里是关于卷积二维层的输入张量维度的简短解释。

 tensor_shape = (BATCH_SIZE, WIDTH, HEIGHT, CHANNELS).

第四个维度是通道(颜色)维度。

长答案是: 卷积 2D 层期望输入具有四个维度。 tensorflow 中有两种图像张量格式。
1。 channels_last(NHWC) - 尺寸按 (BATCH_SIZE, HEIGHT, WIDTH, CHANNEL).
排序 2。 channels_first(NCHW) - 维度按 BATCH_SIZE, CHANNELS, HEIGHT, WIDTH).

排序

批量大小维度

在 tensorflow 中(可能在其他机器学习库中)一旦你定义了你的模型,你有两个选项可以将数据提供给你的模型。第一个选项是一次输入一个数据点。第二个选项是一次向模型提供 N 个数据点。这是可能的,因为 批量大小维度

宽度尺寸

此尺寸指定图像的宽度。

身高尺寸

此尺寸指定图像的高度

渠道维度

RGB图像中的通道维度是RGB值维度。

编辑:

要指定输入图像的数据格式,张量 conv2d 层接受 data_format argument.The 默认值为“channels_last”。您可以找到更多 here。 以下代码显示了 channals_last 数据格式

的输入
inputs_ = tf.placeholder(tf.float32, [None, 32, 32, 3])

conv1 = tf.layers.conv2d(inputs_,32, (3, 3), data_format="channals_last")  

频道优先

conv1 = tf.layers.conv2d(inputs_,32, (3, 3), data_format="channels_first")