【发布时间】:2017-10-16 04:13:04
【问题描述】:
我正在尝试编写和学习不同的神经网络模型。我对输入维度有很多复杂性。我正在寻找一些教程,显示层的差异以及如何为每个层设置输入和输出。
【问题讨论】:
标签: python neural-network keras conv-neural-network keras-layer
我正在尝试编写和学习不同的神经网络模型。我对输入维度有很多复杂性。我正在寻找一些教程,显示层的差异以及如何为每个层设置输入和输出。
【问题讨论】:
标签: python neural-network keras conv-neural-network keras-layer
Keras documentation 向您显示每一层所期望的所有input_shapes。
在 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)
只有一维的卷积层。使用卷积时,想法是要有通道。
想象一个声音文件,它包含两个声道,左声道和右声道。每个通道都是一个与波形对应的值数组。
Keras 为您提供channels_first 或channels_last 选项,这会改变层的输入和输出:
(None, channels, length)
(None, length, channels)
输出也遵循“channels_first/channels_last”设置,如下所示:(None, NumberOfFilters, ResultingLength) - 通道优先
默认设置为“channels_last”,可以在每一层或者keras.json文件中定义
与 Conv1D 相同的想法,使用通道,先使用通道或最后使用通道。但是现在,它有两个维度,比如图像,每个通道都与红色、绿色、蓝色相比。
(None, channels, pixelsX, pixelsY)
(None, pixelsX, pixelsY, channels)
输出遵循“channels_firts/channels_last”设置,类似于(None, NumberOfFilters, resultPixelsX, resultPixelsY) for channels_first。
Lstm 层很难理解。他们有一些使用不同输入形状的选项,还有一些有趣的教程,例如this one 和this too。
通常,输入形状为(None, TimeSteps, InputDimension)
由于 LSTM 用于序列,您可以按时间步长分离序列。输入维度只是具有多维值的可能性。
输出也因所选选项而异。它可能是 (None, Timesteps, NumberOfCellsInTheLeyr) 或只是 (None, NumberOfCells),这取决于您是否选择返回序列。
【讨论】: