精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

TensorFlow和Caffe、CNTK、MXNet等其他7種深度學習框架的對比

大數(shù)據(jù)
深度學習研究的熱潮持續(xù)高漲,各種開源深度學習框架也層出不窮,其中包括TensorFlow、Caffe8、Keras9、CNTK10、Torch711、MXNet12、Leaf13、Theano14、DeepLearning415、Lasagne16、Neon17,等等。然而TensorFlow卻殺出重圍,在關注度和用戶數(shù)上都占據(jù)絕對優(yōu)勢,大有一統(tǒng)江湖之勢。

[[183833]]

主流深度學習框架對比

深度學習研究的熱潮持續(xù)高漲,各種開源深度學習框架也層出不窮,其中包括TensorFlow、Caffe8、Keras9、CNTK10、Torch711、MXNet12、Leaf13、Theano14、DeepLearning415、Lasagne16、Neon17,等等。然而TensorFlow卻殺出重圍,在關注度和用戶數(shù)上都占據(jù)絕對優(yōu)勢,大有一統(tǒng)江湖之勢。表2-1所示為各個開源框架在GitHub上的數(shù)據(jù)統(tǒng)計(數(shù)據(jù)統(tǒng)計于2017年1月3日),可以看到TensorFlow在star數(shù)量、fork數(shù)量、contributor數(shù)量這三個數(shù)據(jù)上都完勝其他對手。

究其原因,主要是Google在業(yè)界的號召力確實強大,之前也有許多成功的開源項目,以及Google強大的人工智能研發(fā)水平,都讓大家對Google的深度學習框架充滿信心,以至于TensorFlow在2015年11月剛開源的第一個月就積累了10000+的star。其次,TensorFlow確實在很多方面擁有優(yōu)異的表現(xiàn),比如設計神經(jīng)網(wǎng)絡結構的代碼的簡潔度,分布式深度學習算法的執(zhí)行效率,還有部署的便利性,都是其得以勝出的亮點。

如果一直關注著TensorFlow的開發(fā)進度,就會發(fā)現(xiàn)基本上每星期TensorFlow都會有1萬行以上的代碼更新,多則數(shù)萬行。產(chǎn)品本身優(yōu)異的質(zhì)量、快速的迭代更新、活躍的社區(qū)和積極的反饋,形成了良性循環(huán),可以想見TensorFlow未來將繼續(xù)在各種深度學習框架中獨占鰲頭。  

各個開源框架在GitHub上的數(shù)據(jù)統(tǒng)計 

觀察表2-1還可以發(fā)現(xiàn),Google、Microsoft、Facebook等巨頭都參與了這場深度學習框架大戰(zhàn),此外,還有畢業(yè)于伯克利大學的賈揚清主導開發(fā)的Caffe,蒙特利爾大學Lisa Lab團隊開發(fā)的Theano,以及其他個人或商業(yè)組織貢獻的框架。另外,可以看到各大主流框架基本都支持Python,目前Python在科學計算和數(shù)據(jù)挖掘領域可以說是獨領風騷。雖然有來自R、Julia等語言的競爭壓力,但是Python的各種庫實在是太完善了,Web開發(fā)、數(shù)據(jù)可視化、數(shù)據(jù)預處理、數(shù)據(jù)庫連接、爬蟲等無所不能,有一個完美的生態(tài)環(huán)境。僅在數(shù)據(jù)挖據(jù)工具鏈上,Python就有NumPy、SciPy、Pandas、Scikit-learn、XGBoost等組件,做數(shù)據(jù)采集和預處理都非常方便,并且之后的模型訓練階段可以和TensorFlow等基于Python的深度學習框架完美銜接。

表2-2和圖2-1所示為對主流的深度學習框架TensorFlow、Caffe、CNTK、Theano、Torch在各個維度的評分,本書2.2節(jié)會對各個深度學習框架進行比較詳細的介紹。 

 

 

 

圖2-1  主流深度學習框架對比圖

各深度學習框架簡介

在本節(jié),我們先來看看目前各流行框架的異同,以及各自的特點和優(yōu)勢。

TensorFlow

TensorFlow是相對高階的機器學習庫,用戶可以方便地用它設計神經(jīng)網(wǎng)絡結構,而不必為了追求高效率的實現(xiàn)親自寫C++或CUDA18代碼。它和Theano一樣都支持自動求導,用戶不需要再通過反向傳播求解梯度。其核心代碼和Caffe一樣是用C++編寫的,使用C++簡化了線上部署的復雜度,并讓手機這種內(nèi)存和CPU資源都緊張的設備可以運行復雜模型(Python則會比較消耗資源,并且執(zhí)行效率不高)。

除了核心代碼的C++接口,TensorFlow還有官方的Python、Go和Java接口,是通過SWIG(Simplified Wrapper and Interface Generator)實現(xiàn)的,這樣用戶就可以在一個硬件配置較好的機器中用Python進行實驗,并在資源比較緊張的嵌入式環(huán)境或需要低延遲的環(huán)境中用C++部署模型。SWIG支持給C/C++代碼提供各種語言的接口,因此其他腳本語言的接口未來也可以通過SWIG方便地添加。

不過使用Python時有一個影響效率的問題是,每一個mini-batch要從Python中feed到網(wǎng)絡中,這個過程在mini-batch的數(shù)據(jù)量很小或者運算時間很短時,可能會帶來影響比較大的延遲?,F(xiàn)在TensorFlow還有非官方的Julia、Node.js、R的接口支持,地址如下。

Julia:github.com/malmaud/TensorFlow.jl

Node.js:github.com/node-tensorflow/node-tensorflow

R:github.com/rstudio/tensorflow

TensorFlow也有內(nèi)置的TF.Learn和TF.Slim等上層組件可以幫助快速地設計新網(wǎng)絡,并且兼容Scikit-learn estimator接口,可以方便地實現(xiàn)evaluate、grid search、cross validation等功能。同時TensorFlow不只局限于神經(jīng)網(wǎng)絡,其數(shù)據(jù)流式圖支持非常自由的算法表達,當然也可以輕松實現(xiàn)深度學習以外的機器學習算法。事實上,只要可以將計算表示成計算圖的形式,就可以使用TensorFlow。用戶可以寫內(nèi)層循環(huán)代碼控制計算圖分支的計算,TensorFlow會自動將相關的分支轉為子圖并執(zhí)行迭代運算。TensorFlow也可以將計算圖中的各個節(jié)點分配到不同的設備執(zhí)行,充分利用硬件資源。定義新的節(jié)點只需要寫一個Python函數(shù),如果沒有對應的底層運算核,那么可能需要寫C++或者CUDA代碼實現(xiàn)運算操作。

在數(shù)據(jù)并行模式上,TensorFlow和Parameter Server很像,但TensorFlow有獨立的Variable node,不像其他框架有一個全局統(tǒng)一的參數(shù)服務器,因此參數(shù)同步更自由。TensorFlow和Spark的核心都是一個數(shù)據(jù)計算的流式圖,Spark面向的是大規(guī)模的數(shù)據(jù),支持SQL等操作,而TensorFlow主要面向內(nèi)存足以裝載模型參數(shù)的環(huán)境,這樣可以最大化計算效率。

TensorFlow的另外一個重要特點是它靈活的移植性,可以將同一份代碼幾乎不經(jīng)過修改就輕松地部署到有任意數(shù)量CPU或GPU的PC、服務器或者移動設備上。相比于Theano,TensorFlow還有一個優(yōu)勢就是它極快的編譯速度,在定義新網(wǎng)絡結構時,Theano通常需要長時間的編譯,因此嘗試新模型需要比較大的代價,而TensorFlow完全沒有這個問題。TensorFlow還有功能強大的可視化組件TensorBoard,能可視化網(wǎng)絡結構和訓練過程,對于觀察復雜的網(wǎng)絡結構和監(jiān)控長時間、大規(guī)模的訓練很有幫助。TensorFlow針對生產(chǎn)環(huán)境高度優(yōu)化,它產(chǎn)品級的高質(zhì)量代碼和設計都可以保證在生產(chǎn)環(huán)境中穩(wěn)定運行,同時一旦TensorFlow廣泛地被工業(yè)界使用,將產(chǎn)生良性循環(huán),成為深度學習領域的事實標準。

除了支持常見的網(wǎng)絡結構[卷積神經(jīng)網(wǎng)絡(Convolutional Neural Network,CNN)、循環(huán)神經(jīng)網(wǎng)絡(Recurent Neural Network,RNN)]外,TensorFlow還支持深度強化學習乃至其他計算密集的科學計算(如偏微分方程求解等)。TensorFlow此前不支持symbolic loop,需要使用Python循環(huán)而無法進行圖編譯優(yōu)化,但最近新加入的XLA已經(jīng)開始支持JIT和AOT,另外它使用bucketing trick也可以比較高效地實現(xiàn)循環(huán)神經(jīng)網(wǎng)絡。TensorFlow的一個薄弱地方可能在于計算圖必須構建為靜態(tài)圖,這讓很多計算變得難以實現(xiàn),尤其是序列預測中經(jīng)常使用的beam search。

TensorFlow的用戶能夠將訓練好的模型方便地部署到多種硬件、操作系統(tǒng)平臺上,支持Intel和AMD的CPU,通過CUDA支持NVIDIA的GPU(最近也開始通過OpenCL支持AMD的GPU,但沒有CUDA成熟),支持Linux和Mac,最近在0.12版本中也開始嘗試支持Windows。在工業(yè)生產(chǎn)環(huán)境中,硬件設備有些是最新款的,有些是用了幾年的老機型,來源可能比較復雜,TensorFlow的異構性讓它能夠全面地支持各種硬件和操作系統(tǒng)。同時,其在CPU上的矩陣運算庫使用了Eigen而不是BLAS庫,能夠基于ARM架構編譯和優(yōu)化,因此在移動設備(Android和iOS)上表現(xiàn)得很好。

TensorFlow在最開始發(fā)布時只支持單機,而且只支持CUDA 6.5和cuDNN v2,并且沒有官方和其他深度學習框架的對比結果。在2015年年底,許多其他框架做了各種性能對比評測,每次TensorFlow都會作為較差的對照組出現(xiàn)。那個時期的TensorFlow真的不快,性能上僅和普遍認為很慢的Theano比肩,在各個框架中可以算是墊底。但是憑借Google強大的開發(fā)實力,很快支持了新版的cuDNN(目前支持cuDNN v5.1),在單GPU上的性能追上了其他框架。表2-3所示為https://github.com/soumith/convnet-benchmarks給出的各個框架在AlexNet上單GPU的性能評測。 

 

 

 

目前在單GPU的條件下,絕大多數(shù)深度學習框架都依賴于cuDNN,因此只要硬件計算能力或者內(nèi)存分配差異不大,最終訓練速度不會相差太大。但是對于大規(guī)模深度學習來說,巨大的數(shù)據(jù)量使得單機很難在有限的時間完成訓練。這時需要分布式計算使GPU集群乃至TPU集群并行計算,共同訓練出一個模型,所以框架的分布式性能是至關重要的。TensorFlow在2016年4月開源了分布式版本,使用16塊GPU可達單GPU的15倍提速,在50塊GPU時可達到40倍提速,分布式的效率很高。目前原生支持的分布式深度學習框架不多,只有TensorFlow、CNTK、DeepLearning4J、MXNet等。不過目前TensorFlow的設計對不同設備間的通信優(yōu)化得不是很好,其單機的reduction只能用CPU處理,分布式的通信使用基于socket的RPC,而不是速度更快的RDMA,所以其分布式性能可能還沒有達到最優(yōu)。

Google 在2016年2月開源了TensorFlow Serving19,這個組件可以將TensorFlow訓練好的模型導出,并部署成可以對外提供預測服務的RESTful接口,如圖2-2所示。有了這個組件,TensorFlow就可以實現(xiàn)應用機器學習的全流程:從訓練模型、調(diào)試參數(shù),到打包模型,最后部署服務,名副其實是一個從研究到生產(chǎn)整條流水線都齊備的框架。這里引用TensorFlow內(nèi)部開發(fā)人員的描述:“TensorFlow Serving是一個為生產(chǎn)環(huán)境而設計的高性能的機器學習服務系統(tǒng)。它可以同時運行多個大規(guī)模深度學習模型,支持模型生命周期管理、算法實驗,并可以高效地利用GPU資源,讓TensorFlow訓練好的模型更快捷方便地投入到實際生產(chǎn)環(huán)境”。除了TensorFlow以外的其他框架都缺少為生產(chǎn)環(huán)境部署的考慮,而Google作為廣泛在實際產(chǎn)品中應用深度學習的巨頭可能也意識到了這個機會,因此開發(fā)了這個部署服務的平臺。TensorFlow Serving可以說是一副王牌,將會幫TensorFlow成為行業(yè)標準做出巨大貢獻。 

 

 

 

圖2-2  TensorFlow Serving架構

TensorBoard是TensorFlow的一組Web應用,用來監(jiān)控TensorFlow運行過程,或可視化Computation Graph。TensorBoard目前支持5種可視化:標量(scalars)、圖片(images)、音頻(audio)、直方圖(histograms)和計算圖(Computation Graph)。TensorBoard的Events Dashboard可以用來持續(xù)地監(jiān)控運行時的關鍵指標,比如loss、學習速率(learning rate)或是驗證集上的準確率(accuracy);Image Dashboard則可以展示訓練過程中用戶設定保存的圖片,比如某個訓練中間結果用Matplotlib等繪制(plot)出來的圖片;Graph Explorer則可以完全展示一個TensorFlow的計算圖,并且支持縮放拖曳和查看節(jié)點屬性。TensorBoard的可視化效果如圖2-3和圖2-4所示。 

 

 

 

圖2-3  TensorBoard的loss標量的可視化 

 

 

 

圖2-4  TensorBoard的模型結構可視化

