機器學習三大框架對比

導語:

Science is NOT a battle, it is a collaboration. We all build on each other’s ideas. Science is an act of love, not war. Love for the beauty in the world that surr ounds us and love to share and build something together. That makes science a highly satisfying activity, emotionally speaking!
——Yoshua Bengio

人工智能的浪潮正席捲全球,諸多詞彙時刻縈繞在我們的耳邊,如人工智能,機器學習,深度學習等。“人工智能”的概念早在1956年就被提出,顧名思義用計算機來構造複雜的,擁有與人類智慧同樣本質特性的機器。經過幾十年的發展,在2012年後,得益於數據量的上漲,運算力的提升和機器學習算法(深度學習)的出現,人工智能開始大爆發。但目前的科研工作都集中在弱人工智能部分,即讓機器具備觀察和感知能力,可以一定程度的理解和推理,預期在該領域能夠取得一些重大突破。電影裏的人工智能多半都是在描繪強人工智能,即讓機器獲得自適應能力,解決一些之前還沒遇到過的問題,而這部分在目前的現實世界裏難以真正實現。

弱人工智能有希望取得突破,是如何實現的,“智能”又從何而來呢?這主要歸功於一種實現人工智能的方法——機器學習。

一、機器學習概念

機器學習是一種實現人工智能的方法。

機器學習最基本的做法,是使用算法來解析數據、從中學習,然後對真實世界中的事件做出決策和預測。與傳統的爲解決特定任務、硬編碼的軟件程序不同,機器學習是用大量的數據來“訓練”,通過各種算法從數據中學習如何完成任務。器學習直接來源於早期的人工智能領域,傳統的算法包括決策樹、聚類、貝葉斯分類、支持向量機、EM、Adaboost等等。從學習方法上來分,機器學習算法可以分爲監督學習(如分類問題)、無監督學習(如聚類問題)、半監督學習、集成學習、深度學習和強化學習。

傳統的機器學習算法在指紋識別、基於Haar的人臉檢測、基於HoG特徵的物體檢測等領域的應用基本達到了商業化的要求或者特定場景的商業化水平,但每前進一步都異常艱難,直到深度學習算法的出現。

二、深度學習概念

深度學習是一種實現機器學習的技術。

深度學習本來並不是一種獨立的學習方法,其本身也會用到有監督和無監督的學習方法來訓練深度神經網絡。但由於近幾年該領域發展迅猛,一些特有的學習手段相繼被提出(如殘差網絡),因此越來越多的人將其單獨看作一種學習的方法。

最初的深度學習是利用深度神經網絡來解決特徵表達的一種學習過程。深度神經網絡本身並不是一個全新的概念,可大致理解爲包含多個隱含層的神經網絡結構。爲了提高深層神經網絡的訓練效果,人們對神經元的連接方法和激活函數等方面做出相應的調整。其實有不少想法早年間也曾有過,但由於當時訓練數據量不足、計算能力落後,因此最終的效果不盡如人意。

深度學習,作爲目前最熱的機器學習方法,但並不意味着是機器學習的終點。起碼目前存在以下問題:

  1. 深度學習模型需要大量的訓練數據,才能展現出神奇的效果,但現實生活中往往會遇到小樣本問題,此時深度學習方法無法入手,傳統的機器學習方法就可以處理;

  2. 有些領域,採用傳統的簡單的機器學習方法,可以很好地解決了,沒必要非得用複雜的深度學習方法;

3)深度學習的思想,來源於人腦的啓發,但絕不是人腦的模擬。

因此,機器學習框架和深度學習框架之間也是有區別的。本質上,機器學習框架涵蓋用於分類,迴歸,聚類,異常檢測和數據準備的各種學習方法,並且其可以或可以不包括神經網絡方法。深度學習或深度神經網絡(DNN)框架涵蓋具有許多隱藏層的各種神經網絡拓撲。這些層包括模式識別的多步驟過程。網絡中的層越多,可以提取用於聚類和分類的特徵越複雜。我們常見的Caffe,CNTK,DeepLearning4j,Keras,MXNet和TensorFlow是深度學習框架。 Scikit-learning和Spark MLlib是機器學習框架。 Theano跨越了這兩個類別。

本文接下來的篇幅將會重點介紹深度學習的三個框架caffe、tensorflow和keras,如果只是需要使用傳統的機器學習基礎算法使用scikit-learning和spark MLlib則更爲合適。

三、深度學習框架比較

