深度學習 ( Deep Learning ) 的 Python 包哪家強?

在下用過大約兩年的scikit-learn,感覺用著非常順手。 由於近期可能還得轉下神經網路,想找個稱手的兵器。目前較為流行的Theano在12年-13年用過一段時間,也實現過一些框架,如卷積、遞歸、MEMM等,但調試過程比較費勁,個人不太喜歡。Numbapro自己寫GPU加速的話又比較麻煩,需要浪費一些精力在一些基礎的函數編寫上。Caffe聽說過還沒試過。能否根據個人的經驗推薦一款用起來方便的Python Deep Learning包呢?其實這也是在節約青春啊,提前感謝!


我用theano。pylearn2嘗試過,但不靈活,theano可以讓我隨心所欲寫代碼,我看中他的自動求導和對gpu透明


這幾天微博上面推薦的神器 Keras Documentation torch一樣的簡潔,使用的是Theano.


推keras,優點如下:

1.純Python,方便查看/修改源代碼

2.支持theano和Tensorflow兩種模式

3.配置簡單,上手迅速,分分鐘開始搭建自己的模型

4.文檔齊全,社區活躍

5.更新迅速(媽蛋今天就更了一發大的= =)

缺點如下:

1.如果基於theano的話,模型編譯比較慢

2.運行速度比較慢(對於學術界這個真的不太重要= =)

3.至今不知道如何正確發音


感覺nolearn + lasagne比keras好用一點,當然這兩個都不錯,可以都試試


benanne/Lasagne · GitHub

據說是目前最好用的。不過我用torch,所以也沒試過。


為什麼不選擇TF-Slim?

tensorlayer 將每層都封裝成這樣真的有意義嗎?

All TensorLayer layers have a number of properties in common:

  • layer.outputs : a Tensor, the outputs of current layer.
  • layer.all_params : a list of Tensor, all network variables in order.
  • layer.all_layers : a list of Tensor, all network outputs in order.
  • layer.all_drop : a dictionary of {placeholder : float}, all keeping probabilities of noise layer.

All TensorLayer layers have a number of methods in common:

  • layer.print_params() : print the network variables information in order (after sess.run(tf.initialize_all_variables())). alternatively, print all variables by tl.layers.print_all_variables().
  • layer.print_layers() : print the network layers information in order.
  • layer.count_params() : print the number of parameters in the network.

Why TF-Slim?

TF-Slim is a library that makes building, training and evaluation neural networks simple:

  • Allows the user to define models much more compactly by eliminating boilerplate code. This is accomplished through the use of argument scoping and numerous high level layers and variables. These tools increase readability and maintainability, reduce the likelihood of an error from copy-and-pasting hyperparameter values and simplifies hyperparameter tuning.
  • Makes developing models simple by providing commonly used regularizers.
  • Several widely used computer vision models (e.g., VGG, AlexNet) have been developed in slim, and are available to users. These can either be used as black boxes, or can be extended in various ways, e.g., by adding "multiple heads" to different internal layers.
  • Slim makes it easy to extend complex models, and to warm start training algorithms by using pieces of pre-existing model checkpoints.

What are the various components of TF-Slim?

TF-Slim is composed of several parts which were design to exist independently. These include the following main pieces (explained in detail below).

  • arg_scope: provides a new scope named arg_scope that allows a user to define default arguments for specific operations within that scope.
  • data: contains TF-slims dataset definition, data providers, parallel_reader, and decoding utilities.
  • evaluation: contains routines for evaluating models.
  • layers: contains high level layers for building models using tensorflow.
  • learning: contains routines for training models.
  • losses: contains commonly used loss functions.
  • metrics: contains popular evaluation metrics.
  • nets: contains popular network definitions such as VGG and AlexNet models.
  • preprocess: is a module with various preprocessing utilities.
  • queues: provides a context manager for easily and safely starting and closing QueueRunners.
  • regularizers: contains weight regularizers.
  • variables: provides convenience wrappers for variable creation and manipulation.


最新的kaggle比賽中很多人用的是nolearn + lasagne


我列出幾個python深度學習常用的庫,再進行比較:

Theano

Theano在深度學習框架中是祖師級的存在。

Theano基於Python語言開發的,是一個擅長處理多維數組的庫,這一點和numpy很像。當與其他深度學習庫結合起來,它十分適合數據探索。它為執行深度學習中大規模神經網路演算法的運算所設計。其實,它可以被更好的理解為一個數學表達式的編輯器:用符號式語言定義你想要的結果,該框架會對你的程序進行編譯,來高效運行於GPU或CPU。

