Каков наилучший способ обучения большого набора данных в Google Co-лаборатории с использованием керас?
размер данных: 3 ГБ изображений, хранящихся на диске Google.
После поиска проблема заключается в том, что данные не загружаются в память. Предложенное решение во всех прочитанных мною статьях состояло в том, чтобы использовать генераторы keras (в соответствии с тем, что я понимаю, его роль заключается в получении пакета и его обучении, а затем переходе к следующему пакету ... и т. Д., Поэтому нет необходимости извлекать все данные в памяти сразу).
Я попробовал генератор keras-flow-from-dataframe. Но это не решило проблему, и я все еще страдаю от (Runtime Died)
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), сохранение весов после каждой ОСНОВНОЙ ПАРТИИ и продолжение их обучения для следующей партии ...
Вопрос здесь, я должен сохранить модель (архитектуру) или только веса? И есть ли лучшие решения вместо (для цикла)? и почему использование генераторов keras вообще не решает эту проблему !!?