训练/测试数据的形状为(samples, 256,256,1)。训练数据集大约有1400个样本,验证数据集有150个样本,测试数据集有250个样本。然后,我为一个六对象分类任务建立了一个CNN模型。然而,无论我多么努力地调整参数并添加/删除图层(conv&dense),我总是获得一个机会级别的准确性(大约16.5%)。因此,我想知道我在建立模型时是否犯了一些致命的错误。或者是数据本身有问题,而不是CNN模型。
代码:
def build_cnn_model(input_shape, activation='relu'):
model = Sequential()
# 3 Convolution layer with Max polling
model.add(Conv2D(64, (5, 5), activation=activation, padding = 'same', input_shape=input_shape))
model.add(MaxPooling2D((2, 2)))
model.add(Conv2D(128, (5, 5), activation=activation, padding = 'same'))
model.add(MaxPooling2D((2, 2)))
model.add(Conv2D(256, (5, 5), activation=activation, padding = 'same'))
model.add(MaxPooling2D((2, 2)))
model.add(Flatten())
# 3 Full connected layer
model.add(Dense(1024, activation = activation))
model.add(Dropout(0.5))
model.add(Dense(512, activation = activation))
model.add(Dropout(0.5))
model.add(Dense(6, activation = 'softmax')) # 6 classes
# summarize the model
print(model.summary())
return model
def compile_and_fit_model(model, X_train, y_train, X_vali, y_vali, batch_size, n_epochs, LR=0.01):
# compile the model
model.compile(
optimizer=tf.keras.optimizers.Adam(learning_rate=LR),
loss='sparse_categorical_crossentropy',
metrics=['sparse_categorical_accuracy'])
# fit the model
history = model.fit(x=X_train,
y=y_train,
batch_size=batch_size,
epochs=n_epochs,
verbose=1,
validation_data=(X_vali, y_vali))
return model, history
我使用CWT将教授记录的MEG数据转换为幅度尺度图。pywt。采用Cwt (data, scales, wavelet)方法。如果我把从cwt得到的系数画出来,我会得到一个这样的图(我在一个图中出现了62个通道)。输入图片描述
我使用系数作为CNN模型的训练/测试数据。然而,我调整了参数,并尝试为CNN模型添加/删除层,分类精度没有变化。因此,我想知道我在哪里犯了错误。我是在构建CNN模型时犯了错误,还是在CWT(我处理数据的方式)上犯了错误?
请给我一些建议,谢谢。训练数据的准确性如何?如果你有一个小的数据集,并且模型在训练一段时间后没有过拟合,那么模型就有问题。您还可以使用模型应该能够处理的现有数据集进行测试(如Fashion MNIST)。
测试你是否正确处理了数据是比较困难的。您是否为预处理管道中的不同步骤编写了单元测试?