【问题标题】:Performing 10 fold cross validation in training with Image Data Generator使用 Image Data Generator 在训练中执行 10 折交叉验证
【发布时间】:2020-11-23 11:25:46
【问题描述】:

我创建了一个 CNN 来在 400 张图像的数据集中进行二元分类。我的代码如下:

def neural_network():
  classifier = Sequential()

  # Adding a first convolutional layer
  classifier.add(Convolution2D(48, 3, input_shape = (320, 320, 3), activation = 'relu'))
  classifier.add(MaxPooling2D())

  # Adding a second convolutional layer
  classifier.add(Convolution2D(48, 3, activation = 'relu'))
  classifier.add(MaxPooling2D())

  #Flattening
  classifier.add(Flatten())

  #Full connected
  classifier.add(Dense(256, activation = 'relu'))
 
  #Full connected
  classifier.add(Dense(1, activation = 'sigmoid'))


  classifier.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy'])

  classifier.summary()


  train_datagen = ImageDataGenerator(rescale = 1./255,
                                    shear_range = 0.2,
                                    horizontal_flip = True,
                                    vertical_flip=True,
                                    brightness_range=[0.5, 1.5])

  test_datagen = ImageDataGenerator(rescale = 1./255)
  test_final_datagen = ImageDataGenerator(rescale = 1./255)
  test_final_four = ImageDataGenerator(rescale = 1./255)

  training_set = train_datagen.flow_from_directory('/content/drive/My Drive/data_sep/train',
                                                  target_size = (320, 320),
                                                  batch_size = 32,
                                                  class_mode = 'binary')

  test_set = test_datagen.flow_from_directory('/content/drive/My Drive/data_sep/validate',
                                              target_size = (320, 320),
                                              batch_size = 32,
                                              class_mode = 'binary')

  
  test_final = test_final_datagen.flow_from_directory('/content/drive/My Drive/data_sep/validate',
                                              target_size = (320, 320),
                                              batch_size = 32,
                                              class_mode = 'binary',
                                              shuffle = False)

  filepath  = "/content/drive/My Drive/data_sep/weightsbestval.hdf5"
  checkpoint = ModelCheckpoint(filepath, monitor='val_accuracy', verbose=1, save_best_only=True, mode='max',save_weights_only=True)
  callbacks_list = [checkpoint]

  history = classifier.fit(training_set,
                          epochs  = 50,
                          validation_data = test_set,
                          callbacks= [callbacks_list]
                          )
  
  
  best_score = max(history.history['val_accuracy'])

如何对我的数据集执行 10 折交叉验证?我还没有看到任何地方使用数据增强执行 10 倍,但是图像如此之少,没有它,准确性将非常低。我能做什么?

【问题讨论】:

    标签: python keras deep-learning conv-neural-network k-fold


    【解决方案1】:

    从概念上讲,您需要以下内容:

    • 将所有图像转储到单个目录中
    • 将所有文件名放入数据框中
    • 使用sklearn.model_selection.KFold 为 k 折生成索引
    • 运行 10 个循环:
      • 使用具有 k 倍索引的 DF 切片选择训练和验证文件名。
      • 使用ImageDataGenerator.dataflow_from_dataframe() 喂模型
      • 评估模型

    阅读更多flow_from_dataframe() docs

    【讨论】:

      猜你喜欢
      • 2016-02-25
      • 2019-07-06
      • 2012-11-01
      • 2011-11-29
      • 2018-05-03
      • 2020-09-14
      • 2020-02-10
      • 2014-09-16
      • 1970-01-01
      相关资源
      最近更新 更多