Как конвертировать или загрузить сохраненную модель в TensorFlow или Keras? - PullRequest
0 голосов
/ 04 ноября 2019

Я использовал теноры потока тенор для создания модели и определил обратный вызов для сохранения модели после каждой эпохи. Это сработало и сохранило модель в формате pb, но я не могу загрузить ее снова в керасы, потому что керасы просто принимают формат h5.

У меня есть два вопроса:

  • За исключением тензор потокаКак мне сохранить свою сохраненную модель в keras / tenorflow?
  • Как сохранить модель keras после каждой эпохи в формате h5?

Мой обратный вызов и сохранение модели:

from tensorflow.keras.callbacks import ModelCheckpoint

cp_callback = ModelCheckpoint(filepath=checkpoint_path, save_freq= 'epoch', verbose=1 )

regressor.compile(optimizer = 'adam', loss = 'mean_squared_error')
regressor.fit(X_train, y_train, epochs = 10, batch_size = 32, callbacks=[cp_callback])

Моя сохраненная структура модели:

saved_trained_10_epochs
├── assets
├── saved_model.pb
└── variables
    ├── variables.data-00000-of-00001
    └── variables.index

Обновление

Я пытался использовать latest_checkpoint, как показано ниже, но получил ошибки ниже:

from tensorflow.train import latest_checkpoint

loaded_model = latest_checkpoint(checkpoint_path)
loaded_model.summary()

Ошибка:

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-57-76a8ebe4f259> in <module>
----> 1 loaded_model.summary()

AttributeError: 'NoneType' object has no attribute 'summary'

И после воссоздания модели:

loaded_regressor = Sequential()

loaded_regressor.add(LSTM(units = 180, return_sequences = True, input_shape = (X_train.shape[1], 3)))
loaded_regressor.add(Dropout(0.2))

loaded_regressor.add(LSTM(units = 180, return_sequences = True))
loaded_regressor.add(Dropout(0.2))

loaded_regressor.add(LSTM(units = 180, return_sequences = True))
loaded_regressor.add(Dropout(0.2))

loaded_regressor.add(LSTM(units = 180, return_sequences = True))
loaded_regressor.add(Dropout(0.2))

loaded_regressor.add(LSTM(units = 180, return_sequences = True))
loaded_regressor.add(Dropout(0.2))

loaded_regressor.add(LSTM(units = 180))
loaded_regressor.add(Dropout(0.2))

loaded_regressor.add(Dense(units = 1))

loaded_regressor.compile(optimizer = 'adam', loss = 'mean_squared_error')
loaded_regressor.load_weights(latest_checkpoint(checkpoint_path))

Ошибка:

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-30-c344f1759d01> in <module>
     22 
     23 loaded_regressor.compile(optimizer = 'adam', loss = 'mean_squared_error')
---> 24 loaded_regressor.load_weights(latest_checkpoint(checkpoint_path))

/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/training.py in load_weights(self, filepath, by_name)
    160         raise ValueError('Load weights is not yet supported with TPUStrategy '
    161                          'with steps_per_run greater than 1.')
--> 162     return super(Model, self).load_weights(filepath, by_name)
    163 
    164   @trackable.no_automatic_dependency_tracking

/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/network.py in load_weights(self, filepath, by_name)
   1375             format.
   1376     """
-> 1377     if _is_hdf5_filepath(filepath):
   1378       save_format = 'h5'
   1379     else:

/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/network.py in _is_hdf5_filepath(filepath)
   1670 
   1671 def _is_hdf5_filepath(filepath):
-> 1672   return (filepath.endswith('.h5') or filepath.endswith('.keras') or
   1673           filepath.endswith('.hdf5'))
   1674 

AttributeError: 'NoneType' object has no attribute 'endswith'

1 Ответ

1 голос
/ 04 ноября 2019

tf.keras модели загружаются с использованием tf.keras.models.load_model, это должно работать нормально, поскольку tf.keras поддерживает чтение / запись нескольких форматов, включая контрольные точки тензорного потока.

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