神經網絡一般包括:訓練,測試兩大階段。訓練:就是把訓練數據(原料)和神經網絡模型:如AlexNet、RNN等“倒進” 神經網絡訓練框架例如cafffe等然後用 CPU或GPU(真火) “提煉出” 模型參數(仙丹)的過程。測試:就是把測試數據用訓練好的模型(神經網絡模型 + 模型參數)跑一跑看看結果如何,作爲煉丹爐caffe,keras,tensorflow就是把煉製過程所涉及的概念做抽象,形成一套體系。

(一)Caffe

1、概念介紹
Caffe是一個清晰而高效的深度學習框架,也是一個被廣泛使用的開源深度學習框架,在Tensorflow出現之前一直是深度學習領域Github star最多的項目。

Caffe的主要優勢爲:容易上手,網絡結構都是以配置文件形式定義,不需要用代碼設計網絡。訓練速度快,組件模塊化,可以方便的拓展到新的模型和學習任務上。但是Caffe最開始設計時的目標只針對於圖像,沒有考慮文本、語音或者時間序列的數據,因此Caffe對卷積神經網絡的支持非常好,但是對於時間序列RNN,LSTM等支持的不是特別充分。caffe工程的models文件夾中常用的網絡模型比較多,比如Lenet、AlexNet、ZFNet、VGGNet、GoogleNet、ResNet等。

2、Caffe的模塊結構
總的來講,由低到高依次把網絡中的數據抽象成Blob, 各層網絡抽象成 Layer ,整個網絡抽象成Net,網絡模型的求解方法 抽象成 Solver。

  1. Blob 主要用來表示網絡中的數據,包括訓練數據,網絡各層自身的參數,網絡之間傳遞的數據都是通過 Blob 來實現的,同時 Blob 數據也支持在 CPU 與 GPU 上存儲,能夠在兩者之間做同步。

  2. Layer 是對神經網絡中各種層的一個抽象,包括我們熟知的卷積層和下采樣層,還有全連接層和各種激活函數層等等。同時每種 Layer 都實現了前向傳播和反向傳播,並通過 Blob 來傳遞數據。

  3. Net 是對整個網絡的表示,由各種 Layer 前後連接組合而成,也是我們所構建的網絡模型。

  4. Solver 定義了針對 Net 網絡模型的求解方法,記錄網絡的訓練過程,保存網絡模型參數,中斷並恢復網絡的訓練過程。自定義 Solver 能夠實現不同的網絡求解方式。

3、安裝方式
Caffe 需要預先安裝比較多的依賴項,CUDA,snappy,leveldb,gflags,glog,szip,lmdb,OpenCV,hdf5,BLAS,boost等等

Caffe官網:http://caffe.berkeleyvision.org/
Caffe Github : https://github.com/BVLC/caffe
Caffe 安裝教程:http://caffe.berkeleyvision.org/installation.html http://blog.csdn.net/yhaolpz/article/details/71375762

Caffe 安裝分爲CPU和GPU版本,GPU版本需要顯卡支持以及安裝CUDA。
Caffe依賴 ProtoBuffer Boost GFLAGS GLOG BLAS HDF5 OpenCV LMDB LEVELDB Snappy

4、使用Caffe搭建神經網絡

表 3-1 caffe搭建神經網絡流程
使用流程 操作說明
1、數據格式處理 將數據處理成caffe支持格式,具體包括:LEVELDB,LMDB,內存數據,hdfs數據,圖像數據,windows,dummy等。
2、編寫網絡結構文件 定義網絡結構,如當前網絡包括哪幾層,每層作用是什麼,使用caffe過程中最麻煩的一個操作步驟。具體編寫格式可參考caffe框架自帶自動識別手寫體樣例:caffe/examples/mnist/lenet_train_test.prototxt。
3、編寫網絡求解文件 定義了網絡模型訓練過程中需要設置的參數,比如學習率,權重衰減係數,迭代次數,使用GPU還是CP等,一般命名方式爲xx_solver.prototxt,可參考:caffe/examples/mnist/lenet_solver.prototxt。
4、訓練 基於命令行的訓練,如:caffe train -solver examples/mnist/lenet_solver.prototxt
5、測試 caffe test -model examples/mnist/lenet_train_test.prototxt -weights examples/mnist/lenet_iter_10000.caffemodel -gpu 0 -iterations 100

