Keras
官方网址:http://keras.io
GitHub:http://github.com/fchollet/keras
Keras 是一个崇尚极简、高度模块化的神经网络库,使用 Python 实现,并可以同时运行在 TensorFlow 和 Theano 上。它旨在让用户进行最快速的原型实验,让想法变为结果的这个过程最短。Theano 和 TensorFlow 的计算图支持更通用的计算,而 Keras 则专精于深度学习。Theano 和 TensorFlow 更像是深度学习领域的 NumPy,而 Keras 则是这个领域的 Scikit-learn。它提供了目前为止最方便的 API,用户只需要将高级的模块拼在一起,就可以设计神经网络,它大大降低了编程开销(code overhead)和阅读别人代码时的理解开销(cognitive overhead)。它同时支持卷积网络和循环网络,支持级联的模型或任意的图结构的模型(可以让某些数据跳过某些 Layer 和后面的 Layer 对接,使得创建 Inception 等复杂网络变得容易),从 CPU 上计算切换到 GPU 加速无须任何代码的改动。因为底层使用 Theano 或 TensorFlow,用 Keras 训练模型相比于前两者基本没有什么性能损耗(还可以享受前两者持续开发带来的性能提升),只是简化了编程的复杂度,节约了尝试新网络结构的时间。可以说模型越复杂,使用 Keras 的收益就越大,尤其是在高度依赖权值共享、多模型组合、多任务学习等模型上,Keras 表现得非常突出。Keras 所有的模块都是简洁、易懂、完全可配置、可随意插拔的,并且基本上没有任何使用限制,神经网络、损失函数、优化器、初始化方法、激活函数和正则化等模块都是可以自由组合的。Keras 也包括绝大部分 state-of-the-art 的 Trick,包括 Adam、RMSProp、Batch Normalization、PReLU、ELU、LeakyReLU 等。同时,新的模块也很容易添加,这让 Keras 非常适合最前沿的研究。Keras 中的模型也都是在 Python 中定义的,不像 Caffe、CNTK 等需要额外的文件来定义模型,这样就可以通过编程的方式调试模型结构和各种超参数。在 Keras 中,只需要几行代码就能实现一个 MLP,或者十几行代码实现一个 AlexNet,这在其他深度学习框架中基本是不可能完成的任务。Keras 最大的问题可能是目前无法直接使用多 GPU,所以对大规模的数据处理速度没有其他支持多 GPU 和分布式的框架快。Keras 的编程模型设计和 Torch 很像,但是相比 Torch,Keras 构建在 Python 上,有一套完整的科学计算工具链,而 Torch 的编程语言 Lua 并没有这样一条科学计算工具链。无论从社区人数,还是活跃度来看,Keras 目前的增长速度都已经远远超过了 Torch。