我最近偶然发现了我在“神经网络的最佳python库”这个主题的一个旧的数据科学堆栈交换的答案,它让我深感python深度学习生态系统在过去的两年半内的快速发展。我在2014年七月推荐的一个库pylearn2,现在已经不再被积极地开发和维护,并且一大批深度学习的库已经占据它的位置。其实每一个库都有它的优势和弱点。我们已经使用了这个列表的大部分技术在indico进行生产或开发,但是有少部分没有做。我会根据别人的经验,提供一个关于2017年python深度学习生态系统的清晰、全面的路径。
特别地,我们将看下面这些库:
· Theano
· Lasagne
· Blocks
· TensorFlow
· Keras
· MXNet
· PyTorch
描述:Theano是一个Python库,它可以有效地定义,优化和评估涉及多维数组的数学表达式。它与GPU一起工作,并执行高效的符号分化。
文档:http://deeplearning.net/software/theano/
概要:
Theano是数值计算的主力,它支持我们列表中的许多其他深度学习框架。它由FrédéricBastien和蒙特利尔大学实验室MILA背后的杰出研究团队建造。它的API是相当低的水平,为了写入有效的Theano,你需要相当熟悉隐藏在幕后的其他框架的算法。如果您拥有丰富的学术机器学习专业知识,正在寻找对您的模型非常精细的控制,或想要实现一个新奇或不寻常的模型,Theano是一个关键的库。一般来说,Theano易于使用,因为它具有灵活性。
优点:
· 灵活
· 如果正确使用,性能高
缺点:
· 大量的学习曲线
· 低级别的API
· 编译复杂的符号图可能很慢
资源:
· 安装指南
· Python和Theano深入学习介绍(MNIST视频教程)
Lasagne
描述:用于在Theano建立和训练神经网络的轻量级库。
文档:http://lasagne.readthedocs.org/
概要:
由于Theano主要是一个符号数学的库,Lasagne在Theano上进行了抽象,使它更适合深度学习。它主要由现代DeepMind研究科学家Sander Dieleman编写和维护。Lasagne让用户在Layer水平上思考,提供模块像“Conv2DLayer”和“DropoutLayer”给用户结合使用,而不是根据符号变量之间的函数关系来指定网络模型。Lasagne在灵活性方面需要牺牲一点,它提供了丰富的通用组件来帮助定义图层,图层初始化,模型正则化,模型监控和模型训练。
优点:
· 还是很灵活
· 比Theano的抽象层更高
· 文档和代码多样化
缺点:
· 小社区
资源:
· 官方安装指南
· Lasagne代码示例
Blocks
描述:建立和训练神经网络的Theano框架。
文档:http://blocks.readthedocs.io/en/latest/
概要:
与Lasagne类似,Blocks是在Theano上添加一层抽象层,以便于创建比原始Theano更简洁,定义更标准的深度学习模型。它是由蒙特利尔大学实验室MILA 开发的,他们还建设了Theano和第一个神经网络的高级接口PyLearn2。它比Lasagne更灵活一点,但是它的学习曲线稍微更困难,这样才能更高效地使用。除此之外,Blocks对循环神经网络架构有很好的支持,所以如果你有兴趣探索这个模型的类型,值得一看。除了TensorFlow,Blocks是我们在indico配置的许多API的首选库。
优点:
· 还是很灵活
· 比Theano高的抽象层
· 很好测试
缺点:
· 大量的学习曲线
· 小社区
资源:
· 官方安装指南
· reddit上关于Blocks和Lasagne之间差异的讨论
描述:用于使用数据流图进行数值计算的开源软件库。
文档:https://www.tensorflow.org/api_docs/python/
概要:
TensorFlow是较低级别的符号计算库(如Theano)和更高级别的网络规范库(如块和Lasagne)之间的混合。虽然它是Python深度学习库集合的最新成员,但它可能已经获得了最大的活跃社区,因为它由Google Brain团队支持。它支持在多个GPU上运行机器学习模型,为高效的数据流水线提供实用程序,并具有用于模型的检查,可视化和序列化的内置模块。最近,TensorFlow团队决定加入对Keras的支持,这是我们列表中的下一个深度学习库。社区似乎都认为,虽然TensorFlow有它的缺点,它的社区的庞大规模和项目背后的巨量势头意味着学习TensorFlow是比较保险的。因此,TensorFlow是我们今天在indico选择的深度学习库。
优点:
· 由软件巨头谷歌支持
· 非常大的社区
· 低级别和高级别接口到网络训练
· 比Theano-based的选项有更快的模型编译
· 清晰的多GPU支持
缺点:
· 起初在许多基准比Theano-based的选项慢,虽然Tensorflow正赶上它。
· RNN的支持仍然超过了Theano
资源:
· 下载和设置指南
描述:Python深度学习库。转换网络,递归神经网络等。在Theano或TensorFlow上运行。
概要:
Keras可能是最高水平,使用最友好的库。它由Google Brain团队的另一名成员Francis Chollet编写和维护。它允许用户选择他们构建的模型是在Theano的还是TensorFlow的符号图上执行。Keras的用户界面是火炬启发的,所以如果你以前在Lua有机器学习的经验,Keras绝对值得一看。由于优秀的文档和它的相对易用性,Keras社区是相当大,非常活跃。最近,TensorFlow团队宣布计划与Keras支持内置,所以很快Keras将是TensorFlow项目的一个子集。
优点:
· 是Theano或TensorFlow后端
· 直观,高级的接口
· 更容易的学习曲线
缺点:
· 不太灵活,比其他选项更具规范性
资源:
· 官方安装指南
描述:MXNet是一个旨在提高效率和灵活性的深度学习框架。
文档:http://mxnet.io/api/python/index.html#python-api-reference
概要:
MXNet是亚马逊深度学习的库,也许是最有效的库。它具有类似于Theano和TensorFlow的数据流图,提供对多GPU配置的良好支持,具有类似于Lasagne和Blocks的更高级别的模型构建块,并且可以在任何可以想象的硬件上(包括移动电话)运行。Python的支持只是冰山一角 - MXNet还提供了R,Julia,C ++,Scala,Matlab和Javascript的接口。如果你寻找的是首屈一指的性能,那么选择MXNet,但你必须愿意处理一些MXNet的怪癖。
优点:
· 惊人的快速的基准
· 非常灵活
缺点:
· 是最小的社区
· 比Theano的学习曲线更陡峭
资源:
· 官方入门指南
· MXNet示例库
描述:Python中的张力和动态神经网络具有强大的GPU加速。
概要:
PyTorch在一个多星期前发布,是Python的深度学习框架列表中的新的孩子。这是Lua的火炬库到Python的一个松散的端口,它十分吸引大家关注,因为它是由Facebook的人工智能研究小组(FAIR)支持的,还因为它是设计用来处理动态计算图形的,像Theano,TensorFlow和衍生物的同类型的功能缺失。大家对PyTorch在Python深度学习生态系统中将扮演的角色众说纷纭,但所有迹象表明PyTorch是我们列表中其他框架的一个非常受人尊敬的替代品。
优点:
· 来自Facebook的组织支持
· 对动态图的新的支持
· 高级和低级API的混合
缺点:
· 相比其他选择不够成熟(用他们自己的话来说 - “我们正在早期发布测试版,期待一些冒险。”)
· 官方文档之外的参考文献/资源有限
资源:
博客地址:http://blog.yoqi.me/?p=2369
这篇文章还没有评论