它與後來出現的TensorFlow功能十分相似,因而兩者常常被放在一起比較。它們本身都偏底層,同樣的,Theano 像是一個研究平台多過是一個深度學習庫。你需要從底層開始做許多工作,來創建你需要的模型。比方說,Theano 沒有神經網路的分級。但由於它不支持多 GPU 和水平擴展,在 TensorFlow 的熱潮下(它們針對同一個領域),Theano 已然開始被遺忘了。

TensorFlow

TensorFlow是由google開源出來的,因為有google作為後台,Tensorflow在深度學習領域一直很有名氣。

TensorFlow是一個採用數據流圖,用於數值計算的開源軟體庫。它支持Python和C++兩種類型的介面。TensorFlow可支持分散式計算,它靈活的架構讓你可以在多種平台上展開計算,例如台式計算機中的一個或多個CPU(或GPU),伺服器,移動設備等等。

TensorFlow官方文檔中文版:www.beibq.cn/book/cw0v22

Caffe

Caffe是深度學習框架中的老牌中的老牌。Caffe有非常好的特性,但也有一些小缺點。起初的時候它並不是一個通用框架,而僅僅關注計算機視覺,但它具有非常好的通用性。Caffe 的缺點是它不夠靈活。如果你想給它來一點新改變,那你就需要使用 C++ 和 CUDA 編程,不過你也可以使用 Python 或 Matlab 介面進行一些小改變。

Caffe的文檔非常貧乏。你需要花大量時間檢查代碼才能理解它。

Caffe的最大缺點之一是它的安裝。它需要解決大量的依賴包,我曾經安裝過 Caffe 兩次,真正痛苦至極。

但要清楚,Caffe 並不是一無是處。在投入了生產的計算機視覺系統的工具上,Caffe 是無可爭議的領導者。它非常穩健非常快速。我的建議是:用 Keras 進行實驗和測試,然後遷移到 Caffe 中進行生產。

SciKit-learn

scikit-learn是老牌的開源 Python 演算法框架,始於 2007 年的 Google Summer of Code 項目,最初由 David Cournapeau 開發。

它是一個簡潔、高效的演算法庫,提供一系列的監督學習和無監督學習的演算法,以用於數據挖掘和數據分析。SciKit-learn幾乎覆蓋了機器學習的所有主流演算法,這為其在Python開源世界中奠定了江戶地位。

它的演算法庫建立在 SciPy (Scientific Python) 之上——你必須先安裝 SciPy 才能使用 SciKit-learn 。它的框架中一共包括了:

  • NumPy: 基礎的多維數組包
  • SciPy: 科學計算的基礎庫
  • Matplotlib: 全面的 2D/3D 測繪
  • IPython: 改進的交互控制器
  • Sympy: 符號數學
  • Pandas:數據結構和分析

它命名的由來:SciPy 的擴展和模塊在傳統上被命名為 SciKits。而提供學習演算法的模組就被命名為 scikit-learn。

它與 Python 世界另一大演算法框架——TensorFlow 的主要區別是:TensorFlow 更底層。而 SciKit-learn 提供了執行機器學習演算法的模塊化方案,很多演算法模型直接就能用。

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上運行)並評估結果。

總結

這幾個庫python中最常用的算是:TensorFlow、SciKit-learn、Theano、Keras,至於Caffe的話坑太多,自己斟酌吧,其中TensorFlow與Theano兩個可任意選其一(因為它們是針對同一領域),剩下的由於在不同領域優勢不一樣,無法說哪家強,而且在實際使用當中經常存在Scikit-learn + (TensorFlow or Theano) + Keras三個庫一起結合使用。

這裡列出幾個有關深度學習相關的資料

神經網路與深度學習:www.beibq.cn/book/ul6b33

動手做聊天機器人:www.beibq.cn/book/n2uy1

TensorFlow 官方文檔中文版:www.beibq.cn/book/cw0v22


初學者theano


Caffe 有python binding.


TensorLayer :後來居上的TensorFlow python包,之前用keras(當時也沒什麼選擇,為了儘快入門),後來因為對運行速度、工程性和可拓展性有要求,不得不改成純TensorFlow裸寫,現在用了TensorLayer後,一次滿足了所有需求。

