52

理解卷积神经网络中的输入与输出形状 | 视觉入门

 4 years ago
source link: https://www.tuicool.com/articles/2iQrAfZ
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
QVvQNjb.png!web

译者|VK

来源|Towards Data Science

即使我们从理论上理解了卷积神经网络,在实际进行将数据拟合到网络时,很多人仍然对其网络的输入和输出形状(shape)感到困惑。 本文章将帮助你理解卷积神经网络的输入和输出形状。

让我们看看一个例子。 CNN的输入数据如下图所示。 我们假设我们的数据是图像的集合。

NruiIru.png!web

输入的形状

你始终必须将4D数组作为CNN的输入。 因此,输入数据的形状为(batch_size,height,width,depth),其中第一维表示图像的batch大小,其他三个维表示图像的各个属性,即高度,宽度和深度。 深度就是色彩通道的数量。 例如,RGB图像的深度为3,而灰度图像的深度为1。

输出形状

CNN的输出也是4D数组。 其中batch大小将与输入batch大小相同,但是图像的其他3个尺寸可能会根据滤波器(filter) ,内核大小(kernel size)和填充值(padding)而变化。

让我们看一下下面的代码片段。

muiiQz3.png!web

不要在这里被 input_shape 参数欺骗,以为输入形状是3D,但是在进行训练时必须传递一个4D数组,该数据的形状应该是(batch_size,10,10,3)。 由于input_shape参数中没有batch值,因此在拟合数据时可以采用任何batch大小。

而且正如你所见,输出的形状为(None,10,10,64)。 第一个维度表示batch大小,目前为"None"。 因为网络事先不知道batch大小。 拟合数据后,将使用拟合数据时给出的batch大小来代替"None"。

让我们看看另一个代码片段。

7n67bmY.png!web

在这里,我将input_shape参数替换为batch_input_shape。 顾名思义,此参数将事先提供batch大小,并且在拟合数据时你无法提供任何其他batch大小。 例如,在本例你必须用batch大小为16的数据来拟合网络。

你可以从上图看到输出形状的batch大小是16而不是None。

在卷积层上附加全连接(Dense)层

我们可以简单地在另一个卷积层的顶部添加一个卷积层,因为卷积的输出维度数与输入维度数相同。

通常,我们在卷积层的顶部添加Dense层以对图像进行分类。 但是,Dense层需要形状为(batch_size,units)的数据。 卷积层的输出是4D的数组。 因此,我们必须将从卷积层接收的输出的尺寸更改为2D数组。

nIZJNrJ.png!web

我们可以通过在卷积层的顶部插入一个Flatten层来做到这一点。 Flatten层将3维图像变形成一个维。 现在我们得到一个2D形状的数组(batch_size,squashed_size),这是Dense层需要的输入形状。

  • 你始终必须将形状为(batch_size, height, width, depth)的4D数组输入CNN。

  • CNN的输出数据也是形状(batch_size, height, width, depth)的4D数组。

  • 要在CNN层的顶部添加一个Dense层,我们必须使用keras的Flatten层将CNN的4D输出更改为2D。

你也许还想

欢迎扫码关注磐创AI

qmaUzqz.png!web

J3aYnyj.jpg!web

点击下方  |   |  了解更多


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK