第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

TensorFlow Lite 無法識別操作 VarHandleOp

TensorFlow Lite 無法識別操作 VarHandleOp

汪汪一只貓 2023-10-18 16:35:11
我正在嘗試將 TF 模型轉(zhuǎn)換為 TFLite。模型以 .pb格式保存,我使用以下代碼對其進行了轉(zhuǎn)換:import osimport tensorflow as tffrom tensorflow.core.protobuf import meta_graph_pb2export_dir = os.path.join('export_dir', '0')if not os.path.exists('export_dir'):    os.mkdir('export_dir')tf.compat.v1.enable_control_flow_v2()tf.compat.v1.enable_v2_tensorshape()# I took this function from a tutorial on the TF websitedef wrap_frozen_graph(graph_def, inputs, outputs):    def _imports_graph_def():        tf.compat.v1.import_graph_def(graph_def, name="")    wrapped_import = tf.compat.v1.wrap_function(_imports_graph_def, [])    import_graph = wrapped_import.graph    return wrapped_import.prune(            inputs, outputs)graph_def = tf.compat.v1.GraphDef()loaded = graph_def.ParseFromString(open(os.path.join(export_dir, 'saved_model.pb'),'rb').read())concrete_func = wrap_frozen_graph(        graph_def, inputs=['extern_data/placeholders/data/data:0', 'extern_data/placeholders/data/data_dim0_size:0'],    outputs=['output/output_batch_major:0'])concrete_func.inputs[0].set_shape([None, 50])concrete_func.inputs[1].set_shape([None])concrete_func.outputs[0].set_shape([None, 100])converter = tf.lite.TFLiteConverter.from_concrete_functions([concrete_func])converter.experimental_new_converter = Trueconverter.post_training_quantize=Trueconverter.target_spec.supported_ops = [tf.lite.OpsSet.TFLITE_BUILTINS,                                               tf.lite.OpsSet.SELECT_TF_OPS]converter.allow_custom_ops=Truetflite_model = converter.convert()# Save the model.if not os.path.exists('tflite'):    os.mkdir('tflite')output_model = os.path.join('tflite', 'model.tflite')with open(output_model, 'wb') as f:     f.write(tflite_model)現(xiàn)在,我在代碼中找不到任何內(nèi)容VarHandleOp,我發(fā)現(xiàn)它實際上是在tensorflow中(https://www.tensorflow.org/api_docs/python/tf/raw_ops/VarHandleOp)。那么,為什么TFLite無法識別呢?
查看完整描述

1 回答

?
開滿天機

TA貢獻1786條經(jīng)驗 獲得超13個贊

在模型轉(zhuǎn)換的情況下提供最小的可重現(xiàn)示例當(dāng)然很困難,但是這些問題將受益于更好的指針。

如果你有一個“凍結(jié)圖”(其中tf.Graph?變量已變成常量

(粗體突出部分是我的)。顯然,您的圖表包含VarHandleOp(這同樣適用于VariableVariableV2節(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ù)來跳過檢查。


查看完整回答
反對 回復(fù) 2023-10-18
  • 1 回答
  • 0 關(guān)注
  • 146 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號