2017-07-04 123 views
0

我有一個在Keras中訓練過的模型,我使用它的中間層輸出,使用K.function()。有沒有辦法將這個對象保存爲張量流圖?我想在張量流服務中使用這個對象,但我沒有看到凍結Keras的方法K.function()對象冷凍Keras K.function()tensorflow圖

+0

不知道我是否理解正確,但如果你想要的是凍結圖層,你可以使用每個圖層的可訓練屬性,如[這裏]所述(https://github.com/fchollet/keras/issues/4471)和[這裏](https://keras.io/getting-started/faq/) – Mathias

+0

這不是我要找的。我正在將它凍結成張量流圖,以便我可以在張量流服務中使用它。不是keras模型或圖層 –

+0

看看這個:https://stackoverflow.com/questions/43434292/benchmark-keras-model-using-tensforflow-benchmark – marcopah

回答

0

我最終發現它,認爲我應該在這裏發佈它,以防將來任何人需要這樣做。我必須從K.function()對象中獲取節點名稱。

encoder = K.function([...]) # define your Function object 
encoder_tensor_names = [t.name for t in encoder.outputs] 
encoder_node_names = [tn.replace(':0', '') for tn in encoder_tensor_names] # node names are tensor names without :0 
graph_def = tf.graph_util.convert_variables_to_constants(
    K.get_session(), 
    K.get_session().graph.as_graph_def(), 
    encoder_node_names 
) 

然後按照代碼https://stackoverflow.com/a/44044405/5453184寫出來的二進制文件(或文本)文件。它的優點在於tensorflow足夠聰明,只保留前饋操作所需的圖形部分,在我的情況下,它也凍結了字嵌入,所以我不再需要單獨的單詞矢量文件。