在上述流程中,步驟2是核心操作,也是caffe使用最讓人頭痛的地方,keras則對該部分做了更高層的抽象,讓使用者能夠快速編寫出自己想要實現的模型。

(二) Tensorflow

1、概念介紹
TensorFlow是一個使用數據流圖進行數值計算的開源軟件庫。圖中的節點表示數學運算,而圖邊表示在它們之間傳遞的多維數據陣列(又稱張量)。靈活的體系結構允許你使用單個API將計算部署到桌面、服務器或移動設備中的一個或多個CPU或GPU。Tensorflow涉及相關概念解釋如下:

1)符號計算

符號計算首先定義各種變量,然後建立一個“計算圖”,計算圖規定了各個變量之間的計算關係。 符號計算也叫數據流圖,其過程如下圖3-1所示,數據是按圖中黑色帶箭頭的線流動的。

在這裏插入圖片描述
圖 3-1 數據流圖示例

數據流圖用“結點”(nodes)和“線”(edges)的有向圖來描述數學計算。

① “節點” 一般用來表示施加的數學操作,但也可以表示數據輸入(feed in)的起點/輸出(push out)的終點,或者是讀取/寫入持久變量(persistent variable)的終點。

② “線”表示“節點”之間的輸入/輸出關係。

③ 在線上流動的多維數據陣列被稱作“張量”。

2)張量

張量(tensor),可以看作是向量、矩陣的自然推廣,用來表示廣泛的數據類型。張量的階數也叫維度。

0階張量,即標量,是一個數。

1階張量,即向量,一組有序排列的數

2階張量,即矩陣,一組向量有序的排列起來

3階張量,即立方體,一組矩陣上下排列起來

4階張量…

依次類推

3)數據格式(data_format)

目前主要有兩種方式來表示張量:
① th模式或channels_first模式,Theano和caffe使用此模式。
② tf模式或channels_last模式,TensorFlow使用此模式。

下面舉例說明兩種模式的區別:

對於100張RGB3通道的16×32(高爲16寬爲32)彩色圖,

th表示方式:(100,3,16,32)

tf表示方式:(100,16,32,3)

唯一的區別就是表示通道個數3的位置不一樣。

2、Tensorflow的模塊結構

Tensorflow/core目錄包含了TF核心模塊代碼,具體結構如圖3-2所示:

在這裏插入圖片描述

圖 3-2 tensorflow代碼模塊結構

3、安裝方式

1、官網下載naconda安裝:https://www.anaconda.com/download/

2、依次在Anaconda Prompt控制檯,按以下5個步驟輸入指令進行安裝:

  1. 安裝py3+ cmd : conda create -n py3.6 python=3.6 anaconda

  2. 激活虛擬環境 cmd : activate py3.6

  3. 激活TSF預安裝cmd:

conda create -n tensorflow python=3.6

activate tensorflow
  1. 安裝TSF:
pip install --ignore-installed --upgrade tensorflow

pip install --ignore-installed --upgrade tensorflow-gpu
  1.    退出虛擬環境cmd :deactivate py3.6      
    

4、使用Tensorflow搭建神經網絡

使用Tensorflow搭建神經網絡主要包含以下6個步驟:

  1. 定義添加神經層的函數

  2. 準備訓練的數據

  3. 定義節點準備接收數據

  4. 定義神經層:隱藏層和預測層

  5. 定義 loss 表達式

  6. 選擇 optimizer 使 loss 達到最小

  7. 對所有變量進行初始化,通過 sess.run optimizer,迭代多次進行學習。

5、示例代碼

Tensorflow 構建神經網絡識別手寫數字,具體代碼如下所示:

import tensorflow as tf
import numpy as np

# 添加層
def add_layer(inputs, in_size, out_size, activation_function=None):
   # add one more layer and return the output of this layer
   Weights = tf.Variable(tf.random_normal([in_size, out_size]))
   biases = tf.Variable(tf.zeros([1, out_size]) + 0.1)
   Wx_plus_b = tf.matmul(inputs, Weights) + biases
   if activation_function is None:
       outputs = Wx_plus_b
   else:
       outputs = activation_function(Wx_plus_b)
   return outputs

# 1.訓練的數據
# Make up some real data 
x_data = np.linspace(-1,1,300)[:, np.newaxis]
noise = np.random.normal(0, 0.05, x_data.shape)
y_data = np.square(x_data) - 0.5 + noise

# 2.定義節點準備接收數據
# define placeholder for inputs to network  
xs = tf.placeholder(tf.float32, [None, 1])
ys = tf.placeholder(tf.float32, [None, 1])

