keras的创建者Francois Chollet在04/2017 "you cannot turn an arbitrary TensorFlow checkpoint into a Keras model. What you can do, however, is build an equivalent Keras model then load into this Keras model the weights"中说,见https://github.com/keras-team/keras/issues/5273 . 据我所知,这并没有改变 .
一个小例子:
首先,您可以像这样提取张量流检查点的权重
PATH_REL_META = r'checkpoint1.meta'
# start tensorflow session
with tf.Session() as sess:
# import graph
saver = tf.train.import_meta_graph(PATH_REL_META)
# load weights for graph
saver.restore(sess, PATH_REL_META[:-5])
# get all global variables (including model variables)
vars_global = tf.global_variables()
# get their name and value and put them into dictionary
sess.as_default()
model_vars = {}
for var in vars_global:
try:
model_vars[var.name] = var.eval()
except:
print("For var={}, an exception occurred".format(var.name))
4 回答
目前,Tensorflow或Keras中没有直接内置支持将冻结模型或检查点文件转换为hdf5格式 .
但是既然你已经提到过你拥有Tensorflow模型的代码,你就必须在Keras中重写该模型的代码 . 然后,您必须从检查点文件中读取变量的值,并使用
layer.load_weights(weights)
方法将其分配给Keras模型 .除了这种方法,我建议你直接在Keras进行培训,因为它声称Keras' optimizers are 5-10% times faster than Tensorflow's optimizers . 其他方法是使用tf.contrib.keras模块在Tensorflow中编写代码,并以hdf5格式直接保存文件 .
我认为keras的回调也是一种解决方案 .
TF可以保存ckpt文件:
要在Keras加载检查点,您需要一个回调类,如下所示:
然后在你的keras脚本中:
那没关系 . 我认为它很容易实现并希望它有所帮助 .
不确定这是否是您正在寻找的,但我碰巧只是对TF 1.2中新发布的keras支持做同样的事情 . 您可以在此处找到有关API的更多信息:https://www.tensorflow.org/api_docs/python/tf/contrib/keras
为了节省您一点时间,我还发现我必须包含如下所示的keras模块,并在API文档中显示附加的附加python.keras .
希望有助于您到达目的地 . 基本上一旦集成,您就可以像往常一样处理模型/重量输出 .
keras的创建者Francois Chollet在04/2017 "you cannot turn an arbitrary TensorFlow checkpoint into a Keras model. What you can do, however, is build an equivalent Keras model then load into this Keras model the weights"中说,见https://github.com/keras-team/keras/issues/5273 . 据我所知,这并没有改变 .
一个小例子:
首先,您可以像这样提取张量流检查点的权重
导出张量流模型以用于张量板也可能有用,参见https://stackoverflow.com/a/43569991/2135504
其次,您通常会构建keras模型,并通过“model.compile”完成它 . 请注意,您需要按名称定义每个图层,然后将其添加到模型中,例如
第三,您可以使用tensorflow值设置权重,例如