没有onnx,如何手动将pytorch模型转换为tensorflow模型?
由于ONNX支持有限的模型,我试图通过直接分配参数来进行转换,但得到的tensorflow模型未能显示所需的精度。详情如下:没有onnx,如何手动将pytorch模型转换为tensorflow模型?,tensorflow,pytorch,exchange-server,onnx,Tensorflow,Pytorch,Exchange Server,Onnx,由于ONNX支持有限的模型,我试图通过直接分配参数来进行转换,但得到的tensorflow模型未能显示所需的精度。详情如下: 源模型是在MNIST数据集上训练的Lenet 我首先通过model提取每个模块及其参数,命名为_parameters(),并将它们保存到字典中,其中键是模块的名称,值是参数 然后,我构建并启动了一个具有相同架构的tensorflow模型 最后,我将pytroch模型的每一层参数分配给tensorflow模型 然而,得到的张量流模型的精度仅为20%左右。因此,我的问题是,是
PS:假设分配过程是正确的。正如jodag的评论所提到的,Tensorflow和PyTorch中的运算符表示法之间存在许多差异,可能会导致您的工作流中出现差异 我们建议使用以下方法:
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