keras图层教程和示例

时间:2017-05-16 21:59:12

标签: python neural-network keras conv-neural-network keras-layer

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

1 个答案:

答案 0 :(得分:2)

Keras documentation会显示每个图层所需的所有input_shape

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

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

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

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

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

keras一般显示的形状:

这些将以None作为第一维。这表示您用于培训的批次的大小。批处理是包含许多数据样本的数组。由于批量大小是免费的,并且仅在您实际传递批次进行培训时才定义,因此Keras将其显示为None

在该Dense图层中,Keras会将(None, 10)显示为输入形状。

数组形状:

在培训,预测等过程中,当您实际拥有批次及其大小时,keras将在错误消息中显示批次的实际形状,即(BatchSize,...其他尺寸......)。

对于我们的Dense(10),假设您通过了一个包含300个样本的批处理进行培训,那么keras会显示包含形状(300,10)的错误消息

张量形状:

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

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

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

现在你知道了这些差异,我将继续使用下面None的表单。在定义input_shape时,请记住忽略None部分。

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

输出类似:(None, NumberOfNeuronsInThisLayer)

Conv1D

只有一个维度的卷积层。使用卷积时,想法是有渠道。

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

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

  • 首先使用频道:(None, channels, length)
  • 频道上传:(None, length, channels)

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

  

默认设置为“channels_last”,您可以在每个图层或keras.json文件中定义它

Conv2D:

与Conv1D相同的想法,使用频道,首先是频道,最后是频道。但现在,它有两个维度,如图像,每个通道与红色,绿色,蓝色相比。

  • 首先使用频道:(None, channels, pixelsX, pixelsY)
  • 频道上传:(None, pixelsX, pixelsY, channels)

在“channels_firts / channels_last”设置之后的输出类似于(None, NumberOfFilters, resultPixelsX, resultPixelsY)的channels_first。

经常性层次:

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

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

由于LSTM用于序列,因此您可以按时间步骤分离序列。输入维度只是具有多维值的可能性。

输出也会根据所选的选项而有所不同。它可能是(None, Timesteps, NumberOfCellsInTheLeyr)或仅(None, NumberOfCells),具体取决于您是否选择返回序列。