首页 > 解决方案 > Keras中LSTM层的输入维度

问题描述

我正在尝试 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]

看起来输入的rank必须是3,但是为什么我们要在Input层使用rank-2的形状呢?

标签: tensorflowkerasrankdimension

解决方案


查看tf.keras.Input的文档。语法如下-

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

shape:定义单个样本的形状,批量大小可变。

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


推荐阅读