近期由于业务需要,需要将训练好的模型转为ONNX格式,为此颇费了一番功夫,在此总结一下吧。。
1、ONNX是一种神经网络模型保存的中间格式,支持多种格式的模型转为ONNX,也支持使用ONNX导入多种格式的模型,具体见https://github.com/onnx/tutorials;目前其实ONNX对于模型的支持还不是太好,主要表现在一些op还不能够支持;
2、在PyTorch下要将模型保存成ONNX格式需要使用torch.onnx.export()函数,使用该函数的时候需要传入下面参数:
--model:待保存的model,也就是你在程序中已经训练好或者初始化好的模型
--input_shape:指定输入数据的大小,也就是输入数据的形状,是一个包含输入形状元组的列表;
--name:模型的名称,即模型的保存路径;
--verbrose:True或者False,用来指定输出模型时是否将模型的结构打印出来;
--input_names:输入数据节点的名称,数据类型为包含字符串的列表;一般将这个名称设为['data'];
--output_names:输出数据节点的名称,类型与输入数据的节点名称相同;
在成功导出模型后,可以使用ONNX再对模型进行检查:
importonnx#Load the ONNX model
model = onnx.load("alexnet.onnx")#Check that the IR is well formed
onnx.checker.check_model(model)#Print