【问题标题】:How to convert TensorFlow tensor to PyTorch tensor without converting to Numpy array?如何在不转换为 Numpy 数组的情况下将 TensorFlow 张量转换为 PyTorch 张量?
【发布时间】:2021-04-28 05:54:04
【问题描述】:
我想在 Tensorflow 中使用预训练的 Pytorch 模型,我需要将 tensorflow 张量转换为 pytorch 张量。但我不想将 pytorch 张量转换为 numpy 数组并将其转换为张量流张量,因为我收到“您必须为占位符张量提供值”的错误。
我在制作图表时需要这种转换,因此 tensorflow 张量没有价值并且不能转换为 numpy!
有什么解决办法吗?
【问题讨论】:
标签:
python
numpy
tensorflow
pytorch
【解决方案1】:
您对 Tensorflow 张量所做的操作会被“记住”,以便计算和反向传播梯度。 PyTorch 张量也是如此。所有这些最终都是在两个框架中训练模型所必需的。这也是你不能在两个框架之间转换张量的原因:它们有不同的操作和梯度计算系统。他们无法捕获超出其框架的任何操作。例如,您不能(截至 2021 年 1 月)在自定义损失函数中使用 python for 循环。它必须被实施到框架中才能工作。同样,也没有将 pytorch 操作转换为 TensorFlow 操作的实现。
This 答案显示了当您的张量定义明确(不是占位符)时它是如何完成的。但是目前没有办法将梯度从 Tensorflow 传播到 PyTorch,反之亦然。也许将来会对这两个框架进行某种大规模更新,使它们可以互操作,但我对此表示怀疑。最好分别使用它们。
因此,简而言之,您无法在两个框架之间转换占位符张量。您必须坚持使用其中一个库或使用具体的张量 + numpy 调解器在框架之间进行通信。