TensorFlow擁有產(chǎn)品級的高質(zhì)量代碼,有Google強大的開發(fā)、維護能力的加持,整體架構設計也非常優(yōu)秀。相比于同樣基于Python的老牌對手Theano,TensorFlow更成熟、更完善,同時Theano的很多主要開發(fā)者都去了Google開發(fā)TensorFlow(例如書籍Deep Learning的作者Ian Goodfellow,他后來去了OpenAI)。Google作為巨頭公司有比高?;蛘邆€人開發(fā)者多得多的資源投入到TensorFlow的研發(fā),可以預見,TensorFlow未來的發(fā)展將會是飛速的,可能會把大學或者個人維護的深度學習框架遠遠甩在身后。

Caffe

官方網(wǎng)址:caffe.berkeleyvision.org/

GitHub:github.com/BVLC/caffe

Caffe全稱為Convolutional Architecture for Fast Feature Embedding,是一個被廣泛使用的開源深度學習框架(在TensorFlow出現(xiàn)之前一直是深度學習領域GitHub star最多的項目),目前由伯克利視覺學中心(Berkeley Vision and Learning Center,BVLC)進行維護。Caffe的創(chuàng)始人是加州大學伯克利的Ph.D.賈揚清,他同時也是TensorFlow的作者之一,曾工作于MSRA、NEC和Google Brain,目前就職于Facebook FAIR實驗室。Caffe的主要優(yōu)勢包括如下幾點。

容易上手,網(wǎng)絡結構都是以配置文件形式定義,不需要用代碼設計網(wǎng)絡。

訓練速度快,能夠訓練state-of-the-art的模型與大規(guī)模的數(shù)據(jù)。

組件模塊化,可以方便地拓展到新的模型和學習任務上。

Caffe的核心概念是Layer,每一個神經(jīng)網(wǎng)絡的模塊都是一個Layer。Layer接收輸入數(shù)據(jù),同時經(jīng)過內(nèi)部計算產(chǎn)生輸出數(shù)據(jù)。設計網(wǎng)絡結構時,只需要把各個Layer拼接在一起構成完整的網(wǎng)絡(通過寫protobuf配置文件定義)。比如卷積的Layer,它的輸入就是圖片的全部像素點,內(nèi)部進行的操作是各種像素值與Layer參數(shù)的convolution操作,最后輸出的是所有卷積核filter的結果。每一個Layer需要定義兩種運算,一種是正向(forward)的運算,即從輸入數(shù)據(jù)計算輸出結果,也就是模型的預測過程;另一種是反向(backward)的運算,從輸出端的gradient求解相對于輸入的gradient,即反向傳播算法,這部分也就是模型的訓練過程。實現(xiàn)新Layer時,需要將正向和反向兩種計算過程的函數(shù)都實現(xiàn),這部分計算需要用戶自己寫C++或者CUDA(當需要運行在GPU時)代碼,對普通用戶來說還是非常難上手的。

正如它的名字Convolutional Architecture for Fast Feature Embedding所描述的,Caffe最開始設計時的目標只針對于圖像,沒有考慮文本、語音或者時間序列的數(shù)據(jù),因此Caffe對卷積神經(jīng)網(wǎng)絡的支持非常好,但對時間序列RNN、LSTM等支持得不是特別充分。同時,基于Layer的模式也對RNN不是非常友好,定義RNN結構時比較麻煩。在模型結構非常復雜時,可能需要寫非常冗長的配置文件才能設計好網(wǎng)絡,而且閱讀時也比較費力。

Caffe的一大優(yōu)勢是擁有大量的訓練好的經(jīng)典模型(AlexNet、VGG、Inception)乃至其他state-of-the-art(ResNet等)的模型,收藏在它的Model Zoo(github.com/BVLC/ caffe/wiki/Model-Zoo)。因為知名度較高,Caffe被廣泛地應用于前沿的工業(yè)界和學術界,許多提供源碼的深度學習的論文都是使用Caffe來實現(xiàn)其模型的。在計算機視覺領域Caffe應用尤其多,可以用來做人臉識別、圖片分類、位置檢測、目標追蹤等。

雖然Caffe主要是面向學術圈和研究者的,但它的程序運行非常穩(wěn)定,代碼質(zhì)量比較高,所以也很適合對穩(wěn)定性要求嚴格的生產(chǎn)環(huán)境,可以算是第一個主流的工業(yè)級深度學習框架。因為Caffe的底層是基于C++的,因此可以在各種硬件環(huán)境編譯并具有良好的移植性,支持Linux、Mac和Windows系統(tǒng),也可以編譯部署到移動設備系統(tǒng)如Android和iOS上。和其他主流深度學習庫類似,Caffe也提供了Python語言接口pycaffe,在接觸新任務,設計新網(wǎng)絡時可以使用其Python接口簡化操作。

不過,通常用戶還是使用Protobuf配置文件定義神經(jīng)網(wǎng)絡結構,再使用command line進行訓練或者預測。Caffe的配置文件是一個JSON類型的.prototxt文件,其中使用許多順序連接的Layer來描述神經(jīng)網(wǎng)絡結構。Caffe的二進制可執(zhí)行程序會提取這些.prototxt文件并按其定義來訓練神經(jīng)網(wǎng)絡。理論上,Caffe的用戶可以完全不寫代碼,只是定義網(wǎng)絡結構就可以完成模型訓練了。

Caffe完成訓練之后,用戶可以把模型文件打包制作成簡單易用的接口,比如可以封裝成Python或MATLAB的API。不過在.prototxt文件內(nèi)部設計網(wǎng)絡節(jié)構可能會比較受限,沒有像TensorFlow或者Keras那樣在Python中設計網(wǎng)絡結構方便、自由。更重要的是,Caffe的配置文件不能用編程的方式調(diào)整超參數(shù),也沒有提供像Scikit-learn那樣好用的estimator可以方便地進行交叉驗證、超參數(shù)的Grid Search等操作。Caffe在GPU上訓練的性能很好(使用單塊GTX 1080訓練AlexNet時一天可以訓練上百萬張圖片),但是目前僅支持單機多GPU的訓練,沒有原生支持分布式的訓練。慶幸的是,現(xiàn)在有很多第三方的支持,比如雅虎開源的CaffeOnSpark,可以借助Spark的分布式框架實現(xiàn)Caffe的大規(guī)模分布式訓練。

Theano

官方網(wǎng)址:http://www.deeplearning.net/software/theano/

GitHub:github.com/Theano/Theano

Theano誕生于2008年,由蒙特利爾大學Lisa Lab團隊開發(fā)并維護,是一個高性能的符號計算及深度學習庫。因其出現(xiàn)時間早,可以算是這類庫的始祖之一,也一度被認為是深度學習研究和應用的重要標準之一。Theano的核心是一個數(shù)學表達式的編譯器,專門為處理大規(guī)模神經(jīng)網(wǎng)絡訓練的計算而設計。它可以將用戶定義的各種計算編譯為高效的底層代碼,并鏈接各種可以加速的庫,比如BLAS、CUDA等。Theano允許用戶定義、優(yōu)化和評估包含多維數(shù)組的數(shù)學表達式,它支持將計算裝載到GPU(Theano在GPU上性能不錯,但是CPU上較差)。與Scikit-learn一樣,Theano也很好地整合了NumPy,對GPU的透明讓Theano可以較為方便地進行神經(jīng)網(wǎng)絡設計,而不必直接寫CUDA代碼。Theano的主要優(yōu)勢如下。

