Keras 文档 https://keras.io/layers/core/向您展示所有input_shape
每层都期望。
在 Keras 中,您将看到以下形式的输入形状:
-
input_shape
由用户分层定义
- 摘要和其他中显示的形状
- 阵列形状
- 张量形状
输入由用户定义的形状和传递给的形状Reshape
layers:
定义的输入形状将忽略批量大小,它只需要单个数据样本的大小。
例如,当您定义一个Dense
层,你声明它的input_shape
as (10,)
,这意味着它需要十个数值作为输入。
keras 一般显示的形状:
这些将有一个None
作为第一维度。这象征着您用于训练的批次的大小。批次是包含许多数据样本的数组。由于批量大小是自由的,并且仅在您实际传递批量进行训练时才定义,因此 Keras 将其显示为None
.
在该密集层中,Keras 会显示(None, 10)
作为输入形状。
数组形状:
在训练、预测等过程中,当您实际拥有一个批次及其大小时,keras 将在错误消息中显示该批次的实际形状,即(BatchSize,...其他维度...)。
For our Dense(10)
,假设你通过了一个包含 300 个样本的批次进行训练,那么 keras 将显示包含 shape 的错误消息(300,10)
张量形状:
当您创建时,张量形状将出现在更高级的用法中Lambda
层,或自定义层,以及创建自定义损失函数时。
张量形状将遵循将批量大小作为第一维度的想法。因此,请记住,每当您直接使用张量时,它们都会具有形状(BatchSize, ...other dimensions...)
.
一些最常见的层及其输入形状:
现在您知道了这些差异,我将继续使用该表格None
以下。定义时记得忽略 None 部分input_shape
.
Dense
密集层通常采用单个值,而不是数组作为输入,因此,其输入形状为:(None, AnyNumberOfInputValues)
输出将类似:(None, NumberOfNeuronsInThisLayer)
Conv1D
只有一维的卷积层。使用卷积时,其想法是拥有通道。
想象一个声音文件,它包含两个通道,左通道和右通道。每个通道都是与波形相对应的值数组。
Keras 为您提供了以下选择:channels_first
or channels_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 one http://philipperemy.github.io/keras-stateful-lstm/ and this too http://machinelearningmastery.com/understanding-stateful-lstm-recurrent-neural-networks-python-keras/.
通常,输入形状是(None, TimeSteps, InputDimension)
由于 LSTM 是针对序列的,因此您可以按时间步长来分离序列。输入维度只是具有多维值的可能性。
输出也根据所选选项的不同而变化。可能是(None, Timesteps, NumberOfCellsInTheLeyr)
要不就(None, NumberOfCells)
,取决于您是否选择返回序列。