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

Xey*_*yes 5 python layer neural-network conv-neural-network tensorflow

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

我输入的维度:

[10, 6, 7]
Run Code Online (Sandbox Code Playgroud)

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

这是有趣的代码行:

[10, 6, 7]
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误:

Input 0 of layer conv2d_1 is incompatible with the layer: expected ndim=4, found ndim=3. Full shape received: [None, 6, 7]*
Run Code Online (Sandbox Code Playgroud)

Mit*_*iku 6

以下是有关卷积二维层输入张量尺寸的简短说明。

 tensor_shape = (BATCH_SIZE, WIDTH, HEIGHT, CHANNELS).
Run Code Online (Sandbox Code Playgroud)

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

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

批量尺寸

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

宽度尺寸

该尺寸指定图像的宽度。

高度尺寸

该尺寸指定图像的高度

通道尺寸

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

编辑:

要指定输入图像张量的数据格式,Conv2d 层接受 data_format 参数。默认值为“channels_last”。您可以在这里找到更多信息。以下代码显示了 channals_last 数据格式的输入

 tensor_shape = (BATCH_SIZE, WIDTH, HEIGHT, CHANNELS).
Run Code Online (Sandbox Code Playgroud)

首先针对渠道

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

conv1 = tf.layers.conv2d(inputs_,32, (3, 3), data_format="channals_last")  
Run Code Online (Sandbox Code Playgroud)