Keras 上 LSTM 序列模型的维度问题

Dimension issues for LSTM sequence model on Keras

我想为序列数据训练一个简单的 LSTM 模型,具有 128 个时间步长和 6 个特征,用于 118 个多 类。

数据集的维度如下所示:

X_train, X_test shape: (batch, timesteps, num_features) = (batch, 128, 6)
y_train, y_test shape: (batch, 118)

其中标签由 118 的单热编码表示 类。

model = keras.Sequential([
    tf.keras.layers.LSTM(units = 32, kernel_initializer = 
    tf.initializers.zeros()),
    tf.keras.layers.Dense(units = 6)
])

model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(X_train, y_train, validation_data = (X_test, y_test), epochs=20, verbose=0)

上面的代码执行后出现如下错误:

ValueError: Shapes (None, 118) and (None, 6) are incompatible

如何解决尺寸问题?

tf.keras.layers.Dense()中的units参数是输出的维度space。

由于您在最后一个密集层中使用了 6 个单元,因此模型将处理输入和 return 形状为 (None, 6) 的张量,并将其与形状为 [=12= 的标签进行比较],这是不兼容的。

尝试将最后一个密集层中的单元数更改为 118 以获得兼容的模型。

我认为这个问题是因为你的网络将输出一个大小为 6 的向量,而你的预期输出是 118。所以你有两种方法。 1-您可以将您的“tf.keras.layers.Dense(units = 6)”更改为“tf.keras.layers.Dense(units = 118)”

2- 您可以再添加一个密集层以将输出重塑为 118。因此最终模型将是

model = keras.Sequential([tf.keras.layers.LSTM(units = 32, kernel_initializer = tf.initializers.zeros()), tf.keras.layers.Dense(units = 6),tf.keras.layers.Dense(units = 118)])

您可能面临的另一个问题是 None 形状。我不确定为什么,但你可能需要检查数据或其他东西。