没有onnx,如何手动将pytorch模型转换为tensorflow模型?

Withou onnx, how to convert a pytorch model into a tensorflow model manually?

由于ONNX支持的模型有限,我尝试通过直接赋参的方式进行转换,但是得到的tensorflow模型未能达到预期的精度。详情如下:

  1. 源模型是在 MNIST 数据集上训练的 Lenet。
  2. 我首先通过model.named_parameters()提取了每个模块及其参数,并将它们保存到一个字典中,其中键是模块的名称,值是参数
  3. 然后,我构建并启动了一个具有相同架构的tensorflow模型
  4. 最后,我将pytroch模型的每一层参数赋值给tensorflow模型

然而,得到的tensorflow模型的准确率只有20%左右。因此,我的问题是,是否可以通过这种方法转换pytorch模型?。如果是,导致不良结果的可能问题是什么?如果没有,请说明原因。

PS: 假设赋值过程是正确的。

正如 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