Validation 卷积神经网络:在测试阶段防止作弊

Validation 卷积神经网络:在测试阶段防止作弊,validation,testing,keras,conv-neural-network,Validation,Testing,Keras,Conv Neural Network,我正在建立一个用于图像分类的卷积神经网络。图像存储在两个不同的文件夹中: 培训图像(8000个文件) 测试图像(2000个文件) 显然,我需要一个训练集、一个验证集和一个测试集。第一种解决方案是将第一个文件夹中的图像拆分为培训组和验证组,同时使用第二个文件夹中的图像进行测试: training_datagen = ImageDataGenerator(rescale = 1./255, validation_split = 0.2) test_datagen = Ima

我正在建立一个用于图像分类的卷积神经网络。图像存储在两个不同的文件夹中:

  • 培训图像(8000个文件)
  • 测试图像(2000个文件)
  • 显然,我需要一个训练集、一个验证集和一个测试集。第一种解决方案是将第一个文件夹中的图像拆分为培训组和验证组,同时使用第二个文件夹中的图像进行测试:

    training_datagen     = ImageDataGenerator(rescale = 1./255, validation_split =  0.2)
    test_datagen         = ImageDataGenerator(rescale = 1./255)
    train_generator      = train_datagen.flow_from_directory(training_path,target_size = (150,150), batch_size = 20, subset = "training", class_mode = "binary") 
    validation_generator = train_datagen.flow_from_directory(training_path,target_size = (150,150), batch_size = 20, subset = "validation", class_mode = "binary") 
    test_generator       = test_datagen.flow_from_directory(test_path,target_size = (150,150), batch_size = 20, class_mode = "binary") 
    
    
    当我想增强训练图像时,这种方法会出现问题,因为拉伸、缩放等操作也会应用于我的验证集。实际上,可以简单地将第一个文件夹拆分为两个单独的文件夹(例如,6000个图像用于培训,2000个图像用于验证),并对每个文件夹使用ImageDataGenerator(),而不使用“validation_split”参数。但是,我不允许修改文件夹结构,也就是说,我不能重新组织图像。我的想法是将第二个文件夹中的2000个图像分割为验证集和测试集:

    train_datagen   = ImageDataGenerator(rescale            = 1./255,
                                         rotation_range     = rotation_range,
                                         width_shift_range  = width_shift_range,
                                         height_shift_range = height_shift_range,
                                         shear_range        = shear_range,
                                         brightness_range   = brightness_range,
                                         zoom_range         = zoom_range,
                                         horizontal_flip    = horizontal_flip,
                                         fill_mode          = fill_mode)
    
    test_datagen         = ImageDataGenerator(rescale = 1./255, validation_split =  0.5)
    train_generator      = train_datagen.flow_from_directory(training_path,target_size = (150,150), batch_size = 20, subset = "training", class_mode = "binary") 
    validation_generator = test_datagen.flow_from_directory(test_path,target_size = (150,150), batch_size = 20, subset = "test", class_mode = "binary") 
    test_generator       = test_datagen.flow_from_directory(test_path,target_size = (150,150), batch_size = 20, subset = "validation",class_mode = "binary") 
    
    并使用前1000个图像进行验证,剩余1000个图像进行测试。我这样做是不是在考试阶段作弊

    谢谢大家!