keras 图层教程和示例

keras layers tutorial and samples

我正在尝试编码和学习不同的神经网络模型。我对输入维度有很多复杂的了解。我正在寻找一些显示图层差异以及如何为每个图层设置输入和输出的教程。

Keras documentation 显示每一层所期望的所有 input_shape

在 Keras 中,您会看到以下形式的输入形状:

  • input_shape 由用户在图层中定义
  • 摘要和其他中显示的形状
  • 数组形状
  • 张量形状

用户定义的输入形状和传递给 Reshape 层的形状:

定义的输入形状将忽略批量大小,它只需要单个数据样本的大小。

例如,当您定义一个 Dense 层时,您将其 input_shape 声明为 (10,),这意味着它需要十个数值作为输入。

keras一般显示的形状:

这些将有一个 None 作为第一个维度。这象征着您用于训练的批次的大小。批次是一个包含许多数据样本的数组。由于批次大小是自由的,并且仅在您实际通过批次进行训练时才定义,因此 Keras 将其显示为 None.

在那个密集层中,Keras 将显示 (None, 10) 作为输入形状。

数组形状:

在训练、预测等过程中,当您实际拥有一个批次及其大小时,keras 将在错误消息中显示批次的实际形状,即 (BatchSize,...other dimensions... ).

对于我们的Dense(10),假设你通过了一个有300个样本的batch进行训练,那么keras会显示包含形状(300,10)

的错误信息

张量形状:

在创建 Lambda 层或自定义层以及创建自定义损失函数时,张量形状将出现在更高级的用法中。

张量形状将遵循将批量大小作为第一维的想法。所以,请记住,无论何时直接使用张量,它们的形状都是 (BatchSize, ...other dimensions...).

一些最常见的图层及其输入形状:

现在您知道了这些差异,我将继续使用下面带有 None 的表格。记得在定义 input_shape.

时忽略 None 部分

密集

dense 层通常采用单个值而不是数组作为输入,因此其输入形状为:(None, AnyNumberOfInputValues)

输出类似:(None, NumberOfNeuronsInThisLayer)

Conv1D

只有一维的卷积层。使用卷积时,想法是要有通道。

想象一个声音文件,它包含左右两个声道。每个通道都是与波形对应的值数组。

Keras 为您提供 channels_firstchannels_last 的选项,这会改变层的输入和输出:

  • 频道优先:(None, channels, length)
  • 频道最后:(None, length, channels)

输出也遵循“channels_first/channels_last”设置,它是这样的:(None, NumberOfFilters, ResultingLength) - 通道优先

The default setting is "channels_last", and you can define it in each layer or in the keras.json file

Conv2D:

和Conv1D一样的思路,使用channels,要么是channels first,要么是channels last。但现在,它有两个维度,就像图像一样,每个通道都与红色、绿色、蓝色相比。

  • 首先是频道:(None, channels, pixelsX, pixelsY)
  • 频道最后:(None, pixelsX, pixelsY, channels)

按照“channels_firts/channels_last”设置的输出类似于 (None, NumberOfFilters, resultPixelsX, resultPixelsY) for channels_first。

循环层:

Lstm 层很难理解。他们有一些使用不同输入形状的选项,并且有一些有趣的教程,例如 this one and this too.

通常,输入形状为(None, TimeSteps, InputDimension)

由于 LSTM 是针对序列的,因此您可以按时间步长将序列分开。输入维度只是具有多维值的可能性。

输出也因所选选项而异。它可能是 (None, Timesteps, NumberOfCellsInTheLeyr) 或只是 (None, NumberOfCells),具体取决于您是否选择 return 序列。