Получение 'не могу засечь _thread.RLock объектов' при попытке сохранить нейронную сеть - PullRequest
0 голосов
/ 24 сентября 2018

В настоящее время я обучаю нейронную сеть и пытаюсь сохранить обученную модель для будущего использования.Модель основана на Sequential из keras (см. Ниже).Я использую joblib.dump(model, output_file_gen) для хранения информации.Тем не менее, я получаю сообщение об ошибке:

TypeError: can't pickle _thread.RLock objects.

Я просмотрел некоторые сообщения StackOverflow относительно этого сообщения об ошибке, и оно, похоже, связано с многопоточностью.Я не уверен, что происходит в модели, но, возможно, кто-то может дать мне совет, как сохранить модель, либо предприняв шаги, чтобы избавиться от этой ошибки, либо предложив лучший маршрут для хранения нейронной сети.

NNНастройка включена ниже:

model = Sequential()

model.add(Dense(256, input_dim=self.latent_dim))
model.add(LeakyReLU(alpha=0.2))
model.add(BatchNormalization(momentum=0.8))
model.add(Dense(512))
model.add(LeakyReLU(alpha=0.2))
model.add(BatchNormalization(momentum=0.8))
model.add(Dense(1024))
model.add(LeakyReLU(alpha=0.2))
model.add(BatchNormalization(momentum=0.8))
model.add(Dense(np.prod(self.img_shape), activation='tanh'))
model.add(Reshape(self.img_shape))

1 Ответ

0 голосов
/ 24 сентября 2018

Не рекомендуется использовать pickle или cPickle для сохранения модели Keras. Что является причиной ошибки здесь (в основном)

Вы можете использовать model.save(filepath) для сохранения модели в одном HDF5файл, который будет содержать:

  1. архитектура модели, позволяющая воссоздать модель
  2. веса модели
  3. конфигурации обучения (потери,оптимизатор)
  4. состояние оптимизатора, позволяющее возобновить обучение именно с того места, на котором вы остановились.

Затем вы можете использовать keras.models.load_model(filepath), чтобы заново создать / перезагрузить вашу модель.

Выше будет занимать много места на диске.так что вы можете сохранить вес модели.см здесь для более подробной информации

...