Serialization#
Save a model and any Proto class#
This ONNX graph needs to be serialized into one contiguous memory buffer. Method SerializeToString is available in every ONNX objects.
with open("model.onnx", "wb") as f:
f.write(onnx_model.SerializeToString())
This method has the following signature.
- class onnx.ModelProto#
- SerializeToString()#
Serializes the message to a string, only for initialized messages.
Every Proto class implements method SerializeToString. Therefore the following code works with any class described in page Protos.
with open("proto.pb", "wb") as f:
f.write(proto.SerializeToString())
Next example shows how to save a NodeProto.
from onnx import NodeProto
node = NodeProto()
node.name = "example-type-proto"
node.op_type = "Add"
node.input.extend(["X", "Y"])
node.output.extend(["Z"])
with open("node.pb", "wb") as f:
f.write(node.SerializeToString())
Load a model#
Following function only automates the loading of a class ModelProto. Next sections shows how to restore any other proto class.
- onnx.load(f: Union[IO[bytes], str], format: Optional[Any] = None, load_external_data: bool = True) ModelProto #
Loads a serialized ModelProto into memory load_external_data is true if the external data under the same directory of the model and load the external data If not, users need to call load_external_data_for_model with directory to load
- Parameters:
f – can be a file-like object (has “read” function) or a string containing a file name
format – for future use
- Returns:
Loaded in-memory ModelProto
from onnx import load
onnx_model = load("model.onnx")
Or:
from onnx import load
with open("model.onnx", "rb") as f:
onnx_model = load(f)
Next function does the same from a bytes array.
Load a Proto#
Proto means here any type containing data including a model, a tensor, a sparse tensor, any class listed in page Protos. The user must know the type of the data he needs to restore and then call method ParseFromString. protobuf does not store any information about the class of the saved data. Therefore, this class must be known before restoring an object.
Next example shows how to restore a NodeProto.
from onnx import NodeProto
tp2 = NodeProto()
with open("node.pb", "rb") as f:
content = f.read()
tp2.ParseFromString(content)
print(tp2)
input: "X"
input: "Y"
output: "Z"
name: "example-type-proto"
op_type: "Add"
A shortcut exists for TensorProto: