使用 keras 中的 ImageDataGenerator 将训练集、验证集和测试集分离为 CNN

问题描述 投票:0回答:1

所以我已经先验地分离了训练集、验证集和测试集(这就是数据的来源)。

我为每个人都有文件夹,如下所示:

测试

 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)
testing keras conv-neural-network test-data imagedatagenerator
1个回答
0
投票

实际上你的代码有一些问题。

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)最后,你的低准确率源于你没有对训练数据集进行任何图像增强。因此,您的模型过度拟合训练数据也就不足为奇了。

© www.soinside.com 2019 - 2024. All rights reserved.