Сохранение и загрузка некоторых моделей в Керасе занимает очень много времени - PullRequest
0 голосов
/ 07 марта 2020

Я заметил, что при выполнении следующего рабочего процесса:

  1. загрузить предварительно обученную модель из keras.applications с весами из Imag eNet
  2. отточить это модель с новыми данными
  3. сохраните настроенную модель в файл hdf5 с помощью model.save('file.h5')
  4. и перезагрузите модель куда-нибудь еще с помощью load_model('file.h5')

При использовании некоторых моделей этапы сохранения и загрузки могут занимать очень много времени.

При использовании VGG16 или VGG19 или Mobil eNet сохранение и загрузка происходят очень быстро (не более нескольких секунд).

Однако при использовании Na sNet, InceptionV3 или DenseNet121 и сохранение, и загрузка могут занимать до 10-30 минут каждый, как показано в следующих примерах:

from keras.layers import GlobalAveragePooling2D
from keras.layers.core import Dense
from keras.models import Model

# VGG16
model_ = keras.applications.vgg16.VGG16(weights='imagenet', include_top=False)
x = GlobalAveragePooling2D()(model_.output)
x = Dense(16, activation='softmax')(x)
my_model = Model(inputs=model_.input, outputs=x)
my_model.fit(some_data)
my_model.save('file.h5') # takes 2 seconds
load_model('file.h5') # takes 2 seconds

# NASNetMobile
model_ = keras.applications.nasnet.NASNetMobile(weights='imagenet', include_top=False)
x = GlobalAveragePooling2D()(model_.output)
x = Dense(16, activation='softmax')(x)
my_model = Model(inputs=model_.input, outputs=x)
my_model.fit(some_data)
my_model.save('file.h5') # takes 10 minutes
load_model('file.h5') # takes 5 minutes

# DenseNet121
model_ = keras.applications.densenet.DenseNet121(weights='imagenet', include_top=False)
x = GlobalAveragePooling2D()(model_.output)
x = Dense(16, activation='softmax')(x)
my_model = Model(inputs=model_.input, outputs=x)
my_model.fit(some_data)
my_model.save('file.h5') # takes 10 minutes
load_model('file.h5') # takes 5 minutes

При запросе командной строки чтобы наблюдать за созданным файлом во время сохранения, мы можем видеть, как медленно создается file.h5, со скоростью около 100 КБ в минуту в худшем случае, а затем внезапно, когда он достигает 22 МБ, он очень быстро завершается до полного размера (80-100 МБ в зависимости от модели).

Мне было интересно, является ли это «стандартным поведением», просто потому, что эти модели изначально сложны, а затем ожидаются такие длительные периоды сохранения / загрузки, или это не нормально? Кроме того, можно ли что-то сделать, чтобы смягчить это?

Используемая конфигурация:

  • Keras 2.2 с бэкэндом TensorFlow
  • TensorFlow-GPU 1.13
  • Python 3,6
  • CUDA 10,1
  • работает на предварительно настроенном экземпляре AWS Deep Learning EC2

1 Ответ

0 голосов
/ 01 апреля 2020

У меня похожий опыт при попытке загрузить Re sNet 50 в TF 2.0 и Keras. Не уверен, что случилось, но я вижу 100% загрузку ЦП на одноядерном (из 64 доступных процессорных ядер).

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