鏈接:GitHub - zsdonghao/tensorlayer: TensorLayer: A Deep Learning and Reinforcement Learning Library for TensorFlow.

  • Merge with TF-Slim, all Googles pre-trained CNN models can be used in TensorLayer by @zsdonghao
  • More examples
    • Inception-V3 by @zsdonghao
    • MultiplexerLayer by @zsdonghao
  • Basics
    • Multi-layer perceptron (MNIST). A multi-layer perceptron implementation for MNIST classification task, see tutorial_mnist_simple.py on GitHub.

    Computer Vision

    • Denoising Autoencoder (MNIST). A multi-layer perceptron implementation for MNIST classification task, see tutorial_mnist.py on GitHub.
    • Stacked Denoising Autoencoder and Fine-Tuning (MNIST). A multi-layer perceptron implementation for MNIST classification task, see tutorial_mnist.py on GitHub.
    • Convolutional Network (MNIST). A Convolutional neural network implementation for classifying MNIST dataset, see tutorial_mnist.py on GitHub.
    • Convolutional Network (CIFAR-10). A Convolutional neural network implementation for classifying CIFAR-10 dataset, see tutorial_cifar10.py and ``tutorial_cifar10_tfrecord.py``on GitHub.
    • VGG 16 (ImageNet). A Convolutional neural network implementation for classifying ImageNet dataset, see tutorial_vgg16.py on GitHub.
    • VGG 19 (ImageNet). A Convolutional neural network implementation for classifying ImageNet dataset, see tutorial_vgg19.py on GitHub.
    • InceptionV3 (ImageNet). A Convolutional neural network implementation for classifying ImageNet dataset, see tutorial_inceptionV3_tfslim.py on GitHub.
    • Wild ResNet (CIFAR) by ritchieng.
    • More CNN implementations of TF-Slim can be connected to TensorLayer via SlimNetsLayer.

    Natural Language Processing

    • Recurrent Neural Network (LSTM). Apply multiple LSTM to PTB dataset for language modeling, see tutorial_ptb_lstm_state_is_tuple.py on GitHub.
    • Word Embedding - Word2vec. Train a word embedding matrix, see tutorial_word2vec_basic.py on GitHub.
    • Restore Embedding matrix. Restore a pre-train embedding matrix, see tutorial_generate_text.py on GitHub.
    • Text Generation. Generates new text scripts, using LSTM network, see tutorial_generate_text.py on GitHub.
    • Machine Translation (WMT). Translate English to French. Apply Attention mechanism and Seq2seq to WMT English-to-French translation data, see tutorial_translate.py on GitHub.

    Reinforcement Learning

    • Deep Reinforcement Learning - Pong Game. Teach a machine to play Pong games, see tutorial_atari_pong.py on GitHub.

    Applications

    • Image Captioning - Reimplementation of Google』s im2txt by zsdonghao.
    • DCGAN - Generating images by Deep Convolutional Generative Adversarial Networks by zsdonghao.

    Special Examples

    • Merge TF-Slim into TensorLayer. tutorial_inceptionV3_tfslim.py on GitHub.
    • MultiplexerLayer. tutorial_mnist_multiplexer.py on GitHub.
    • Data augmentation with TFRecord. Effective way to load and pre-process data, see tutorial_tfrecord*.py and tutorial_cifar10_tfrecord.py on GitHub.
    • Data augmentation with TensorLayer, see tutorial_image_preprocess.py on GitHub.


用過theano,調試特別不方便


用過mxnet和tensorflow,最終選了了tensorflow,因為tensorflow文檔更加好。當然mxnet也很好用,並且支持windows平台,因此如果只有window平台的同學也可以選擇mxnet。如果在linux/osx平台,我還是更加推薦tensorflow


推薦tensorflow和keras,都可以在python裡面用。


在CV上,Caffe的py介面毫無疑問比TensorFlow要人性化的多。。。


推薦用Google的Tensorflow,核心是用C++編寫的,API提供Python的介面,使用起來非常方便實用,而且支持GPU和分散式模型。


這是Keras Documentation上的一段話,看第二條,是不是說如果我要使用的DL模型是除CNN和RNN以外的模型,就不適用了呢,或者效果不好了呢,剛準備使用python搞DL,望指導。


用python調用h2o


推薦閱讀:

如何看待顧險峰《看穿機器學習(W-GAN模型)的黑箱》這篇文章?
分散式深度學習系統與傳統的分散式系統的區別?
求台大林軒田的learning from data (yaser)這本書後面的problem的答案?
最近看到udacity的納米學位很火,號稱學完可以找到工作了,這是真的嗎?
哪裡有受限玻爾茲曼機、卷積神經網路 的講解課程?

TAG:Python | Python框架 | 深度學習DeepLearning |