集成NumPy,可以直接使用NumPy的ndarray,API接口學習成本低。

計算穩(wěn)定性好,比如可以精準地計算輸出值很小的函數(shù)(像log(1+x))。

動態(tài)地生成C或者CUDA代碼,用以編譯成高效的機器代碼。

因為Theano非常流行,有許多人為它編寫了高質(zhì)量的文檔和教程,用戶可以方便地查找Theano的各種FAQ,比如如何保存模型、如何運行模型等。不過Theano更多地被當作一個研究工具,而不是當作產(chǎn)品來使用。雖然Theano支持Linux、Mac和Windows,但是沒有底層C++的接口,因此模型的部署非常不方便,依賴于各種Python庫,并且不支持各種移動設備,所以幾乎沒有在工業(yè)生產(chǎn)環(huán)境的應用。

Theano在調(diào)試時輸出的錯誤信息非常難以看懂,因此DEBUG時非常痛苦。同時,Theano在生產(chǎn)環(huán)境使用訓練好的模型進行預測時性能比較差,因為預測通常使用服務器CPU(生產(chǎn)環(huán)境服務器一般沒有GPU,而且GPU預測單條樣本延遲高反而不如CPU),但是Theano在CPU上的執(zhí)行性能比較差。

Theano在單GPU上執(zhí)行效率不錯,性能和其他框架類似。但是運算時需要將用戶的Python代碼轉換成CUDA代碼,再編譯為二進制可執(zhí)行文件,編譯復雜模型的時間非常久。此外,Theano在導入時也比較慢,而且一旦設定了選擇某塊GPU,就無法切換到其他設備。目前,Theano在CUDA和cuDNN上不支持多GPU,只在OpenCL和Theano自己的gpuarray庫上支持多GPU訓練,速度暫時還比不上CUDA的版本,并且Theano目前還沒有分布式的實現(xiàn)。不過,Theano在訓練簡單網(wǎng)絡(比如很淺的MLP)時性能可能比TensorFlow好,因為全部代碼都是運行時編譯,不需要像TensorFlow那樣每次feed mini-batch數(shù)據(jù)時都得通過低效的Python循環(huán)來實現(xiàn)。

Theano是一個完全基于Python(C++/CUDA代碼也是打包為Python字符串)的符號計算庫。用戶定義的各種運算,Theano可以自動求導,省去了完全手工寫神經(jīng)網(wǎng)絡反向傳播算法的麻煩,也不需要像Caffe一樣為Layer寫C++或CUDA代碼。Theano對卷積神經(jīng)網(wǎng)絡的支持很好,同時它的符號計算API支持循環(huán)控制(內(nèi)部名scan),讓RNN的實現(xiàn)非常簡單并且高性能,其全面的功能也讓Theano可以支持大部分state-of-the-art的網(wǎng)絡。

Theano派生出了大量基于它的深度學習庫,包括一系列的上層封裝,其中有大名鼎鼎的Keras,Keras對神經(jīng)網(wǎng)絡抽象得非常合適,以至于可以隨意切換執(zhí)行計算的后端(目前同時支持Theano和TensorFlow)。Keras比較適合在探索階段快速地嘗試各種網(wǎng)絡結構,組件都是可插拔的模塊,只需要將一個個組件(比如卷積層、激活函數(shù)等)連接起來,但是設計新模塊或者新的Layer就不太方便了。除Keras外,還有學術界非常喜愛的Lasagne,同樣也是Theano的上層封裝,它對神經(jīng)內(nèi)網(wǎng)絡的每一層的定義都非常嚴謹。

另外,還有scikit-neuralnetwork、nolearn這兩個基于Lasagne的上層封裝,它們將神經(jīng)網(wǎng)絡抽象為兼容Scikit-learn接口的classifier和regressor,這樣就可以方便地使用Scikit-learn中經(jīng)典的fit、transform、score等操作。除此之外,Theano的上層封裝庫還有blocks、deepy、pylearn2和Scikit-theano,可謂是一個龐大的家族。如果沒有Theano,可能根本不會出現(xiàn)這么多好用的Python深度學習庫。同樣,如果沒有Python科學計算的基石NumPy,就不會有SciPy、Scikit-learn和 Scikit-image,可以說Theano就是深度學習界的NumPy,是其他各類Python深度學習庫的基石。

雖然Theano非常重要,但是直接使用Theano設計大型的神經(jīng)網(wǎng)絡還是太煩瑣了,用 Theano實現(xiàn)Google Inception就像用NumPy實現(xiàn)一個支持向量機(SVM)。且不說很多用戶做不到用Theano實現(xiàn)一個Inception網(wǎng)絡,即使能做到但是否有必要花這個時間呢?畢竟不是所有人都是基礎科學工作者,大部分使用場景還是在工業(yè)應用中。所以簡單易用是一個很重要的特性,這也就是其他上層封裝庫的價值所在:不需要總是從最基礎的tensor粒度開始設計網(wǎng)絡,而是從更上層的Layer粒度設計網(wǎng)絡。

Torch

官方網(wǎng)址:http://torch.ch/

GitHub:github.com/torch/torch7

Torch給自己的定位是LuaJIT上的一個高效的科學計算庫,支持大量的機器學習算法,同時以GPU上的計算優(yōu)先。Torch的歷史非常悠久,但真正得到發(fā)揚光大是在Facebook開源了其深度學習的組件之后,此后包括Google、Twitter、NYU、IDIAP、Purdue等組織都大量使用Torch。Torch的目標是讓設計科學計算算法變得便捷,它包含了大量的機器學習、計算機視覺、信號處理、并行運算、圖像、視頻、音頻、網(wǎng)絡處理的庫,同時和Caffe類似,Torch擁有大量的訓練好的深度學習模型。它可以支持設計非常復雜的神經(jīng)網(wǎng)絡的拓撲圖結構,再并行化到CPU和GPU上,在Torch上設計新的Layer是相對簡單的。

它和TensorFlow一樣使用了底層C++加上層腳本語言調(diào)用的方式,只不過Torch使用的是Lua。Lua的性能是非常優(yōu)秀的(該語言經(jīng)常被用來開發(fā)游戲),常見的代碼可以通過透明的JIT優(yōu)化達到C的性能的80%;在便利性上,Lua的語法也非常簡單易讀,擁有漂亮和統(tǒng)一的結構,易于掌握,比寫C/C++簡潔很多;同時,Lua擁有一個非常直接的調(diào)用C程序的接口,可以簡便地使用大量基于C的庫,因為底層核心是C寫的,因此也可以方便地移植到各種環(huán)境。Lua支持Linux、Mac,還支持各種嵌入式系統(tǒng)(iOS、Android、FPGA等),只不過運行時還是必須有LuaJIT的環(huán)境,所以工業(yè)生產(chǎn)環(huán)境的使用相對較少,沒有Caffe和TensorFlow那么多。

