我正在为一个多类分类问题构建一个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