使用onnx,如何将pytorch模型手动转换为张量流模型?

时间:2019-10-31 05:34:59

标签: tensorflow pytorch exchange-server onnx

由于ONNX支持有限的模型,因此我尝试通过直接分配参数来进行此转换,但是获得的tensorflow模型未能显示所需的精度。详细信息如下:

  1. 源模型经过Lenet训练的MNIST数据集。
  2. 我首先通过model.named_pa​​rameters()提取每个模块及其参数,并将其保存到字典中,其中的键是模块的名称,值是参数
  3. 然后,我建立并启动了具有相同架构的张量流模型
  4. 最后,我将pytroch模型的每一层参数分配给张量流模型

但是,获得的张量流模型的精度仅为20%左右。因此,我的问题是可以通过这种方法转换pytorch模型吗?如果是,导致不良结果的可能原因是什么?如果没有,请解释原因。

PS:假设分配过程正确。

1 个答案:

答案 0 :(得分:2)

正如jodag的评论所提到的,Tensorflow和PyTorch中的运算符表示之间存在许多差异,这可能会导致工作流中的差异。

我们建议使用以下方法:

  1. 使用ONNX exporter in PyTorch将模型导出为ONNX格式。
import torch.onnx

# Argument: model is the PyTorch model 
# Argument: dummy_input is a torch tensor

torch.onnx.export(model, dummy_input, "LeNet_model.onnx")
  1. 使用onnx-tensorflow backend将ONNX模型转换为Tensorflow。
import onnx

from onnx_tf.backend import prepare

onnx_model = onnx.load("LeNet_model.onnx")  # load onnx model
tf_rep = prepare(onnx_model)  # prepare tf representation
tf_rep.export_graph("LeNet_model.pb")  # export the model