為什么不簡單地使用Python而是使用LuaJIT呢?官方給出了以下幾點理由。

LuaJIT的通用計算性能遠勝于Python,而且可以直接在LuaJIT中操作C的pointers。

Torch的框架,包含Lua是自洽的,而完全基于Python的程序對不同平臺、系統(tǒng)移植性較差,依賴的外部庫較多。

LuaJIT的FFI拓展接口非常易學,可以方便地鏈接其他庫到Torch中。Torch中還專門設計了N-Dimension array type的對象Tensor,Torch中的Tensor是一塊內(nèi)存的視圖,同時一塊內(nèi)存可能有許多視圖(Tensor)指向它,這樣的設計同時兼顧了性能(直接面向內(nèi)存)和便利性。同時,Torch還提供了不少相關的庫,包括線性代數(shù)、卷積、傅里葉變換、繪圖和統(tǒng)計等,如圖2-5所示。 

 

 

 

圖2-5  Torch提供的各種數(shù)據(jù)處理的庫

Torch的nn庫支持神經(jīng)網(wǎng)絡、自編碼器、線性回歸、卷積網(wǎng)絡、循環(huán)神經(jīng)網(wǎng)絡等,同時支持定制的損失函數(shù)及梯度計算。Torch因為使用了LuaJIT,因此用戶在Lua中做數(shù)據(jù)預處理等操作可以隨意使用循環(huán)等操作,而不必像在Python中那樣擔心性能問題,也不需要學習Python中各種加速運算的庫。不過,Lua相比Python還不是那么主流,對大多數(shù)用戶有學習成本。Torch在CPU上的計算會使用OpenMP、SSE進行優(yōu)化,GPU上使用CUDA、cutorch、cunn、cuDNN進行優(yōu)化,同時還有cuda-convnet的wrapper。

Torch有很多第三方的擴展可以支持RNN,使得Torch基本支持所有主流的網(wǎng)絡。和Caffe類似的是,Torch也是主要基于Layer的連接來定義網(wǎng)絡的。Torch中新的Layer依然需要用戶自己實現(xiàn),不過定義新Layer和定義網(wǎng)絡的方式很相似,非常簡便,不像Caffe那么麻煩,用戶需要使用C++或者CUDA定義新Layer。同時,Torch屬于命令式編程模式,不像Theano、TensorFlow屬于聲明性編程(計算圖是預定義的靜態(tài)的結構),所以用它實現(xiàn)某些復雜操作(比如beam search)比Theano和TensorFlow方便很多。

Keras

官方網(wǎng)址:keras.io

GitHub:github.com/fchollet/keras

Keras是一個崇尚極簡、高度模塊化的神經(jīng)網(wǎng)絡庫,使用Python實現(xiàn),并可以同時運行在TensorFlow和Theano上。它旨在讓用戶進行最快速的原型實驗,讓想法變?yōu)榻Y果的這個過程最短。Theano和TensorFlow的計算圖支持更通用的計算,而Keras則專精于深度學習。Theano和TensorFlow更像是深度學習領域的NumPy,而Keras則是這個領域的Scikit-learn。它提供了目前為止最方便的API,用戶只需要將高級的模塊拼在一起,就可以設計神經(jīng)網(wǎng)絡,它大大降低了編程開銷(code overhead)和閱讀別人代碼時的理解開銷(cognitive overhead)。

它同時支持卷積網(wǎng)絡和循環(huán)網(wǎng)絡,支持級聯(lián)的模型或任意的圖結構的模型(可以讓某些數(shù)據(jù)跳過某些Layer和后面的Layer對接,使得創(chuàng)建Inception等復雜網(wǎng)絡變得容易),從CPU上計算切換到GPU加速無須任何代碼的改動。因為底層使用Theano或TensorFlow,用Keras訓練模型相比于前兩者基本沒有什么性能損耗(還可以享受前兩者持續(xù)開發(fā)帶來的性能提升),只是簡化了編程的復雜度,節(jié)約了嘗試新網(wǎng)絡結構的時間??梢哉f模型越復雜,使用Keras的收益就越大,尤其是在高度依賴權值共享、多模型組合、多任務學習等模型上,Keras表現(xiàn)得非常突出。

Keras所有的模塊都是簡潔、易懂、完全可配置、可隨意插拔的,并且基本上沒有任何使用限制,神經(jīng)網(wǎng)絡、損失函數(shù)、優(yōu)化器、初始化方法、激活函數(shù)和正則化等模塊都是可以自由組合的。Keras也包括絕大部分state-of-the-art的Trick,包括Adam、RMSProp、Batch Normalization、PReLU、ELU、LeakyReLU等。同時,新的模塊也很容易添加,這讓Keras非常適合最前沿的研究。Keras中的模型也都是在Python中定義的,不像Caffe、CNTK等需要額外的文件來定義模型,這樣就可以通過編程的方式調(diào)試模型結構和各種超參數(shù)。

在Keras中,只需要幾行代碼就能實現(xiàn)一個MLP,或者十幾行代碼實現(xiàn)一個AlexNet,這在其他深度學習框架中基本是不可能完成的任務。Keras最大的問題可能是目前無法直接使用多GPU,所以對大規(guī)模的數(shù)據(jù)處理速度沒有其他支持多GPU和分布式的框架快。Keras的編程模型設計和Torch很像,但是相比Torch,Keras構建在Python上,有一套完整的科學計算工具鏈,而Torch的編程語言Lua并沒有這樣一條科學計算工具鏈。無論從社區(qū)人數(shù),還是活躍度來看,Keras目前的增長速度都已經(jīng)遠遠超過了Torch。

MXNet

官網(wǎng)網(wǎng)址:mxnet.io

GitHub:github.com/dmlc/mxnet

MXNet是DMLC(Distributed Machine Learning Community)開發(fā)的一款開源的、輕量級、可移植的、靈活的深度學習庫,它讓用戶可以混合使用符號編程模式和指令式編程模式來最大化效率和靈活性,目前已經(jīng)是AWS官方推薦的深度學習框架。

MXNet的很多作者都是中國人,其最大的貢獻組織為百度,同時很多作者來自cxxnet、minerva和purine2等深度學習項目,可謂博采眾家之長。它是各個框架中率先支持多GPU和分布式的,同時其分布式性能也非常高。MXNet的核心是一個動態(tài)的依賴調(diào)度器,支持自動將計算任務并行化到多個GPU或分布式集群(支持AWS、Azure、Yarn等)。

它上層的計算圖優(yōu)化算法可以讓符號計算執(zhí)行得非???,而且節(jié)約內(nèi)存,開啟mirror模式會更加省內(nèi)存,甚至可以在某些小內(nèi)存GPU上訓練其他框架因顯存不夠而訓練不了的深度學習模型,也可以在移動設備(Android、iOS)上運行基于深度學習的圖像識別等任務。

