保存keras模型为tensorflow的二进制模型可以通过Tensorflow的saved_model API实现。下面分为以下步骤:
- 加载keras模型
- 将keras模型转换为Tensorflow模型
- 保存Tensorflow模型
下面是完整攻略:
加载keras模型
首先,需要加载keras模型。假设我们的keras模型存储在 model.h5
文件中,可以使用以下代码加载模型:
from keras.models import load_model
keras_model = load_model('model.h5', compile=False)
其中 compile=False
参数表示不需要重新编译模型。
将keras模型转换为Tensorflow模型
使用keras模型创建新的Tensorflow模型,可以使用如下代码:
import tensorflow as tf
# 创建一个新的Tensorflow session
tf_session = tf.Session()
# 使用keras模型的计算图创建Tensorflow模型
tf_graph = tf_session.graph
with tf_graph.as_default():
tf_input = tf.placeholder(dtype=tf.float32, shape=keras_model.input_shape)
tf_output = keras_model(tf_input)
tf.saved_model.simple_save(
sess=tf_session,
export_dir='model',
inputs={'input': tf_input},
outputs={'output': tf_output})
在代码中,首先创建了一个新的Tensorflow session,并使用keras模型的计算图创建了一个新的Tensorflow模型,包含一个placeholder用于输入和输出。最后,通过调用 tf.saved_model.simple_save()
方法,保存了模型。
在保存模型的过程中,需要指定导出目录 export_dir
,以及输入输出张量的名称以及张量的实例,以便后面加载使用。
保存Tensorflow模型
在将keras模型转换为Tensorflow模型之后,可以通过 tf.saved_model.save()
方法,将模型保存到磁盘上:
tf_saved_model_dir = 'model_saved'
tf.saved_model.save(
sess=tf_session,
export_dir=tf_saved_model_dir,
inputs={'input': tf_input},
outputs={'output': tf_output})
其中 export_dir
参数表示保存文件路径,其他参数同上。这将保存所有关于模型的信息,包括网络结构、参数、损失函数等等,以便之后可以快速重现该模型或在其他地方使用该模型。
示例说明
假设我们有一个简单的keras模型用于MNIST手写数字分类,包含一个输入层、两个隐藏层和一个输出层,代码如下:
from keras.models import Sequential
from keras.layers import Dense
# 定义模型
model = Sequential()
model.add(Dense(128, input_dim=784, activation='relu'))
model.add(Dense(64, activation='relu'))
model.add(Dense(10, activation='softmax'))
# 编译模型
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
# 训练模型
model.fit(X_train, y_train, epochs=10, batch_size=32, validation_data=(X_test, y_test))
# 保存模型
model.save('model.h5')
现在,我们要将该模型保存为Tensorflow的二进制模型,可以使用以下代码:
import tensorflow as tf
from keras.models import load_model
# 加载keras模型
keras_model = load_model('model.h5', compile=False)
# 将keras模型转换为Tensorflow模型
tf_session = tf.Session()
tf_graph = tf_session.graph
with tf_graph.as_default():
tf_input = tf.placeholder(dtype=tf.float32, shape=keras_model.input_shape)
tf_output = keras_model(tf_input)
tf.saved_model.simple_save(
sess=tf_session,
export_dir='model',
inputs={'input': tf_input},
outputs={'output': tf_output})
# 保存Tensorflow模型
tf_saved_model_dir = 'model_saved'
tf.saved_model.save(
sess=tf_session,
export_dir=tf_saved_model_dir,
inputs={'input': tf_input},
outputs={'output': tf_output})
以上是将keras模型保存为Tensorflow的二进制模型的完整攻略,其中包含了一个示例,以MNIST手写数字分类任务为例。另外还可以参考tensorflow官方文档中的Tensorflow Serving 部分。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:keras模型保存为tensorflow的二进制模型方式 - Python技术站