# 3.定義神經層:隱藏層和預測層
# add hidden layer 輸入值是 xs,在隱藏層有 10 個神經元   
l1 = add_layer(xs, 1, 10, activation_function=tf.nn.relu)
# add output layer 輸入值是隱藏層 l1,在預測層輸出 1 個結果
prediction = add_layer(l1, 10, 1, activation_function=None)

# 4.定義 loss 表達式
# the error between prediciton and real data    
loss = tf.reduce_mean(tf.reduce_sum(tf.square(ys - prediction),
                    reduction_indices=[1]))

# 5.選擇 optimizer 使 loss 達到最小                   
# 這一行定義了用什麼方式去減少 loss,學習率是 0.1       
train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)

# important step 對所有變量進行初始化
init = tf.initialize_all_variables()
sess = tf.Session()
# 上面定義的都沒有運算,直到 sess.run 纔會開始運算
sess.run(init)

# 迭代 1000 次學習,sess.run optimizer
for i in range(1000):
   # training train_step 和 loss 都是由 placeholder 定義的運算,所以這裏要用 feed 傳入參數
   sess.run(train_step, feed_dict={xs: x_data, ys: y_data})
   if i % 50 == 0:
       # to see the step improvement
       print(sess.run(loss, feed_dict={xs: x_data, ys: y_data}))
(三) Keras

1、概念介紹

Keras由純Python編寫而成並基於Tensorflow、Theano以及CNTK後端,相當於Tensorflow、Theano、 CNTK的上層接口,號稱10行代碼搭建神經網絡,具有操作簡單、上手容易、文檔資料豐富、環境配置容易等優點,簡化了神經網絡構建代碼編寫的難度。目前封裝有全連接網絡、卷積神經網絡、RNN和LSTM等算法。

Keras有兩種類型的模型,序貫模型(Sequential)和函數式模型(Model),函數式模型應用更爲廣泛,序貫模型是函數式模型的一種特殊情況。

  1. 序貫模型(Sequential):單輸入單輸出,一條路通到底,層與層之間只有相鄰關係,沒有跨層連接。這種模型編譯速度快,操作也比較簡單

  2. 函數式模型(Model):多輸入多輸出,層與層之間任意連接。這種模型編譯速度慢。

2、Keras的模塊結構

Keras主要由5大模塊構成,模塊之間的關係及每個模塊的功能如圖3-3所示:

在這裏插入圖片描述

圖 3-3 keras模塊結構圖

3、安裝方式

Keras的安裝方式有以下三個步驟:

  1. 安裝anaconda(python)

  2. 用於科學計算的python發行版,支持Linux、Mac、Windows系統,提供了包管理與環境管理的功能,可以很方便的解決多版本python並存、切換以及各種第三方包安裝問題。

  3. 利用pip或者conda安裝numpy、keras、 pandas、tensorflow等庫

下載地址: https://www.anaconda.com/what-is-anaconda/

4、使用Keras搭建神經網絡

使用keras搭建一個神經網絡,包括5個步驟,分別爲模型選擇、構建網絡層、編譯、訓練和預測。每個步驟操作過程中使用到的keras模塊如圖3-4所示。

在這裏插入圖片描述

圖 3-4 使用keras搭建神經網絡步驟

6、示例代碼

Kears構建神經網絡識別手寫數字,具體代碼如下所示:

from keras.models import Sequential  
from keras.layers.core import Dense, Dropout, Activation  
from keras.optimizers import SGD  
from keras.datasets import mnist  
import numpy 
'''
    第一步:選擇模型
'''
model = Sequential()
'''
   第二步:構建網絡層
'''
model.add(Dense(500,input_shape=(784,))) # 輸入層,28*28=784  
model.add(Activation('tanh')) # 激活函數是tanh  
model.add(Dropout(0.5)) # 採用50%的dropout

model.add(Dense(500)) # 隱藏層節點500個  
model.add(Activation('tanh'))  
model.add(Dropout(0.5))

model.add(Dense(10)) # 輸出結果是10個類別,所以維度是10  
model.add(Activation('softmax')) # 最後一層用softmax作爲激活函數

'''
   第三步:編譯
'''
sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True) # 優化函數,設定學習率(lr)等參數  
model.compile(loss='categorical_crossentropy', optimizer=sgd, class_mode='categorical') # 使用交叉熵作爲loss函數