此外,MXNet的一個很大的優(yōu)點是支持非常多的語言封裝,比如C++、Python、R、Julia、Scala、Go、MATLAB和JavaScript等,可謂非常全面,基本主流的腳本語言全部都支持了。在MXNet中構建一個網(wǎng)絡需要的時間可能比Keras、Torch這類高度封裝的框架要長,但是比直接用Theano等要快。MXNet的各級系統(tǒng)架構(下面為硬件及操作系統(tǒng)底層,逐層向上為越來越抽象的接口)如圖2-6所示。 

 

 

 

圖2-6  MXNet系統(tǒng)架構

CNTK

官方網(wǎng)址:cntk.ai

GitHub:github.com/Microsoft/CNTK

CNTK(Computational Network Toolkit)是微軟研究院(MSR)開源的深度學習框架。它最早由start the deep learning craze的演講人創(chuàng)建,目前已經(jīng)發(fā)展成一個通用的、跨平臺的深度學習系統(tǒng),在語音識別領域的使用尤其廣泛。CNTK通過一個有向圖將神經(jīng)網(wǎng)絡描述為一系列的運算操作,這個有向圖中子節(jié)點代表輸入或網(wǎng)絡參數(shù),其他節(jié)點代表各種矩陣運算。CNTK支持各種前饋網(wǎng)絡,包括MLP、CNN、RNN、LSTM、Sequence-to-Sequence模型等,也支持自動求解梯度。CNTK有豐富的細粒度的神經(jīng)網(wǎng)絡組件,使得用戶不需要寫底層的C++或CUDA,就能通過組合這些組件設計新的復雜的Layer。CNTK擁有產(chǎn)品級的代碼質(zhì)量,支持多機、多GPU的分布式訓練。

CNTK設計是性能導向的,在CPU、單GPU、多GPU,以及GPU集群上都有非常優(yōu)異的表現(xiàn)。同時微軟最近推出的1-bit compression技術大大降低了通信代價,讓大規(guī)模并行訓練擁有了很高的效率。CNTK同時宣稱擁有很高的靈活度,它和Caffe一樣通過配置文件定義網(wǎng)絡結構,再通過命令行程序執(zhí)行訓練,支持構建任意的計算圖,支持AdaGrad、RmsProp等優(yōu)化方法。它的另一個重要特性就是拓展性,CNTK除了內(nèi)置的大量運算核,還允許用戶定義他們自己的計算節(jié)點,支持高度的定制化。

CNTK在2016年9月發(fā)布了對強化學習的支持,同時,除了通過寫配置文件的方式定義網(wǎng)絡結構,CNTK還將支持其他語言的綁定,包括Python、C++和C#,這樣用戶就可以用編程的方式設計網(wǎng)絡結構。CNTK與Caffe一樣也基于C++并且跨平臺,大部分情況下,它的部署非常簡單。PC上支持Linux、Mac和Windows,但是它目前不支持ARM架構,限制了其在移動設備上的發(fā)揮。圖2-7所示為CNTK目前的總體架構圖。 

 

 

 

圖2-7  CNTK的總體架構圖

CNTK原生支持多GPU和分布式,從官網(wǎng)公布的對比評測來看,性能非常不錯。在多GPU方面,CNTK相對于其他的深度學習庫表現(xiàn)得更突出,它實現(xiàn)了1-bit SGD和自適應的mini-batching。圖2-8所示為CNTK官網(wǎng)公布的在2015年12月的各個框架的性能對比。在當時,CNTK是唯一支持單機8塊GPU的框架,并且在分布式系統(tǒng)中可以超越8塊GPU的性能。 

 

 

 

圖2-8  CNTK與各個框架的性能對比

Deeplearning4J

官方網(wǎng)址:http://deeplearning4j.org/

GitHub: github.com/deeplearning4j/deeplearning4j

Deeplearning4J(簡稱DL4J)是一個基于Java和Scala的開源的分布式深度學習庫,由Skymind于2014年6月發(fā)布,其核心目標是創(chuàng)建一個即插即用的解決方案原型。埃森哲、雪弗蘭、博斯咨詢和IBM等都是DL4J的客戶。DL4J擁有一個多用途的n-dimensional array的類,可以方便地對數(shù)據(jù)進行各種操作;擁有多種后端計算核心,用以支持CPU及GPU加速,在圖像識別等訓練任務上的性能與Caffe相當;可以與Hadoop及Spark自動整合,同時可以方便地在現(xiàn)有集群(包括但不限于AWS,Azure等)上進行擴展,同時DL4J的并行化是根據(jù)集群的節(jié)點和連接自動優(yōu)化,不像其他深度學習庫那樣可能需要用戶手動調(diào)整。

DL4J選擇Java作為其主要語言的原因是,目前基于Java的分布式計算、云計算、大數(shù)據(jù)的生態(tài)非常龐大。用戶可能擁有大量的基于Hadoop和Spark的集群,因此在這類集群上搭建深度學習平臺的需求便很容易被DL4J滿足。同時JVM的生態(tài)圈內(nèi)還有數(shù)不勝數(shù)的Library的支持,而DL4J也創(chuàng)建了ND4J,可以說是JVM中的NumPy,支持大規(guī)模的矩陣運算。此外,DL4J還有商業(yè)版的支持,付費用戶在出現(xiàn)問題時可以通過電話咨詢尋求支持。

作者介紹

黃文堅,PPmoney大數(shù)據(jù)算法總監(jiān),負責集團的風控、理財、互聯(lián)網(wǎng)證券等業(yè)務的數(shù)據(jù)挖掘工作。Google TensorFlow Contributor。前明略數(shù)據(jù)技術合伙人,領導了對諸多大型銀行、保險公司、基金的數(shù)據(jù)挖掘項目,包括建立金融風控模型、新聞輿情分析、保險復購預測等。曾就職于阿里巴巴搜索引擎算法團隊,負責天貓個性化搜索系統(tǒng)。曾參加阿里巴巴大數(shù)據(jù)推薦算法大賽,于7000多支隊伍中獲得前10名。本科、研究生就讀于香港科技大學,曾在頂級會議和期刊SIGMOBILE MobiCom、IEEE Transactions on Image Processing發(fā)表論文,研究成果獲美國計算機協(xié)會移動計算大會(MobiCom)最佳移動應用技術冠軍,并獲得兩項美國專利和一項中國專利。

唐源,目前在芝加哥的Uptake公司帶領團隊建立用于多個物聯(lián)網(wǎng)領域的數(shù)據(jù)科學引擎進行條件和健康監(jiān)控,也建立了公司的預測模型引擎,現(xiàn)在被用于航空、能源等大型機械領域。一直活躍在開源軟件社區(qū),是TensorFlow和DMLC的成員,是TensorFlow、XGBoost、MXNet等軟件的committer,TF.Learn、ggfortify等軟件的作者,以及caret、pandas等軟件的貢獻者。曾獲得谷歌Open Source Peer Bonus,以及多項高校和企業(yè)編程競賽的獎項。在美國賓州州立大學獲得榮譽數(shù)學學位,曾在本科學習期間成為創(chuàng)業(yè)公司DataNovo的核心創(chuàng)始成員,研究專利數(shù)據(jù)挖掘、無關鍵字現(xiàn)有技術搜索、策略推薦等。

