PyTorch模型转换为C++ Libtorch模型 Comparison exception: The values for attribute ‘shape‘ do not match

解决这个问题很简单,在torch.jit.trace中加入参数check_trace=False

traced_script_module = torch.jit.trace(model, example_input, check_trace=False)

即可。在 PyTorch 中,torch.jit.trace通过运行模型的前向传播并记录下计算的操作来创建模型的计算图。这个过程假设模型的行为是确定的,也就是说,对于同样的输入,模型每次的运行结果和操作顺序都是相同的。

如果在两次前向传播中,模型的行为不一致(例如,计算的操作顺序改变,或者执行了不同的操作),那么torch.jit.trace记录下的计算图就可能不准确地反映模型的行为。这可能导致以下问题:

  • 结果不正确:由于计算图无法准确反映模型的行为,因此通过 TorchScript 运行模型可能得到错误的结果。
  • 模型优化不正确:TorchScript 会对计算图进行优化,如果计算图不准确,那么优化可能就会导致错误的结果。
  • 导出模型不正确:TorchScript 模型可以被序列化并保存到磁盘,然后在其他环境(包括其他的机器,甚至其他的编程语言)中加载和运行。如果计算图不准确,那么导出的模型可能就无法在其他环境中正确运行。

如果你的模型在前向传播过程中包含随机性,或者存在依赖于输入的控制流,那么使用torch.jit.script可能会是更好的选择。torch.jit.script会分析模型的源代码,从而能够处理更复杂的模型行为。
当然这些问题是理论上存在的,如果你对模型有自信(比如我对我的模型有自信),或者只是想解决这个问题,那么就可以这么做。

你可能感兴趣的:(pytorch,人工智能,python)