JAX vs Tensorflow vs Pytorch:构建变分自动编码器 (VAE)

在从头开始开发和训练变分自动编码器时,对 JAX、Tensorflow 和 Pytorch 进行并排比较

来源:AI夏令营

我非常好奇 JAX 与 Pytorch 或 Tensorflow 相比如何。我认为比较框架的最佳方法是在两者中从头开始构建相同的东西。这正是我所做的。在本文中,我同时使用 JAX、Tensorflow 和 Pytorch 开发变分自动编码器。我将并排展示每个组件的代码,以便找到差异、相似之处、弱点和优势。

我们开始吧?

序言

在我们探索代码之前要注意的一些事项:

    我将在 JAX 上使用 Flax,这是 Google 开发的神经网络库。它包含许多现成的深度学习模块、层、函数和操作。对于 Tensorflow 实现,我将依赖 Keras 抽象。对于 Pytorch,我将使用标准 nn.module。
  • 我将在 JAX 上使用 Flax,JAX 是 Google 开发的神经网络库。它包含许多现成的深度学习模块、层、函数和操作
  • 我将在 JAX 上使用 Flax,JAX 是 Google 开发的神经网络库。它包含许多现成的深度学习模块、层、函数和操作

    Flax
  • 对于 Tensorflow 实现,我将依赖 Keras 抽象。
  • 对于 Tensorflow 实现,我将依赖 Keras 抽象。

    Keras
  • 对于 Pytorch,我将使用标准 nn.module。
  • 对于 Pytorch,我将使用标准 nn.module。

    nn.module

    因为我们大多数人都对 Tensorflow 和 Pytorch 有所了解,所以我们将更多地关注 JAX 和 Flax。这就是为什么我会一路解释许多人可能不熟悉的东西。所以你也可以将这篇文章视为 Flax 的简单教程。

    此外,我假设您熟悉 VAE 背后的基本原理。如果不熟悉,您可以参考我之前关于潜在变量模型的文章。如果一切看起来都很清楚,让我们继续。

    潜在变量模型 快速回顾 zzz zzz zz zz zz z z z z z 重新参数化技巧 作者图片

    作者图片

    编码器

    模块

    模块 亚麻布 __init__