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

n53p2ov0  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(90)

所以我已经先验地分离了训练集、验证集和测试集(这就是数据的来源)。
我为他们每个人都准备了这样的文件夹:
测试

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)

o3imoua4

o3imoua41#

实际上,你的代码有一些问题。
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)第三,你的低准确率源于你没有对训练数据集做任何图像增强。所以,你的模型过度拟合训练数据也就不足为奇了。
幸运的是,您不会将训练数据中的任何信息泄露给验证和测试数据。

相关问题