2016-12-27 8 views
0

Checkpoint фрагмент:Keras: Загрузка весов контрольных точек hdf5 генерируется несколькими графическими процессорами

checkpointer = ModelCheckpoint(filepath=os.path.join(savedir, "mid/weights.{epoch:02d}.hd5"), monitor='val_loss', verbose=1, save_best_only=False, save_weights_only=False) 
hist = model.fit_generator(
    gen.generate(batch_size = batch_size, nb_classes=nb_classes), samples_per_epoch=593920, nb_epoch=nb_epoch, verbose=1, callbacks=[checkpointer], validation_data = gen.vld_generate(VLD_PATH, batch_size = 64, nb_classes=nb_classes), nb_val_samples=10000 
) 

Я обучал мою модель на множественный хост GPU, который сваливает mid файлы в формате HDF5. Когда я загрузил их на одном GPU машине с keras.load_weights('mid') была сгенерирована ошибка:

Using TensorFlow backend. 
Traceback (most recent call last): 
    File "server.py", line 171, in <module> 
    model = load_model_and_weights('zhch.yml', '7_weights.52.hd5') 
    File "server.py", line 16, in load_model_and_weights 
    model.load_weights(os.path.join('model', weights_name)) 
    File "/home/lz/code/ProjectGo/meta/project/libpolicy-server/.virtualenv/lib/python3.5/site-packages/keras/engine/topology.py", line 2701, in load_weights 
    self.load_weights_from_hdf5_group(f) 
    File "/home/lz/code/ProjectGo/meta/project/libpolicy-server/.virtualenv/lib/python3.5/site-packages/keras/engine/topology.py", line 2753, in load_weights_from_hdf5_group 
    str(len(flattened_layers)) + ' layers.') 
ValueError: You are trying to load a weight file containing 1 layers into a model with 21 layers. 

Есть ли способ загрузки контрольных точки весов, сгенерированные нескольких графических процессоров на одном GPU машине? Кажется, что ни одна проблема Keras не обсуждала эту проблему, поэтому любая помощь была бы оценена.

+0

Можете ли вы загрузить эту же машину с несколькими GPU? В сообщении об ошибке указано, что существует несколько несоответствий уровня. Сколько слоев имеет модель? –

+0

@ YaoZhang Весы могут быть загружены только с помощью 'model.load_weights()' на исходном компьютере. 21 слой как в модели model.yml, так и на модели с несколькими GPU. – lz96

ответ

2

Вы можете загрузить свою модель на одном GPU, как это:

from keras.models import load_model 

multi_gpus_model = load_model('mid') 
origin_model = multi_gpus_model.layers[-2] # you can use multi_gpus_model.summary() to see the layer of the original model 
origin_model.save_weights('single_gpu_model.hdf5') 

«single_gpu_model.hdf5» файл, который вы можете загрузить в одной модели GPU машины.

 Смежные вопросы

  • Нет связанных вопросов^_^