1 回答

TA貢獻1786條經(jīng)驗 獲得超13個贊
在模型轉(zhuǎn)換的情況下提供最小的可重現(xiàn)示例當(dāng)然很困難,但是這些問題將受益于更好的指針。
如果你有一個“凍結(jié)圖”(其中
tf.Graph
?變量已變成常量)
(粗體突出部分是我的)。顯然,您的圖表包含VarHandleOp
(這同樣適用于Variable
和VariableV2
節(jié)點),并且根據(jù)此定義并未“凍結(jié)”。您的一般方法是有意義的,但您需要一個圖表,其中包含節(jié)點形式的變量的實際訓(xùn)練值Const
。您在訓(xùn)練時需要變量,但在推理時需要變量,并且應(yīng)該將其烘焙到圖中。TFLite 作為推理時間框架,不支持變量。
你的其余想法似乎不錯。TFLiteConverter.from_concrete_functions
目前正好需要 1?concrete_function
,但這就是您通過包裝圖表得到的結(jié)果。如果運氣足夠好,它可能會起作用。
有一個實用程序tensorflow/python/tools/freeze_graph.py
會盡力用從最新檢查點文件中獲取的常量替換 Graph.pb 中的變量。如果您查看其代碼,可以使用保存的元圖 (?checkpoint_name?.meta ) 文件或?qū)⒐ぞ咧赶蛴?xùn)練目錄,從而消除大量猜測;另外,我認(rèn)為提供模型目錄是獲得單個凍結(jié)圖和分片模型的唯一方法。
我注意到您在示例中input
使用了 just 。tf.nest.map_structure(import_graph.as_graph_element, inputs)
您可能有其他原因,但如果您這樣做是因為as_graph_element
抱怨數(shù)據(jù)類型/形狀,則可以通過正確凍結(jié)圖形來解決這個問題。從凍結(jié)圖中獲得的具體函數(shù)將對其輸入形狀和數(shù)據(jù)類型有一個很好的了解。一般來說,需要手動設(shè)置它們是出乎意料的,而且你這樣做的事實對我來說似乎很奇怪(但我并不聲稱對 TF 的這個黑暗角落有廣泛的經(jīng)驗)。
map_structure
有一個關(guān)鍵字參數(shù)來跳過檢查。
添加回答
舉報