'''
   第四步:訓練
   .fit的一些參數
   batch_size:對總的樣本數進行分組,每組包含的樣本數量
   epochs :訓練次數
   shuffle:是否把數據隨機打亂之後再進行訓練
   validation_split:拿出百分之多少用來做交叉驗證
   verbose:屏顯模式 0:不輸出  1:輸出進度  2:輸出每次的訓練結果
'''
(X_train, y_train), (X_test, y_test) = mnist.load_data() # 使用Keras自帶的mnist工具讀取數據(第一次需要聯網)
# 由於mist的輸入數據維度是(num, 28, 28),這裏需要把後面的維度直接拼起來變成784維  
X_train = X_train.reshape(X_train.shape[0], X_train.shape[1] * X_train.shape[2]) 
X_test = X_test.reshape(X_test.shape[0], X_test.shape[1] * X_test.shape[2])  
Y_train = (numpy.arange(10) == y_train[:, None]).astype(int) 
Y_test = (numpy.arange(10) == y_test[:, None]).astype(int)

model.fit(X_train,Y_train,batch_size=200,epochs=50,shuffle=True,verbose=0,validation_split=0.3)
model.evaluate(X_test, Y_test, batch_size=200, verbose=0)

'''
    第五步:輸出
'''
print("test set")
scores = model.evaluate(X_test,Y_test,batch_size=200,verbose=0)
print("")
print("The test loss is %f" % scores)
result = model.predict(X_test,batch_size=200,verbose=0)

result_max = numpy.argmax(result, axis = 1)
test_max = numpy.argmax(Y_test, axis = 1)

result_bool = numpy.equal(result_max, test_max)
true_num = numpy.sum(result_bool)
print("")
print("The accuracy of the model is %f" % (true_num/len(result_bool)))
(四)框架性能及優缺點對比
表 3-2 深度學習框架對比
對比維度 Caffe Tensorflow Kears
上手難度 1、不用不寫代碼,只需在.prototxt文件中定義網絡結構就可以完成模型訓練。 2、安裝過程複雜,且在.prototxt 文件內部設計網絡節構比較受限,沒有在 Python 中設計網絡結構方便、自由。配置文件不能用編程的方式調整超參數,對交叉驗證、超參數Grid Search 等操作無法很方便的支持。 1、安裝簡單,教學資源豐富,根據樣例能快速搭建出基礎模型。2、有一定的使用門檻。不管是編程範式,還是數學統計基礎,都爲非機器學習與數據科學背景的夥伴們帶來一定的上手難度。另外,是一個相對低層的框架,使用時需要編寫大量的代碼,重新發明輪子。 1、安裝簡單,它旨在讓用戶進行最快速的原型實驗,讓想法變爲結果的這個過程最短,非常適合最前沿的研究。 2、API使用方便,用戶只需要將高級的模塊拼在一起,就可以設計神經網絡,降低了編程和閱讀別人代碼時的理解開銷
框架維護 在 TensorFlow 出現之前一直是深度學習領域 GitHub star 最多的項目,前由伯克利視覺學中心(Berkeley Vision and Learning Center,BVLC)進行維護。 被定義爲“最流行”、“最被認可”的開源深度學習框架, 擁有產品級的高質量代碼,有 Google 強大的開發、維護能力的加持,整體架構設計也非常優秀。 開發主要由谷歌支持, API以“tf.keras"的形式打包在TensorFlow中。微軟維護着Keras的CNTK後端。亞馬遜AWS正在開發MXNet支持。其他提供支持的公司包括NVIDIA、優步、蘋果(通過CoreML)
支持語言 C++/Cuda C++ python (Go,Java,Lua,Javascript,或者是R) Python
封裝算法 1、對卷積神經網絡的支持非常好,擁有大量的訓練好的經典模型(AlexNet、VGG、Inception)乃至其他 state-of-the-art (ResNet等)的模型,收藏在它的 Model Zoo。 2、對時間序列 RNN、LSTM 等支持得不是特別充分 1、支持CNN與RNN, 還支持深度強化學習乃至其他計算密集的科學計算(如偏微分方程求解等)。 2、計算圖必須構建爲靜態圖,這讓很多計算變得難以實現,尤其是序列預測中經常使用的 beam search。 1、專精於深度學習,支持卷積網絡和循環網絡,支持級聯的模型或任意的圖結構的模型,從 CPU 上計算切換到 GPU 加速無須任何代碼的改動。 2、沒有增強學習工具箱,自己修改實現很麻煩。封裝得太高級,訓練細節不能修改、penalty細節很難修改。
模型部署 1、程序運行非常穩定,代碼質量比較高,很適合對穩定性要求嚴格的生產環境,第一個主流的工業級深度學習框架。Caffe 的底層基於 C++,可以在各種硬件環境編譯並具有良好的移植性,支持 Linux、Mac 和 Windows 系統,也可以編譯部署到移動設備系統如 Android 和 iOS 上。 1、爲生產環境設計的高性能的機器學習服務系統,可以同時運行多個大規模深度學習模型,支持模型生命週期管理、算法實驗,並可以高效地利用 GPU 資源,讓訓練好的模型更快捷方便地投入到實際生產環境。靈活的移植性,可以將同一份代碼幾乎不經過修改就輕鬆地部署到有任意數量 CPU 或 GPU 的 PC、服務器或者移動設備上。 1、使用TensorFlow、CNTK、Theano作爲後端,簡化了編程的複雜度,節約了嘗試新網絡結構的時間。模型越複雜,收益越大,尤其是在高度依賴權值共享、多模型組合、多任務學習等模型上,表現得非常突出。
性能 目前僅支持單機多 GPU 的訓練,不支持分佈式的訓練。 1、 支持分佈式計算,使 GPU 集羣乃至 TPU 集羣並行計算,共同訓練出一個模型。 2、 對不同設備間的通信優化得不是很好,分佈式性能還沒有達到最優。 無法直接使用多 GPU,對大規模的數據處理速度沒有其他支持多 GPU 和分佈式的框架快。用TensorFLow backend時速度比純TensorFLow 下要慢很多。

