Tensorflow 将keras模型另存为.h5
我想将经过培训的keras模型保存为Tensorflow 将keras模型另存为.h5,tensorflow,keras,Tensorflow,Keras,我想将经过培训的keras模型保存为.h5文件。应该是直截了当的。 简短示例: #%% import tensorflow as tf import numpy as np from tensorflow.keras.callbacks import ModelCheckpoint import matplotlib.pyplot as plt print('TF version: ',tf.__version__) #%% ######################### # BATCH
.h5
文件。应该是直截了当的。
简短示例:
#%%
import tensorflow as tf
import numpy as np
from tensorflow.keras.callbacks import ModelCheckpoint
import matplotlib.pyplot as plt
print('TF version: ',tf.__version__)
#%%
#########################
# BATCH SIZE
BATCH_SIZE=100
########################
# create training data
X_train_set = np.random.random(size=(10000,10))
y_train_set = np.random.random(size=(10000))
# create validation data
X_val_set = np.random.random(size=(100,10))
y_val_set = np.random.random(size=(100))
# convert np.array to dataset
train_dataset = tf.data.Dataset.from_tensor_slices((X_train_set, y_train_set))
val_dataset = tf.data.Dataset.from_tensor_slices((X_val_set, y_val_set))
# batching
train_dataset=train_dataset.batch(BATCH_SIZE)
val_dataset = val_dataset.batch(BATCH_SIZE)
# set up the model
my_model = tf.keras.Sequential([
tf.keras.layers.Input(shape=(10,)),
tf.keras.layers.Dense(100, activation='relu'),
tf.keras.layers.Dense(10, activation='relu'),
tf.keras.layers.Dense(1)
])
#%%
# custom optimizer with learning rate
lr_schedule = tf.keras.optimizers.schedules.ExponentialDecay(
initial_learning_rate=1e-2,
decay_steps=10000,
decay_rate=0.9)
optimizer = tf.keras.optimizers.Adam(learning_rate=lr_schedule)
# compile the model
my_model.compile(optimizer=optimizer,loss='mse')
# define a checkpoint
checkpoint = ModelCheckpoint('./tf.keras_test',
monitor='val_loss',
verbose=1,
save_best_only=True,
mode='min',
save_freq='epoch')
callbacks = [checkpoint]
#%%
# train with datasets
history= my_model.fit(train_dataset,
validation_data=val_dataset,
#validation_steps=100,
#callbacks=callbacks,
epochs=10)
# save as .h5
my_model.save('my_model.h5',save_format='h5')
但是,my_model.save
给了我一个TypeError
:
Traceback (most recent call last):
File "/home/max/.local/lib/python3.6/site-packages/IPython/core/interactiveshell.py", line 3343, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-11-a369340a62e1>", line 1, in <module>
my_model.save('my_model.h5',save_format='h5')
File "/home/max/.local/lib/python3.6/site-packages/tensorflow_core/python/keras/engine/network.py", line 975, in save
signatures, options)
File "/home/max/.local/lib/python3.6/site-packages/tensorflow_core/python/keras/saving/save.py", line 112, in save_model
model, filepath, overwrite, include_optimizer)
File "/home/max/.local/lib/python3.6/site-packages/tensorflow_core/python/keras/saving/hdf5_format.py", line 109, in save_model_to_hdf5
save_weights_to_hdf5_group(model_weights_group, model_layers)
File "/home/max/.local/lib/python3.6/site-packages/tensorflow_core/python/keras/saving/hdf5_format.py", line 631, in save_weights_to_hdf5_group
param_dset = g.create_dataset(name, val.shape, dtype=val.dtype)
File "/usr/local/lib/python3.6/dist-packages/h5py/_hl/group.py", line 143, in create_dataset
if '/' in name:
TypeError: a bytes-like object is required, not 'str'
回溯(最近一次呼叫最后一次):
文件“/home/max/.local/lib/python3.6/site packages/IPython/core/interactiveshell.py”,第3343行,运行代码
exec(代码对象、self.user\u全局、self.user\n)
文件“”,第1行,在
my_model.save('my_model.h5',save_format='h5'))
文件“/home/max/.local/lib/python3.6/site packages/tensorflow_core/python/keras/engine/network.py”,第975行,保存
签名、选项)
文件“/home/max/.local/lib/python3.6/site packages/tensorflow\u core/python/keras/saving/save.py”,第112行,在save\u模型中
模型、文件路径、覆盖、包括(优化器)
文件“/home/max/.local/lib/python3.6/site packages/tensorflow\u core/python/keras/saving/hdf5\u format.py”,第109行,保存到hdf5
将权重保存到hdf5组(模型权重组、模型层)
文件“/home/max/.local/lib/python3.6/site packages/tensorflow\u core/python/keras/saving/hdf5\u format.py”,第631行,保存到hdf5\u组
param_dset=g.create_数据集(名称,val.shape,dtype=val.dtype)
文件“/usr/local/lib/python3.6/dist-packages/h5py/_-hl/group.py”,第143行,在创建数据集中
如果名称中有“/”:
TypeError:需要类似字节的对象,而不是“str”
不知道有什么问题。。。这是一个TF2问题吗?使用TF1.X保存为.h5
时从未遇到问题,但仍然可以将其保存为.pb
图形。但是,我希望将其设置为.h5
,因此这似乎是h5py库中的a,它应该接受字节
或unicodestr
,但在str
实例中失败。它应该在下一个版本中修复
您可以在本地安装中降级
h5py
版本,它应该可以解决此问题。这个问题是由3.0.0版引入的,所以早期版本应该可以工作。Tanks,这是我的问题。我安装了h5py>3,然后我降级到2.10.0版