如何将 TensorFlow 张量转换为 PyTorch 张量而不转换为 Numpy 数组?

时间:2021-01-24 06:05:16

标签: python numpy tensorflow pytorch

我想在 Tensorflow 中使用预训练的 Pytorch 模型,我需要将 tensorflow 张量转换为 pytorch 张量。但是我不想将 pytorch 张量转换为 numpy 数组并将其转换为 tensorflow 张量,因为我收到了“您必须为占位符张量提供值”的错误。 我在制作图形时需要这种转换,因此 tensorflow 张量没有价值并且无法转换为 numpy! 有什么解决办法吗?

1 个答案:

答案 0 :(得分:2)

您对 Tensorflow 张量所做的操作会被“记住”,以便计算和反向传播梯度。 PyTorch 张量也是如此。所有这些最终都是在两个框架中训练模型所必需的。这也是你不能在两个框架之间转换张量的原因:它们有不同的操作和梯度计算系统。他们无法捕获发生在其框架之外的任何操作。例如,您不能(截至 2021 年 1 月)在自定义损失函数中使用 python for 循环。它必须被实施到框架中才能工作。同样,也没有将pytorch操作转换为Tensorflow操作的实现。

This 答案显示了当您的张量定义明确(不是占位符)时它是如何完成的。但是目前没有办法将梯度从 Tensorflow 传播到 PyTorch,反之亦然。也许将来这两个框架都会有某种大规模的更新,让它们可以互操作,但我对此表示怀疑。最好分别使用它们。

所以,简而言之,您不能在两个框架之间转换占位符张量。您必须坚持使用其中一个库或使用具体张量 + numpy 中介器在框架之间进行通信。