张量流序列模型的数据维度问题

Data dimensionality problem with tensorflow sequential model

Keras 顺序模型的新手给我带来了一些麻烦!

我有一个 x_train 的形状:17755 x 500 x 12

y_train 的形状:17755 x 15(标签已经被单热编码)

然后我制作了下一个模型来训练这个数据:

model = Sequential()
model.add(Conv2D(32,3,padding="same", activation="relu", input_shape=(17755,500,12)))
model.add(MaxPool2D())

model.add(Conv2D(32, 3, padding="same", activation="relu"))
model.add(MaxPool2D())

model.add(Conv2D(64, 3, padding="same", activation="relu"))
model.add(MaxPool2D())
model.add(Dropout(0.4))

model.add(Flatten())
model.add(Dense(128,activation="relu"))
model.add(Dense(15, activation="sigmoid"))

model.compile(optimizer ='adam', loss='categorical_crossentropy', metrics = ['Accuracy'])

history = model.fit(x_train, y_train, epochs=5)

1- 当我不使用 np.expand_dims 为批处理添加轴时,出现此错误:

ValueError: Input 0 of layer "sequential" is incompatible with the layer: expected shape=(None, 17755, 500, 12), found shape=(None, 500, 12)

2- 当我使用 np.expand_dims 并且 x_train 的形状变为:1x17755x500x12 我收到此错误: 数据基数不明确: x 尺寸:1 y 尺寸:17755 确保所有阵列包含相同数量的样本。

3- 当我也对 y_train 使用 np.expand_dims 时,它的形状变成了:1x17755x15 我收到此错误:

ValueError: Shapes (None, 17755, 15) and (None, 15) are incompatible

我知道我做错了根本性的事情,但那是什么?谁能帮我解决数据的形状问题?

关于 x_train 尝试在末尾添加一个新维度来表示 Conv2D 层所需的通道维度。另请注意,您没有为输入形状提供样本数。这是一个工作示例:

import tensorflow as tf
import numpy as np

x_train = np.random.random((17755,500,12))
x_train = np.expand_dims(x_train, axis=-1)
y_train = np.random.random((17755,15))
model = tf.keras.Sequential()
model.add(tf.keras.layers.Conv2D(32,3,padding="same", activation="relu", input_shape=(500, 12, 1)))
model.add(tf.keras.layers.MaxPool2D())

model.add(tf.keras.layers.Conv2D(32, 3, padding="same", activation="relu"))
model.add(tf.keras.layers.MaxPool2D())

model.add(tf.keras.layers.Conv2D(64, 3, padding="same", activation="relu"))
model.add(tf.keras.layers.MaxPool2D())
model.add(tf.keras.layers.Dropout(0.4))

model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dense(128,activation="relu"))
model.add(tf.keras.layers.Dense(15, activation="sigmoid"))

model.compile(optimizer ='adam', loss='categorical_crossentropy', metrics = ['Accuracy'])

history = model.fit(x_train, y_train, epochs=5)