我有一个以下形状的火车数据集:(300, 5, 720)
[[[ 6. 11. 389. ..., 0. 0. 0.]
[ 2. 0. 0. ..., 62. 0. 0.]
[ 0. 0. 18. ..., 0. 0. 0.]
[ 38. 201. 47. ..., 0. 108. 0.]
[ 0. 0. 1. ..., 0. 0. 0.]]
[[ 136. 95. 0. ..., 0. 0. 0.]
[ 85. 88. 85. ..., 0. 31. 0.]
[ 0. 0. 0. ..., 0. 0. 0.]
[ 0. 0. 0. ..., 0. 0. 0.]
[ 13. 19. 0. ..., 0. 0. 0.]]]
我试图将每个样本作为输入传递给cnn模型,每个输入的大小为(5,720)
,我在keras中使用以下模型:
cnn = Sequential()
cnn.add(Conv2D(64, (5, 50),
padding="same",
activation="relu",data_format="channels_last",
input_shape=in_shape))
cnn.add(MaxPooling2D(pool_size=(2,2),data_format="channels_last"))
cnn.add(Flatten())
cnn.add(Dropout(0.5))
cnn.add(Dense(number_of_classes, activation="softmax"))
cnn.compile(loss="categorical_crossentropy", optimizer="adam", metrics=
['accuracy'])
cnn.fit(x_train, y_train,
batch_size=batch_size,
epochs=epochs,
validation_data=(x_test, y_test),
shuffle=True)
我使用输入形状:
rows,cols=x_train.shape[1:]
in_shape=(rows,cols,1)
但是我收到以下错误:
ValueError:检查模型输入时出错:预期conv2d_1_input有4个维度,但得到的数组有形状(300,5, 720)
如何解决此错误?
答案 0 :(得分:1)
这是Keras Convolutions中最经典的错误之一。其根源在于,当使用channels_last
输入维度时,即使您只有一个通道,也需要使输入具有维度(height, width, channels)
。所以基本上重塑:
x_train = x_train.reshape((x_train.shape[0], 5, 720, 1)
应该解决你的问题。