LSTM 模型:值错误:层 "lstm" 的输入 0 与层不兼容:预期 ndim=3,发现 ndim=2。收到的完整形状:(无,7)



我正在为一个多类分类问题构建一个keras模型。我的数据集有7个数字特征和4个标签。我将模型结构如下:

def create_keras_model():
initializer = tf.keras.initializers.GlorotNormal()
return tf.keras.models.Sequential([
#tf.keras.layers.Input(shape=(7,)),
LSTM(units=20,kernel_initializer = initializer   
input_shape=(7,)), 
tf.keras.layers.Dense(4,),
tf.keras.layers.Softmax(),
])

,当我编译它时,得到了这个错误:

ValueError: Input 0 of layer "lstm" is incompatible with the layer: expected ndim=3, found ndim=2. Full shape received: (None, 7)

这里可能有什么问题?我该怎么补救呢?

你需要改变intput_shape,并在X上使用tf.expand_dims()在最后添加一个维度,然后你可以使用你的模型并开始训练。

tf.keras.layers.LSTM(units=20, input_shape=(7,1))
x = tf.expand_dims(x, axis=-1)

完整代码:

import tensorflow as tf
def create_keras_model():
initializer = tf.keras.initializers.GlorotNormal()
return tf.keras.models.Sequential([
tf.keras.layers.LSTM(units=20,kernel_initializer = initializer,
input_shape=(7,1)), 
tf.keras.layers.Dense(4,),
tf.keras.layers.Softmax(),
])

x = tf.random.normal((100,7))
y = tf.random.normal((100,4))
x = tf.expand_dims(x, axis=-1)
model = create_keras_model()
model.compile(optimizer='adam', loss = 'categorical_crossentropy')
model.fit(x,y, epochs=2, batch_size=2)

输出:

Epoch 1/2
50/50 [==============================] - 2s 4ms/step - loss: 0.2027
Epoch 2/2
50/50 [==============================] - 0s 4ms/step - loss: 0.1878

最新更新