責任編輯:龐桂玉 來源: 大數(shù)據(jù)雜談
相關推薦

2017-03-01 13:36:41

TensorFlowTheano框架

2017-03-06 15:25:47

PyTorchMxnet深度學習

2017-09-18 17:34:53

深度學習學習框架Keras

2016-12-15 09:44:31

框架Caffe源碼

2019-03-06 09:55:54

Python 開發(fā)編程語言

2017-07-05 14:21:30

框架TensorFlowTheano

2020-02-25 15:04:48

深度學習編程人工智能

2016-12-06 08:51:48

深度學習TensorFlow機器學習

2017-09-11 10:00:59

Caffe2TensorFlow神經(jīng)網(wǎng)絡

2017-12-01 15:24:04

TensorFlow深度學習教程

2016-12-23 09:09:54

TensorFlowKubernetes框架

2020-08-28 17:54:31

深度學習框架

2018-10-13 09:02:25

Python 開發(fā)深度學習

2022-11-13 08:11:03

TensorFlow人工智能開源

2019-01-30 11:37:14

深度學習工具人工智能

2017-04-25 18:03:11

Caffe深度學習框架

2017-01-04 10:47:45

TensorFlow框架Theano

2017-01-06 13:00:44

框架TensorFlowTheano

2021-11-27 05:03:09

框架深度學習

2017-05-05 10:15:38

深度學習框架對比分析
點贊
收藏

51CTO技術棧公眾號

