使用keras-flow-from-dataframe生成器训练大型数据集

时间:2019-01-16 12:12:16

标签: keras google-colaboratory training-data

使用keras在Google合作实验室上训练大型数据集的最佳方法是什么?

数据大小:3GB图像存储在Google驱动器上。

搜索后,问题在于数据未在内存中获取。在我阅读的所有文章中,建议的解决方案是使用keras生成器(据我了解,其作用是获取一批并对其进行培训,然后转到下一批。),依此类推,因此无需获取全部数据一次存储在内存中。

我尝试了keras-flow-from-dataframe生成器。但这并不能解决问题,我仍然在(运行时死了)

train_paths = pd.read_csv(path) 

datagen = ImageDataGenerator(featurewise_center=True,
featurewise_center=True,
featurewise_std_normalization=True,
samplewise_std_normalization=True,
rotation_range=30,
validation_split=0.25)

train_generator=datagen.flow_from_dataframe(
    dataframe=train_paths,directory= None,x_col='path',y_col='label',
    subset="training",has_ext=True,
    batch_size=32,target_size =(224,224),
    color_mode= "rgb",seed=0,
    shuffle=False,class_mode="binary",drop_duplicates=False)

def compile_and_train(model, num_epochs): 
  adam =  Adam(lr=0.0001, beta_1=0.9, beta_2=0.999, epsilon=None, decay=10, amsgrad=False)
  model.compile(optimizer= adam, loss='binary_crossentropy', metrics = ['acc'])

  filepath = 'tmp/weights/' + model.name + '.{epoch:02d}-{loss:.2f}.hdf5'
  checkpoint = ModelCheckpoint(filepath, monitor='loss', verbose=0, save_best_only=True, mode='auto', period=1)      

      STEP_SIZE_TRAIN= (train_generator.n//train_generator.batch_size)+1
      STEP_SIZE_VALID= (valid_generator.n//valid_generator.batch_size)+1
 Model_history=model.fit_generator(generator=train_generator,steps_per_epoch=STEP_SIZE_TRAIN,validation_data=valid_generator,validation_steps=STEP_SIZE_VALID,epochs=num_epochs, verbose=1, callbacks=[checkpoint, tensor_board],class_weight=[1])
              return  Model_history
MobileNet_Model= MobileNet_model(input_shape)
MobileNet_model_his= compile_and_train(MobileNet_Model, num_epochs=1)

一种建议的解决方案是手动(或按for循环)划分数据,在每个主要批处理后保存权重,并为下一批继续训练它们...

这里的问题是,我应该只保存模型(架构)还是权重?有没有比(for循环)更好的解决方案?为什么使用Keras生成器根本不能解决这个问题!!

0 个答案:

没有答案