tensorflow - 如何将保存的模型转换或加载到 TensorFlow 或 Keras?
问题描述
我使用 tensorflow keras 创建了一个模型,并定义了一个回调来在每个 epoch 之后保存模型。它工作并以格式保存模型,pb
但我无法再次将其加载到 keras 中,因为 keras 只接受h5
格式。
我有两个问题:
- 除了 tensorflow 服务,我如何将保存的模型加载到 keras/tensorflow 中?
- 如何在每个时代之后以
h5
格式保存 keras 模型?
我的回调和保存模型:
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'
解决方案
tf.keras
使用 加载模型tf.keras.models.load_model
,这应该可以正常工作,因为tf.keras
支持读取/写入多种格式,包括 tensorflow 检查点。
推荐阅读
- salt-stack - 如何执行 sls 规则并采取有条件的行动?
- c++ - 如何从列表中获得最可能的对
- sql - 如何从历史记录表中选择未删除的记录?
- java - 如何从部署在 docker 上的应用程序连接到外部服务?
- postgresql - 如何修复 psql shell Windows 中“psql”处或附近的语法错误
- swift - 如何在 SwiftUI 中的 PageViewController 中传递一些视图?
- assembly - 理解 rol/ror 伪指令 mips
- javascript - 将选择框包装到自定义元素中
- python - 在另一个变量中搜索特定字符串
- javascript - 有没有办法使用预制的“气泡”类一次无休止地将一个气泡添加到画布上?