2017-06-09 210 views
6

我有一個訓練有素的Tensorflow模型和權重矢量已分別導出到protobuf和權重文件。如何將訓練有素的Tensorflow模型轉換爲Keras?

如何將這些轉換爲Keras可以使用的JSON或YAML和HDF5文件?

我有Tensorflow模型的代碼,因此也可以將tf.Session轉換爲keras模型並將其保存在代碼中。

回答

2

目前,在Tensorflow或Keras中沒有直接內置的支持將凍結模型或檢查點文件轉換爲hdf5格式。

但是既然你提到你有Tensorflow模型的代碼,你將不得不在Keras中重寫那個模型的代碼。然後,您將必須從檢查點文件中讀取變量的值,並使用layer.load_weights(weights)方法將其分配給Keras模型。

除了這種方法,我建議你直接在凱拉斯進行培訓,因爲它聲稱Keras' optimizers are 5-10% times faster than Tensorflow's optimizers。其他方法是用tf.contrib.keras模塊在Tensorflow中編寫代碼並直接以hdf5格式保存文件。

1

不確定這是你正在尋找的,但我碰巧只是在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導入順序

希望幫助你想要去得到你。基本上一旦集成,您就可以照常處理您的模型/重量輸出。

2

我認爲keras的回調也是一個解決方案。

的CKPT文件可以通過TF與保存:

saver = tf.train.Saver() 
saver.save(sess, checkpoint_name) 

,並在Keras加載關卡,你需要一個回調類如下:

class MyCallbacks(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') 
testCallBack = MyCallbacks(pretrian_model_path='./XXXX.ckpt') 
model.fit(x_train, y_train, batch_size=128, epochs=20, callbacks=[testCallBack]) 

這樣會好的。 我認爲這很容易實現,並希望它有幫助。