Ali*_*tad 1 keras tensorflow keras-layer
我是Keras的新手(以某种方式对TF),但我发现输入层的形状定义非常混乱.
因此在示例中,当我们有一个长度为20的1D向量用于输入时,形状被定义为
...Input(shape=(20,)...)
Run Code Online (Sandbox Code Playgroud)
当需要为MNIST定义灰度图像的2D张量时,定义为:
...Input(shape=(28, 28, 1)...)
Run Code Online (Sandbox Code Playgroud)
所以我的问题是为什么张量没有被定义为(20)和(28, 28)?为什么在第一种情况下添加第二个维度并留空?另外,第二,必须定义多少个频道?
我明白它取决于层,所以Conv1D,Dense或Conv2D采取不同的形状,但似乎第一个参数是隐含的?
根据文档,密集需要,(batch_size, ..., input_dim)但这是如何相关的例子:
谢谢
元组与数字
input_shape必须是一个元组,所以只能(20,)满足它.这个数字20不是元组.- 有一个参数input_dim,如果您只有一个维度,可以让您的生活更轻松.这个参数可以20.(但实际上,我发现它只是令人困惑,我总是使用input_shape和使用元组,以保持一致的理解).
Dense(32, input_shape=(784,))是一样的Dense(32, input_dim=784).
图片
图像不仅有像素,还有通道(红色,绿色,蓝色).
黑/白图像只有一个通道.
所以, (28pixels, 28pixels, 1channel)
但请注意,没有义务在任何地方都遵循这种形状.你可以按自己喜欢的方式塑造它们.但是某些层确实需要某种形状,否则它们无法工作.
某些层需要特定的形状
需要的是二维卷积层的情况(size1,size2,channels).他们需要这种形状,因为他们必须相应地应用卷积滤波器.
这也是复发层的情况,需要(timeSteps,featuresPerStep)执行其重复计算.
MNIST模型
同样,没有义务以特定方式塑造您的图像.您必须根据您选择的第一层和您打算实现的目标来完成.这是免费的.
许多例子根本不关心图像是2d结构化的东西,他们只使用784像素的模型.这就够了.他们可能从Dense图层开始,这些图层需要像(size,)
其他示例可能会关注并使用形状(28,28),但是这些模型必须重新整形输入以满足下一层的需要.
卷积层2D将需要(28,28,1).
主要思想是:输入数组必须匹配input_shape或input_dim.
张量形状
但是,在阅读Keras错误消息或使用custom/lambda图层时要小心.
我们之前定义的所有这些形状都省略了一个重要的维度:批量大小或样本数量.
在内部,所有张量都将具有此附加维度作为第一维度.Keras会将其报告为None(适应您所拥有的任何批量大小的维度).
所以,input_shape=(784,)将被报道为(None,784).
而input_shape=(28,28,1)将被报告为(None,28,28,1)
并且您的实际输入数据必须具有与报告的形状匹配的形状.
| 归档时间: |
|
| 查看次数: |
2459 次 |
| 最近记录: |