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

没有onnx,如何手动将pytorch模型转换为tensorflow模型?,tensorflow,pytorch,exchange-server,onnx,Tensorflow,Pytorch,Exchange Server,Onnx,由于ONNX支持有限的模型,我试图通过直接分配参数来进行转换,但得到的tensorflow模型未能显示所需的精度。详情如下: 源模型是在MNIST数据集上训练的Lenet 我首先通过model提取每个模块及其参数,命名为_parameters(),并将它们保存到字典中,其中键是模块的名称,值是参数 然后,我构建并启动了一个具有相同架构的tensorflow模型 最后,我将pytroch模型的每一层参数分配给tensorflow模型 然而,得到的张量流模型的精度仅为20%左右。因此,我的问题是,是

由于ONNX支持有限的模型,我试图通过直接分配参数来进行转换,但得到的tensorflow模型未能显示所需的精度。详情如下:

  • 源模型是在MNIST数据集上训练的Lenet
  • 我首先通过model提取每个模块及其参数,命名为_parameters(),并将它们保存到字典中,其中键是模块的名称,值是参数
  • 然后,我构建并启动了一个具有相同架构的tensorflow模型
  • 最后,我将pytroch模型的每一层参数分配给tensorflow模型
  • 然而,得到的张量流模型的精度仅为20%左右。因此,我的问题是,是否可以用这种方法转换pytorch模型?。如果是,可能导致不良结果的问题是什么?如果没有,请解释原因


    PS:假设分配过程是正确的。

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

    我们建议使用以下方法:

  • 使用将模型导出为ONNX格式
  • 使用将ONNX模型转换为Tensorflow

  • tensorflow和pytorch中的ops有一些小细节不完全相同(例如填充可能不同,ε等)。这就是为什么会有与onnx或mmdnn等中间表示形式之间的转换,这些表示形式经过了仔细的一致性测试。如果你想自己做这件事,并且想对它有信心,你可能会想首先为你要使用的每个操作设计测试,以确保一致性(conv层、批处理规范、激活、数据格式、数据扩充等)。非常感谢!我放弃手工转换…非常感谢!pytorch应该包括onnx模块(:-。我会尝试一下。上面提到的转换运行时没有错误。但是,当我尝试将模型进一步转换为tflite时,我得到
    import\u tensorflow.cc:2619]检查失败:status.ok()属性“data_format”的值意外。预期的“NHWC”致命Python错误:中止
    调用
    prepare
    后是否应修复此错误?能否告诉我您使用的TF、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")
    
    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