9大Python深度学习库,哪一个最适合你?( 二 )


你可以做到吗?
当然可以 。
它值得花费您的时间和精力吗?
嗯,也许吧 。这取决于你是否想摆脱低级别或你的应用是否需要 。
就个人而言,我宁愿使用像Keras这样的库,它把Theano包装成更有人性化的API,同样的方式,scikit-learn使机器学习算法工作变得更加容易 。
3.TensorFlow
与Theano类似,TensorFlow是使用数据流图进行数值计算的开源库(这是所有神经网络固有的特征) 。最初由谷歌的机器智能研究机构内的google Brain Team研究人员开发,此后库一直开源,并提供给公众 。
相比于Theano ,TensorFlow的主要优点是分布式计算,特别是在多GPU的环境中(虽然这是Theano正在攻克的项目) 。
除了用TensorFlow而不是Theano替换Keras后端,对于TensorFlow库我并没有太多的经验 。然而在接下来的几个月里,我希望这有所改变 。

9大Python深度学习库,哪一个最适合你?

文章插图
 
4.Lasagne
Lasagne是Theano中用于构建和训练网络的轻量级库 。这里的关键词是轻量级的,也就意味着它不是一个像Keras一样围绕着Theano的重包装的库 。虽然这会导致你的代码更加繁琐,但它会把你从各种限制中解脱出来,同时还可以让您根据Theano进行模块化的构建 。
简而言之:Lasagne的功能是Theano的低级编程和Keras的高级抽象之间的一个折中 。
我最喜欢的:
5.Keras
如果我必须选出一个最喜欢的深度学习Python库,我将很难在Keras和mxnet中做出抉择——但最后,我想我会选Keras 。
说真的,Keras的好处我说都说不完 。
Keras是一个最低限度的、模块化的神经网络库,可以使用Theano或TensorFlow作为后端 。Keras最主要的用户体验是,从构思到产生结果将会是一个非常迅速的过程 。
在Keras中架构网络设计是十分轻松自然的 。它包括一些state-of-the-art中针对优化(Adam,RMSProp)、标准化(BatchNorm)和激活层(PReLU,ELU,LeakyReLU)最新的算法 。
Keras也非常注重卷积神经网络,这也是我十分需要的 。无论它是有意还是无意的,我觉得从计算机视觉的角度来看这是非常有价值的 。
更重要的是,你既可以轻松地构建基于序列的网络(其中输入线性流经网络)又可以创建基于图形的网络(输入可以“跳过”某些层直接和后面对接) 。这使得创建像GoogLeNet和SqueezeNet这样复杂的网络结构变得容易得多 。
我认为Keras唯一的问题是它不支持多GPU环境中并行地训练网络 。这可能会也可能不会成为你的大忌 。
如果我想尽快地训练网络,那么我可能会使用mxnet 。但是如果我需要调整超参数,我就会用Keras设置四个独立的实验(分别在我的Titan X GPUs上运行)并评估结果 。
9大Python深度学习库,哪一个最适合你?

文章插图
 
6.mxnet
我第二喜欢的深度学习Python库无疑就是mxnet(重点也是训练图像分类网络) 。虽然在mxnet中站立一个网络可能需要较多的代码,但它会提供给你惊人数量的语言绑定(C ++、Python、R、JAVAScript等) 。
Mxnet库真正出色的是分布式计算,它支持在多个CPU / GPU机训练你的网络,甚至可以在AWS、Azure以及YARN集群 。
它确实需要更多的代码来设立一个实验并在mxnet上运行(与Keras相比),但如果你需要跨多个GPU或系统分配训练,我推荐mxnet 。
7.sklearn-theano
有时候你并不需要终端到终端的培养一个卷积神经网络 。相反,你需要把CNN看作一个特征提取器 。当你没有足够的数据来从头培养一个完整的CNN时它就会变得特别有用 。仅仅需要把你的输入图像放入流行的预先训练架构,如OverFeat、AlexNet、VGGNet或GoogLeNet,然后从FC层提取特征(或任何您要使用的层) 。
总之,这就是sklearn-theano的功能所在 。你不能用它从头到尾的训练一个模型,但它的神奇之处就是可以把网络作为特征提取器 。当需要评估一个特定的问题是否适合使用深度学习来解决时,我倾向于使用这个库作为我的第一手判断 。
8.nolearn
我在PyImageSearch博客上用过几次nolearn,主要是在我的macBook Pro上进行一些初步的GPU实验和在Amazon EC2 GPU实例中进行深度学习 。
Keras把 Theano和TensorFlow包装成了更具人性化的API,而nolearn也为Lasagne做了相同的事 。此外,nolearn中所有的代码都是与scikit-learn兼容的,这对我来说绝对是个超级的福利 。
我个人不使用nolearn做卷积神经网络(CNNs),但你当然也可以用(我更喜欢用Keras和mxnet来做CNNs) 。我主要用nolearn来制作Deep Belief Networks (DBNs) 。


推荐阅读