所以我已经先验地分离了训练集、验证集和测试集(这就是数据的来源)。
我为每个人都有文件夹,如下所示:
测试
Class1
Class0
瓦尔
Class1
Class0
火车
Class1
Class0
然后我定义路径如下:
# Define paths
train_dir = os.path.join(PATH, 'train')
val_dir = os.path.join(PATH, 'val')
test_dir = os.path.join(PATH, 'test')
# Specify them by class
train_safe_dir = os.path.join(train_dir, 'class1')
train_malicious_dir = os.path.join(train_dir, 'class0')
val_safe_dir = os.path.join(val_dir, 'class1')
val_malicious_dir = os.path.join(val_dir, 'class0')
test_safe_dir = os.path.join(test_dir, 'class1')
test_malicious_dir = os.path.join(test_dir, 'class0')
然后我使用了ImageDataGenerator,如下所示:
train_datagen = ImageDataGenerator(rescale=1./255)
val_datagen = ImageDataGenerator(rescale=1./255)
test_datagen = ImageDataGenerator(rescale=1./255)
train_generator = train_datagen.flow_from_directory(batch_size=batch_size,
directory=train_dir,
shuffle=False,
target_size=(IMG_H, IMG_W),
class_mode='binary')
val_generator = val_datagen.flow_from_directory(batch_size=batch_size,
directory=val_dir,
target_size=(IMG_H, IMG_W),
class_mode='binary')
test_generator = test_datagen.flow_from_directory(batch_size=batch_size,
directory=test_dir,
shuffle=False,
target_size=(IMG_H, IMG_W),
class_mode='binary')
当我想评估测试数据时,这是否正确?我是否以某种方式泄露了数据?如果不正确,处理测试数据的正确方法是什么?非常感谢!
我不确定是否应该有一个包含测试数据的文件夹而不进行类分离,但是当我尝试时,我得到了一个非常低的精度,这是没有意义的。任何建议表示赞赏!
results = CNN.evaluate(test_generator, batch_size=64)
实际上你的代码有一些问题。
1)首先,下面几行
train_safe_dir = os.path.join(train_dir, 'class1')
train_malicious_dir = os.path.join(train_dir, 'class0')
val_safe_dir = os.path.join(val_dir, 'class1')
val_malicious_dir = os.path.join(val_dir, 'class0')
test_safe_dir = os.path.join(test_dir, 'class1')
test_malicious_dir = os.path.join(test_dir, 'class0')
没有任何用处。您可能想从代码中删除。这些都是多余的。
2)其次,您必须组织测试数据文件夹以存放测试和验证数据。请记住,当您有表格数据时。您是否会丢弃测试数据的输出标签以对其进行评估?目录中的文件夹起到类标签的作用。
3)最后,你的低准确率源于你没有对训练数据集进行任何图像增强。因此,您的模型过度拟合训练数据也就不足为奇了。