如表3-2對比維度所示,對於剛入門機器學習的新手而已,keras無疑是最好的選擇,能夠快速搭建模型驗證想法。隨着對機型學習的理解逐步加深,業務模型越來越複雜時,可以根據實際需要轉到Tensorflow或Caffe。

四、結束語

深度學習的研究在持續進行中,一直與其它經典機器學習算法並存,各類深度學習框架也是遍地開花,各有偏向,優劣各異,具體用哪種要根據應用場景靈活選擇。正如本文導語所言,科學不是戰爭而是合作。任何學科的發展從來都不是一條路走到黑,而是同行之間互相學習、互相借鑑、博採衆長、相得益彰,站在巨人的肩膀上不斷前行。對機器學習和深度學習的研究也是一樣,你死我活那是邪教,開放包容纔是正道!

最後,文章內容多摘自網上廣大網友的貢獻,如所寫內容涉及他人著作且未進行參考引用,那一定是我遺漏了,非常抱歉,還請及時聯繫我進行修正,萬分感謝!。

參考文章

[1]. https://www.zhihu.com/question/57770020/answer/249708509 人工智能、機器學習和深度學習的區別?

[2]. http://km.oa.com/group/25254/articles/show/325228?kmref=search&from_page=1&no=1 從入門到喫雞–基於Caffe 框架AI圖像識別自動化

[3]. http://blog.luoyetx.com/2015/10/reading-caffe-1/

[4]. https://zhuanlan.zhihu.com/p/24087905 Caffe入門與實踐-簡介

[5]. https://keras-cn.readthedocs.io/en/latest/for_beginners/FAQ/ keras官網

[6]. http://biog.csdn.net/sinat_26917383

[7]. http://www.cnblogs.com/lc1217/p/7132364.html 深度學習:Keras入門(一)之基礎篇

[8]. https://www.jianshu.com/p/e112012a4b2d 一文學會用 Tensorflow 搭建神經網絡

[9]. https://www.zhihu.com/question/42061396/answer/93827994 深度學習會不會淘汰掉其他所有機器學習算法?

[10]. https://www.leiphone.com/news/201702/T5e31Y2ZpeG1ZtaN.html TensorFlow和Caffe、MXNet、Keras等其他深度學習框架的對比

[11]. https://chenrudan.github.io/blog/2015/11/18/comparethreeopenlib.html Caffe、TensorFlow、MXnet三個開源庫對比

[12]. https://zhuanlan.zhihu.com/p/24687814 對比深度學習十大框架:TensorFlow最流行但並不是最好

[13]. https://www.leiphone.com/news/201704/8RWdnz9dQ0tyoexF.html 萬事開頭難!入門TensorFlow,這9個問題TF Boys 必須要搞清楚

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章