欧美 日本 亚洲| 国产精品一区二区三区精品| 国产小视频你懂的| 亚洲2区在线| 精品福利免费观看| 中文字幕一区二区三区四区五区六区| www日本在线| 日韩精彩视频在线观看| 久久成年人视频| 自拍偷拍亚洲天堂| 日韩精品一区二区三区中文 | 亚洲天堂开心观看| 国产探花在线观看视频| 另类专区亚洲| 91精品亚洲| 亚洲精品mp4| 红桃视频 国产| 成人小电影网站| 亚洲一区二区三区在线播放| 国产日韩欧美视频在线| 精品无码黑人又粗又大又长| 成人午夜av| 亚洲精品动漫100p| 免费人成视频在线播放| abab456成人免费网址| 亚洲一区二区三区四区五区黄| 五月天久久狠狠| 五月激情婷婷综合| 国产99久久久国产精品潘金 | 日韩一区精品字幕| 午夜精品久久久99热福利| 天天做夜夜爱爱爱| 日韩精品永久网址| 国产一区二区三区毛片| 欧美成人三级伦在线观看| 久久综合给合| 亚洲自拍偷拍网站| 国产精品无码乱伦| 欧美三级黄网| 欧美激情中文不卡| 秋霞在线观看一区二区三区| 欧美成熟毛茸茸| 日韩一区精品视频| 欧美中在线观看| 日韩三级视频在线| 禁断一区二区三区在线| 日韩精品免费在线播放| 精品国产一区在线| 秋霞国产精品| 在线国产电影不卡| 别急慢慢来1978如如2| 欧美大片高清| 色婷婷综合中文久久一本| 免费高清在线观看免费| 交100部在线观看| 国产精品久久久久aaaa樱花| 丝袜美腿玉足3d专区一区| 国产高清视频免费最新在线| 国产午夜亚洲精品午夜鲁丝片| 日韩电影在线播放| 国产成人精品a视频| 久久99久久久久| 成人av在线网址| 99久久国产免费| 高清不卡一区二区在线| 精品国产免费久久久久久尖叫| 无码国产精品一区二区免费16 | 欧美日韩一区二区在线视频| 欧美伦理片在线观看| 国产极品嫩模在线观看91精品| 欧美午夜视频网站| 亚洲第一天堂久久| 一区二区视频| 精品一区二区电影| 亚洲黄色网址大全| 欧美日韩少妇| 欧美专区在线观看| 中文字幕在线2019| 国产精品66部| 精品久久久久久综合日本| 黄色片在线看| 樱花影视一区二区| 俄罗斯av网站| 99国内精品久久久久| 亚洲第一免费网站| av电影在线不卡| 亚洲h色精品| 91av在线视频观看| 91精品人妻一区二区三区果冻| 国产一区二区三区免费播放| 久久国产精品一区二区三区四区| 成人全视频高清免费观看| 亚洲激情自拍偷拍| 不卡影院一区二区| 视频一区在线| 国产亚洲激情在线| 久久亚洲成人av| 久热精品在线| 粉嫩精品一区二区三区在线观看 | 久草资源站在线观看| 日韩电影精品| 日韩成人在线播放| www.97视频| 国产精品夜夜夜| 91免费的视频在线播放| jizz国产在线观看| 国产一区白浆| 成人一区二区电影| 每日更新在线观看av| 亚洲精品成人悠悠色影视| 国产成人精品无码播放| 91综合精品国产丝袜长腿久久| 亚洲人成在线观看网站高清| 久草资源在线视频| 日韩精品91亚洲二区在线观看| 国产精品久久久久久久久久久久午夜片 | 欧美aa在线视频| 精品国产乱码久久久久久108| 日韩欧美小视频| 一本色道亚洲精品aⅴ| 国产香蕉精品视频| 一区二区在线| 国产一区二区色| jzzjzzjzz亚洲成熟少妇| 同产精品九九九| av在线天堂网| 亚洲国产日韩欧美在线| 国产精品亚洲аv天堂网| 亚洲 美腿 欧美 偷拍| 亚洲自拍偷拍av| 国产在线观看中文字幕| 久久要要av| 国产精品欧美一区二区三区奶水| 天天在线女人的天堂视频| 亚洲午夜一二三区视频| 尤物网站在线看| 小处雏高清一区二区三区| 国产精品夜色7777狼人| av免费在线一区二区三区| 国产精品免费av| 老司机午夜av| 国产中文字幕一区二区三区| 日韩美女在线播放| 国产色在线 com| 色视频成人在线观看免| 中文字幕永久有效| 国产欧美一区| 国产精品xxx视频| 成人高清免费在线播放| 精品视频在线免费观看| 人妻互换一区二区激情偷拍| 蜜臀av性久久久久蜜臀av麻豆| 神马影院午夜我不卡影院| 欧美日韩尤物久久| xxxxxxxxx欧美| 国产欧美一区二区三区视频在线观看| 亚洲欧美日韩中文字幕一区二区三区 | 国产一区二区三区免费观看| 免费观看国产视频在线| 日韩三级av高清片| 午夜精品福利在线观看| 男人的天堂在线| 欧美午夜一区二区| 免费看一级大片| 日韩一区二区久久| 欧美成ee人免费视频| 日韩经典一区| 蜜臀久久99精品久久久久久宅男| 久久久久亚洲av成人毛片韩| 久久久久国产精品人| 国产一区二区在线免费播放| 伊人成综合网| 久久99精品久久久久子伦| 四虎4545www精品视频| 日韩在线播放视频| 亚洲精品国产一区二| 狠狠躁夜夜躁人人爽超碰91| 免费看91的网站| 国产成人午夜精品5599| 成人在线免费观看av| 日本不卡免费一区| 亚洲一区亚洲二区| 新版的欧美在线视频| 精品国产一区二区三区久久久| 国产小视频免费观看| 色婷婷国产精品综合在线观看| 四虎地址8848| 91视频.com| 五月天视频在线观看| 亚洲激情在线| 99伊人久久| 成人av观看| 久久这里有精品视频| 天堂资源最新在线| 91精品婷婷国产综合久久性色| 亚洲视频免费播放| 中文字幕一区二区三区在线播放 | 一区二区中文字幕在线| 国产黑丝一区二区| 精品一区二区三区在线观看| 欧美视频在线播放一区| 最新欧美人z0oozo0| 欧美日韩在线观看一区| 日韩影片在线观看| 国产精品午夜一区二区欲梦| 僵尸再翻生在线观看免费国语| 久久精品国产成人精品| 伦理片一区二区三区| 精品福利在线导航| 97人妻精品一区二区三区软件| 91丨porny丨户外露出| 亚洲免费黄色网| 久久久久久久波多野高潮日日| 国产在线观看欧美| 偷拍欧美精品| 亚洲第一在线综合在线| 亚洲成人一品| 国产欧美一区二区视频| 免费欧美网站| 国产深夜精品福利| 91国内外精品自在线播放| 欧美专区国产专区| 国产资源在线观看入口av| 久久久久国产一区二区三区| 嫩草影院一区二区| 日韩一区二区三区四区| 亚洲最大成人av| 欧美中文字幕亚洲一区二区va在线 | 亚洲www在线观看| 成人在线高清| 国产精品三级久久久久久电影| 国产精品伦理| 全亚洲最色的网站在线观看| 午夜久久中文| 国产91精品久久久| 国产视频网址在线| 亚洲欧美日韩一区二区三区在线| 中文字幕人妻精品一区| 欧美天天综合色影久久精品| 精品91久久久| 精品欧美aⅴ在线网站| 日韩网红少妇无码视频香港| 午夜视频在线观看一区二区三区| 欧美黑人一级片| 亚洲国产精品自拍| 国产视频三区四区| 国产日韩欧美综合在线| 99精品欧美一区二区| 亚洲国产成人在线| 熟女少妇a性色生活片毛片| ●精品国产综合乱码久久久久| 少妇视频一区二区| 亚洲欧洲99久久| 免费一级肉体全黄毛片| 亚洲一区二区三区四区在线免费观看 | 加勒比一区二区| 中文字幕av一区二区三区免费看| 成熟人妻av无码专区| 国产精品嫩草久久久久| 欧美另类videoxo高潮| 一区二区三区小说| 午夜精品久久久久久久久久久久久蜜桃| 五月天国产精品| 91麻豆精品在线| 91精品在线观看入口| 人妻无码中文字幕免费视频蜜桃| 亚洲国产欧美自拍| 成人网视频在线观看| 久久久精品在线观看| jizzjizz中国精品麻豆| 欧美亚洲另类制服自拍| 成人四虎影院| 成人三级视频在线观看一区二区| 欧美变态网站| 先锋影音亚洲资源| 欧美日韩三级| 国产极品美女高潮无套久久久| 久久99久久99| 亚洲精品中文字幕在线播放| 国产色91在线| 欧美性猛交xxxxx少妇| 婷婷亚洲久悠悠色悠在线播放 | 擼擼色在线看观看免费| 国产精品高潮呻吟久久av野狼| 日日夜夜亚洲精品| 精品日韩欧美| 91精品综合久久久久久久久久久| 国产成a人亚洲精v品在线观看| 婷婷亚洲五月| 久久视频这里有精品| 久久精品国产一区二区三区免费看| 波多野结衣三级视频| 国产欧美精品一区aⅴ影院 | 国产欧美日韩综合精品二区| 精品国产中文字幕第一页| 菠萝蜜视频在线观看入口| 日av在线不卡| 五月开心播播网| 亚洲欧美日韩久久精品| 日本久久综合网| 亚洲第一精品夜夜躁人人爽| 麻豆网站视频在线观看| 热99精品只有里视频精品| 99a精品视频在线观看| 亚洲一区二区三区四区中文| 在线视频精品| 五月天丁香社区| 中文字幕综合网| 精品久久久久久久久久久国产字幕| 日韩精品一区二区三区在线| aaa国产视频| 亚洲人成电影网| 成人免费网站观看| 91传媒视频在线观看| 欧美va久久久噜噜噜久久| 欧美性大战久久久久xxx| 国产宾馆实践打屁股91| 无码人妻精品中文字幕| 欧美色图在线观看| 邻居大乳一区二区三区| 午夜欧美不卡精品aaaaa| 亚洲一区网址| 国产性生活免费视频| 国产综合色视频| 男人的午夜天堂| 欧美日韩精品专区| av天堂一区二区三区| 色噜噜亚洲精品中文字幕| 香蕉视频亚洲一级| 欧美成人dvd在线视频| 一本色道久久综合| 91玉足脚交白嫩脚丫| 亚洲6080在线| 午夜视频免费看| 97成人精品区在线播放| 米奇精品关键词| 日韩黄色影视| 蘑菇福利视频一区播放| 精品少妇一区二区三区免费观| 五月天激情小说综合| 日韩一级片免费在线观看| 欧美日韩电影在线观看| 日韩在线成人| 亚洲精品天堂成人片av在线播放 | 国产原创精品视频| 成人黄色在线播放| 亚洲午夜精品一区 二区 三区| 国产又黄又猛的视频| 亚洲欧美日韩在线播放| 朝桐光av在线一区二区三区| 欧美极品少妇全裸体| 91精品国产乱码久久久竹菊| 国产freexxxx性播放麻豆| 成人h动漫精品| av在线免费播放网址| 欧美日韩激情在线| 黄色大片在线播放| 成人91视频| 一本一本久久| 成人激情五月天| 在线不卡中文字幕| 18网站在线观看| 久久大片网站| 蜜桃视频在线观看一区| 久久久久久久久毛片| 亚洲国产精品一区二区久| 欧美理论影院| 欧美日韩一级在线 | 大吊一区二区三区| 欧美一区三区四区| 高清电影在线免费观看| 日本一区二区精品| 国产麻豆精品在线| 后入内射无码人妻一区| 日韩一区二区三区视频在线 | 国产91精品网站| 超碰成人久久| 老熟女高潮一区二区三区| 色悠悠亚洲一区二区| 毛片激情在线观看| 精品卡一卡二| 久久国产精品99精品国产| 久久久久久久黄色| 亚洲小视频在线观看| 久久伊人影院| 日本激情视频在线| 亚洲永久精品国产| 成人jjav| 国产精品视频一区二区三区经| 日韩国产欧美在线播放| 青青草手机视频在线观看| 亚洲乱码国产乱码精品精天堂| 视频欧美精品| 亚欧无线一线二线三线区别| 亚洲欧洲日本在线| 飘雪影视在线观看免费观看 | 亚洲成人黄色片| 国产精品免费视频久久久| 亚洲毛片网站| 中文字幕在线2021|