我有一个训练有素的Tensorflow模型和权重向量,它们分别导出到protobuf和权重文件。
如何将这些转换为可由Keras使用的JSON或YAML和HDF5文件?
我有Tensorflow模型的代码,所以转换它也是可以接受的 tf.Session
到keras模型并将其保存在代码中。
我有一个训练有素的Tensorflow模型和权重向量,它们分别导出到protobuf和权重文件。
如何将这些转换为可由Keras使用的JSON或YAML和HDF5文件?
我有Tensorflow模型的代码,所以转换它也是可以接受的 tf.Session
到keras模型并将其保存在代码中。
目前,Tensorflow或Keras中没有直接内置支持将冻结模型或检查点文件转换为hdf5格式。
但是既然你已经提到过你拥有Tensorflow模型的代码,你就必须在Keras中重写该模型的代码。然后,您必须从检查点文件中读取变量的值,并使用它将其分配给Keras模型 layer.load_weights(weights)
方法。
除了这种方法,我建议你直接在Keras进行培训,因为它声称 Keras的优化器比Tensorflow的优化器快5-10%。其他方法是在Tensorflow中编写代码 tf.contrib.keras 模块并以hdf5格式直接保存文件。
我认为keras的回调也是一种解决方案。
TF可以保存ckpt文件:
saver = tf.train.Saver()
saver.save(sess, checkpoint_name)
要在Keras加载检查点,您需要一个回调类,如下所示:
class RestoreCkptCallback(keras.callbacks.Callback):
def __init__(self, pretrained_file):
self.pretrained_file = pretrained_file
self.sess = keras.backend.get_session()
self.saver = tf.train.Saver()
def on_train_begin(self, logs=None):
if self.pretrian_model_path:
self.saver.restore(self.sess, self.pretrian_model_path)
print('load weights: OK.')
然后在你的keras脚本中:
model.compile(loss='categorical_crossentropy', optimizer='rmsprop')
restore_ckpt_callback = MyCallbacks(pretrian_model_path='./XXXX.ckpt')
model.fit(x_train, y_train, batch_size=128, epochs=20, callbacks=[restore_ckpt_callback])
那没关系。 我认为它很容易实现并希望它有所帮助。
不确定这是否是您正在寻找的,但我碰巧只是对TF 1.2中新发布的keras支持做同样的事情。您可以在此处找到有关API的更多信息: https://www.tensorflow.org/api_docs/python/tf/contrib/keras
为了节省您一点时间,我还发现我必须包含如下所示的keras模块,并在API文档中显示附加的附加python.keras。
来自tensorflow.contrib.keras.python.keras.models import Sequential
希望有助于您到达目的地。基本上一旦集成,您就可以像往常一样处理模型/重量输出。