将Keras模型导出为SavedModel格式

时间:2019-12-23 17:58:19

标签: python tensorflow machine-learning keras export

将Keras生成的顺序模型保存为SavedModel格式时遇到问题。

https://www.tensorflow.org/guide/keras/save_and_serialize#export_to_savedmodel中所述, 要将Keras模型保存为TensorFlow可以使用的格式,我需要使用model.save()并提供save_format ='tf',但是我拥有的是:

Traceback (most recent call last):
  File "load_file2.py", line 14, in <module>
    classifier.save('/tmp/keras-model.pb', save_format='tf')

我的代码示例是:

import pandas as pd
import tensorflow as tf;
import keras;
from keras import Sequential
from keras.layers import Dense
import json;
import numpy as np;

classifier = Sequential()
classifier.add(Dense(4, activation='relu', kernel_initializer='random_normal', input_dim=4))
classifier.add(Dense(1, activation='sigmoid', kernel_initializer='random_normal'))
classifier.compile(optimizer ='adam',loss='binary_crossentropy', metrics = ['accuracy'])

classifier.save('/tmp/keras-model.pb', save_format='tf')

我的python是3.6.10。

我的tensorflow是1.14和2.0(我在两者上都进行了测试,结果相同)。

我的keras是2.3.1。

那里出了什么问题或者应该更改什么以保存我的模型然后由tensorflow使用?

或者,也许,还有另一种以TensorFlow2作为后端从Keras保存模型的方法?

谢谢。

2 个答案:

答案 0 :(得分:1)

我运行了您的代码。使用tensorflow 1.15,我遇到类型错误,说save_format不是一个已知参数。使用tensorflow 2,我建议使用tf.keras而不是本地keras。因此,我尝试使用tf.keras而不是keras。这次代码运行没有错误。 另外,在保存模型之前,我没有找到合适的方法。

使用TF2.0:

import pandas as pd
import tensorflow as tf;
##Change.
from tensorflow.keras import Sequential
from tensorflow.keras.layers import Dense
import json;
import numpy as np;

classifier = Sequential()
classifier.add(Dense(4, activation='relu', kernel_initializer='random_normal', input_dim=4))
classifier.add(Dense(1, activation='sigmoid', kernel_initializer='random_normal'))
classifier.compile(optimizer ='adam',loss='binary_crossentropy', metrics = ['accuracy'])

classifier.save('/tmp/keras-model.pb', save_format='tf')

结果:

INFO:tensorflow:Assets written to: /tmp/keras-model.pb/assets

答案 1 :(得分:0)

我认为仅必须指定保存位置,而不是SavedModel格式的保存格式,例如, classifier.save('/tmp/) 它将自动使用模型名称保存模型。 或者,您也可以说h5

将其另存为classifier.save('keras-model.h5')模型