У меня ошибка при использовании методов трансферного обучения, с которыми я столкнулся при загрузке предварительно обученной модели Keras - PullRequest
0 голосов
/ 12 февраля 2019

Я пытаюсь построить модель MobileNet, предварительно подготовленную для Keras, следуя инструкциям в блоге Keras по адресу https://blog.keras.io/building-powerful-image-classification-models-using-very-little-data.html

Вот мой код:

preTrainedModel = MobileNetV2(weights = 'imagenet', include_top = False)
preFeatures = preTrainedModel.output
preFeatures = GlobalAveragePooling2D()(preFeatures)
preFeatures = Dense(1024, activation = 'relu')(preFeatures)
predictions = Dense(10, activation = 'softmax')(preFeatures)

#Extract features
model = Model(input = preTrainedModel.input, output = predictions)
#Layer freezing
for layer in preTrainedModel.layers:
    layer.trainable = False

if os.path.exists(top_layers_checkpoint_path):
    model.load_weights(top_layers_checkpoint_path)
    print ("Checkpoint '" + top_layers_checkpoint_path + "' loaded.")

#Rmsprop optimizer
model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy'], )

#Save the model after every epoch
mc_top = ModelCheckpoint(top_layers_checkpoint_path, monitor='val_acc', verbose=0, save_best_only=True, save_weights_only=False, mode='auto', period=1)

#Save the TensorBoard logs.
tb = TensorBoard(log_dir='./logs', histogram_freq=1, write_graph=True, write_images=True)

model.fit_generator(datGen, samples_per_epoch = batchPerEpoch, nb_epoch = epochPerPass, validation_data = validateDataFlow, nb_val_samples = batchPerEpoch, callbacks = [mc_top, tb], use_multiprocessing=False)

for i, layer in enumerate(preTrainedModel.layers):
   print(i, layer.name)
#Save the model after every epoch.
mc_fit = ModelCheckpoint(fine_tuned_checkpoint_path, monitor='val_acc', verbose=0, save_best_only=True, save_weights_only=False, mode='auto', period=1)


if os.path.exists(fine_tuned_checkpoint_path):
        model.load_weights(fine_tuned_checkpoint_path)
        print ("Checkpoint '" + fine_tuned_checkpoint_path + "' loaded.")

# we chose to train the top 2 inception blocks, i.e. we will freeze
# the first 172 layers and unfreeze the rest:
for layer in model.layers[:50]:
   layer.trainable = False
for layer in model.layers[50:]:
   layer.trainable = True

model.fit_generator(datGen, samples_per_epoch = batchPerEpoch, nb_epoch = epochPerPass, validation_data = validateDataFlow, nb_val_samples = batchPerEpoch, callbacks = [mc_top, tb], use_multiprocessing=False)

Но он сообщаетпроблема:

tenorflow.python.framework.errors_impl.ResourceExhaustedError: OOM при выделении тензора с формой [1373,32,112,112] и введите float в / job: localhost / replica: 0 / task: 0 /устройство: GPU: 0 по распределителю GPU_0_bfc [[{{узел Conv1 / свертка}} = Conv2D [T = DT_FLOAT, _class = ["loc: @ bn_Conv1 / cond / FusedBatchNorm / Switch"], data_format = "NCHW", дилатации =[1, 1, 1, 1], padding = "VALID", strides = [1, 1, 2, 2], use_cudnn_on_gpu = true, _device = "/ job: localhost / replica: 0 / task: 0 / device:GPU: 0 "] (Conv1 / convolution-0-TransposeNHWCToNCHW-LayoutOptimizer, Conv1 / kernel / read)]]

Означает ли это, что ресурсы GPU исчерпаны?Как я могу решить проблему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...