我正试图将保存的TensorFlow模型转换为ONNX格式,但我得到以下错误。
in _load_nodes
slot_variable = optimizer_object.add_slot(
AttributeError: '_UserObject' object has no attribute 'add_slot'
我使用Keras(2.6)将模型保存为model.save(os.path.join("models", 'modelData'))
。然后,我使用python -m tf2onnx.convert --saved-model modelData --output model.onnx
来转换模型。
使用keras2onnx
不适合我,因为库太旧了(他们的存储库重定向到tf2onnx
)。
我尝试从检查点文件转换,通过使用python -m tf2onnx.convert --checkpoint checkpoint/keras_metadata.pb --output model.onnx --inputs input0:0,input1:0 --outputs output0:0
,但我得到以下错误。
saver = tf_import_meta_graph(model_path, clear_devices=True)
File "####anaconda3envs##libsite-packagestensorflowpythontrainingsaver.py", line 1465, in import_meta_graph
return _import_meta_graph_with_return_elements(meta_graph_or_file,
File "####anaconda3envs##libsite-packagestensorflowpythontrainingsaver.py", line 1481, in _import_meta_graph_with_return_elements
meta_graph_def = meta_graph.read_meta_graph_file(meta_graph_or_file)
File "####anaconda3envs##libsite-packagestensorflowpythonframeworkmeta_graph.py", line 643, in read_meta_graph_file
text_format.Merge(file_content.decode("utf-8"), meta_graph_def)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 1: invalid start byte
在保存模型之前,我应该做些什么特别的事情吗?会不会是版本不匹配?任何反馈都会很有帮助。
我通过训练后立即转换模型解决了这个问题。我使用了下面这段代码:
(onnx_model_proto, storage) = tf2onnx.convert.from_keras(model)
with open(os.path.join("models", 'modelData.onnx'), "wb") as f:
f.write(onnx_model_proto.SerializeToString())
然而,这并不能解决保存模型的转换问题。