我知道 keras 是 TensorFlow 的高级接口。
但在我看来,keras 可以自己完成许多功能(数据输入、模型创建、训练、评估)。
此外,TensorFlow 的一些功能可以直接移植到 keras(例如,可以在 keras 中使用 tf 度量或损失函数)。
我的问题是,TensorFlow 提供了哪些无法在 keras 中复制的功能?
我知道 keras 是 TensorFlow 的高级接口。
但在我看来,keras 可以自己完成许多功能(数据输入、模型创建、训练、评估)。
此外,TensorFlow 的一些功能可以直接移植到 keras(例如,可以在 keras 中使用 tf 度量或损失函数)。
我的问题是,TensorFlow 提供了哪些无法在 keras 中复制的功能?
深度学习框架在 2 个抽象级别上运行:
您无法比较 Keras 和 TensorFlow,因为它们处于不同的抽象级别。我也想借此机会分享一下我使用 Keras 的经验:
如果您在 keras 中使用 TensorFlow 作为后端,它们或多或少共享相同的功能。通过keras.backend
你可以访问 TensorFlow 函数,同时通过tf.keras
你可以通过 TensorFlow 访问 keras 的整个 API。
既然是这种情况,我建议您坚持使用 keras,如果您发现缺少某些内容(例如度量或损失函数),您可以通过 TensorFlow 导入它。
正如您所说,Keras 包含所有功能,但开箱即用,它只在 CPU 上运行。通过插入 TensorFlow 或 CNTK(我个人更喜欢)之类的后端,您可以释放 GPU 的强大功能,它可以极大地加速一些 ML 工作负载,尤其是 DL 工作负载。如果您没有独立的 GPU,那么好处是微乎其微的。
在实践中,大多数时候你可以只设置你的后端并忘记它,完全在 Keras 中工作,甚至将你的后端换成另一个并比较性能。所以没有必要学习TF的细节,除非你想直接在较低的层次上编码。
鉴于 TensorFlow 通常是一个比 Keras 更底层的库,您会发现它提供了额外的灵活性和改进的性能(尽管相对较小,主要取决于您如何编写代码)。我想说,如果您正在研究或开发新型神经网络,那么 TensorFlow 的知识将非常有用。除此之外,您应该对 Keras 没问题,尽管如果您将 TensorFlow 用作后端,了解 TensorFlow 的工作原理仍然会有所帮助。
然而,不久前我读到 Keras 和 TensorFlow 将变得更加集成,这将使您的生活更轻松。
显然这只是我个人的观点,因此我想为您指出一些额外的文章,以便您自己阅读。 这个关于 Kaggle的讨论很好地概述了参数以及何时使用哪个参数。关于这个主题的中等帖子。