繁体   English   中英

Keras中LSTM层的输入尺寸

[英]The input dimension of the LSTM layer in Keras

我正在尝试keras.layers.LSTM。 以下代码有效。

#!/usr/bin/python3
import tensorflow as tf
import numpy as np
from tensorflow import keras

data = np.array([1, 2, 3]).reshape((1, 3, 1)) 
x = keras.layers.Input(shape=(3, 1)) 
y = keras.layers.LSTM(10)(x)
model = keras.Model(inputs=x, outputs=y)

print (model.predict(data))

如上所示,输入数据形状为(1, 3, 1) ,而输入层中的实际输入形状为(3, 1) 我对此维度的不一致感到有些困惑。 如果我在“输入”层中使用以下形状,则它将不起作用:

x = keras.layers.Input(shape=(1, 3, 1)) 

错误消息如下:

ValueError: Input 0 of layer lstm is incompatible with the layer: expected ndim=3, found ndim=4. Full shape received: [None, 1, 3, 1]

似乎输入的等级必须为3,但是为什么要在Input层中使用等级2的形状?

查看有关tf.keras.Input的文档。 语法为-

tf.keras.Input(
    shape=None,
    batch_size=None,
    name=None,
    dtype=None,
    sparse=False,
    tensor=None,
    **kwargs
)

形状:定义具有可变批量大小的单个样品的形状。

注意,它期望第一个值是batch_size,否则显式传递batch_size作为参数

Keras处理“样本”的“批次”。 由于大多数模型使用的可变批量大小仅在拟合时定义,因此为方便起见,您不必关心批量尺寸,而只关心样本尺寸。

就是说,当您使用shape = (3,1) ,这与定义batch_shape = (None, 3, 1)batch_input_shape = (None, 3, 1)

这三个选项表示:

  • 可变批量大小: None
  • 具有形状(3, 1)样本。

重要的是要知道这种区别,尤其是当您要创建自定义图层,损失或指标时。 实际的张量都具有批处理尺寸,使用张量进行操作时应考虑到这一点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM