deep-learning - flax (google) 和 dm-haiku (deepmind) 之间的主要区别是什么?
问题描述
从他们的描述中:
- Flax,一个用于 JAX 的神经网络库
- Haiku,受 Sonnet 启发的 JAX 神经网络库
问题:
我应该选择哪个基于 jax 的库来实现,比如说DeepSpeech模型(由 CNN 层 + LSTM 层 + FC 组成)和 ctc-loss?
升级版。
从 dm-haiku 的开发者那里找到了关于差异的解释:
Flax 包含更多的电池,并带有优化器、混合精度和一些训练循环(我听说这些是解耦的,你可以根据需要使用多少)。Haiku 旨在解决 NN 模块和状态管理,它将问题的其他部分留给其他库(例如用于优化的 optax)。
Haiku 被设计为将 Sonnet(一个 TF NN 库)移植到 JAX。因此,如果(像 DeepMind)你有大量的 Sonnet+TF 代码,你可能想在 JAX 中使用并且你希望迁移该代码(在任一方向)尽可能容易,那么 Haiku 是一个更好的选择。
我认为否则归结为个人喜好。在 Alphabet 中,每个图书馆都有 100 名研究人员使用,所以我认为无论哪种方式都不会出错。在 DeepMind,我们对 Haiku 进行了标准化,因为它对我们有意义。我建议查看两个库提供的示例代码,看看哪些符合您对结构化实验的偏好。我想你会发现,如果你以后改变主意,将代码从一个库移动到另一个库并不是很复杂。
原来的问题仍然相关。
解决方案
我最近遇到了同样的问题,我更喜欢 Haiku,因为我认为它们的实现(参见Flax Dense()与Haiku Linear())更接近原始 JAX 精神(即链接init
和predict
函数并在 Pytrees 中跟踪参数)让我更容易修改东西。
但如果你不想深入修改,最好的选择方法是找到一篇关于 CNNs + LSTMs with Flax/Haiku 的不错的博客文章并坚持下去。我的普遍看法是,即使我更喜欢更模块化的 Haiku (+ Optax + Rlax + Chex + ...) 构建方式,这两个库也非常接近。
推荐阅读
- r - 预测丢弃 svm 观察
- ios - 更新了所有设备的启动映像命名约定
- php - 通过 ajax 将输入文件类型传递给 php 不起作用
- xml - Sorting and deleting XML document elements using PowerShell
- node.js - how to wait till the response is received from redis in node?
- php - Woocommerce price in loop displays on wrong item
- android - 如何将 Android 库导出为 jar?
- spring - 忽略war maven tomcat插件中的jar包装?
- visual-studio-code - 为什么 vscode vim.otherModesKeyBindingNonRecursive 是未知配置?
- google-cloud-platform - Google Compute Engine VM 实例不会停止。如何强制停止?