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 形状。我不确定为什么,但你可能需要检查数据或其他东西。
我想为序列数据训练一个简单的 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 形状。我不确定为什么,但你可能需要检查数据或其他东西。