** TF2JAX和JAX2TF.CALL_TF都是既专为Tensorflow和Jax之间的互操作性设计的工具,但是它们具有不同的目的,并且在性能和可用性方面具有独特的特征。
** TF2JAX是一个将TensorFlow功能和模型转换为JAX功能的库,使用户可以在JAX Codebases中重复使用和微调现有的TensorFlow模型。此转换使JAX用户可以将JAX转换应用于“ JIT”,“ grad”和“ vmap”之类的变换为转换的函数。 TF2JAX支持TensorFlow OP的子集,由于其透明的转换过程,对于调试和内省特别有用[1] [5]。但是,它可能不支持所有张力流的功能,并且性能会根据所使用的特定操作而有所不同。
** JAX2TF.CALL_TF,另一方面,JAX功能可以直接调用TensorFlow功能。这种方法通过在急切的执行过程中推迟到TensorFlow和XLA进行编译代码来支持所有TensorFlow OPS。它对使用TensorFlow库或在JAX中使用TensorFlow SavedModels是有益的。但是,它仅支持一组有限的jax变换(``jit','grad',`pmap`和`remat''),函数以“黑匣子”为jax,限制了``黑框'',限制了诸如``vmap''[vmap'[ 1] [3]。
在性能方面,TF2JAX可能会为由JAX提供良好支持的操作提供更好的性能,尤其是与JAX的“ JIT”汇编结合使用时。但是,由于jax呼叫TensorFlow函数的开销,JAX2TF.CALL_TF可能会较慢,尽管它为所有TensorFlow OPS提供了全面的支持。
关于可用性,TF2JAX更适合想要将TensorFlow模型集成到JAX工作流中的用户,同时利用JAX的高级功能(例如VMAP”。 JAX2TF.CALL_TF对于需要在JAX中直接使用特定张量库或模型而无需转换它们的用户更方便。
总体而言,TF2JAX和JAX2TF.CALL_TF之间的选择取决于您是否优先考虑将JAX在转换的TensorFlow模型上使用JAX的高级功能,还是需要将TensorFlow功能无缝整合到JAX工作流中。
引用:[1] https://github.com/google-deepmind/tf2jax
[2] https://www.reddit.com/r/machinelearning/comments/1b08qv6/d_is_it_it_worth_switching_to_to_jax_from/
[3] https://github.com/google/jax/blob/main/jax/jax/experiention/jax2tf/readme.md
[4] https://discuss.ai.google.dev/t/is-google-replacing-tensorflow-with-jax/18015
[5] https://modelzoo.co/model/tf2jax
[6] https://stackoverflow.com/questions/66711706/jax-jit-and-and-dynamic-shapes-a-regression-from-tensorflow
[7] https://stackoverflow.com/questions/70356126/is-there-there-there-a-module-to-convert-a-tensorflow-nn-to-jax
[8] https://livebook.manning.com/book/deep-learning-with-jax/chapter-2/v-11/