The Conv2D
层需要输入形状为(batch_size, height, width, channels)
。这意味着每个样本都是一个 3D 数组。
您的实际输入是(2589, 1287, 8)
意味着每个样本都有形状(1289, 8)
- 2D 形状。因此,您应该使用Conv1D
代替Conv2D
.
其次你想要一个输出(2589, 1287, 8)
。由于每个样本都是二维形状,因此没有意义Flatten()
输入 -Flatten()
会将每个样本的形状减少为一维,并且您希望每个样本都是二维的。
最后取决于你的填充Conv
层,形状可能会根据kernel_size
。因为你想保留中间维度1287
, use padding='same'
以保持大小相同。
from keras.models import Sequential
from keras.layers import Conv1D, Flatten, Dense
import numpy as np
X_train = np.random.rand(2589, 1287, 69)
y_train = np.random.rand(2589, 1287, 8)
model = Sequential()
model.add(Conv1D(64,
kernel_size=3,
activation="relu",
padding='same',
input_shape=(X_train.shape[1],X_train.shape[2])))
model.add(Conv1D(32,
kernel_size=3,
activation="relu",
padding='same'))
model.add(Dense((8), activation="softmax"))
model.summary()
model.compile(loss='categorical_crossentropy', optimizer='adam')
model.fit(X_train, y_train)