我想在Tensorflow中使用预训练的Pytorch模型,我需要将Tensorflow张量转换为Pytorch张量。但我不想把pytorch张量转换成numpy数组再转换成tensorflow张量因为我得到了错误"您必须为占位符张量提供一个值。当我制作图形时,我需要这种转换,所以tensorflow张量没有值,不能转换为numpy!有解决办法吗?
对Tensorflow张量所做的操作是"记住的"为了计算和反向传播梯度。PyTorch张量也是如此。所有这些最终都需要在两个框架中训练模型。这也是为什么你不能在两个框架之间转换张量的原因:它们有不同的操作和梯度计算系统。它们无法捕获发生在其框架之外的任何操作。例如,你不能(自2021年1月起)在自定义损失函数中使用python For循环。它必须被实现到框架中才能工作。同样,没有将pytorch操作转换为Tensorflow操作的实现。
这个答案显示了当你的张量是定义良好的(不是占位符)时是如何完成的。但是目前没有办法将梯度从Tensorflow传播到PyTorch,反之亦然。也许将来会对这两个框架进行某种大规模的更新,使它们能够互操作,但我对此表示怀疑。两者最好分开使用。
所以,简而言之,你不能转换两个框架之间的占位符张量。你必须坚持使用其中一个库,或者使用具体的张量+ numpy中介来在框架之间进行通信。