深度學習與tensorflow
dnn(深度神經網路演算法)現在是ai社群的流行詞。最近,dnn 在許多資料科學競賽/kaggle 競賽中獲得了多次冠軍。
自從 1962 年
rosenblat 提出感知機(perceptron)以來,dnn
的概念就已經出現了,而自 rumelhart、hinton 和 williams 在 1986 年發現了梯度下降演算法後,dnn 的概念就變得可行了。直到最近 dnn 才成為全世界 ai/ml 愛好者和工程師的最愛。
主要原因在於現代計算能力的可用性,如 gpu 和 tensorflow 等工具,可以通過幾行**輕鬆訪問 gpu 並構建複雜的神經網路。
作為一名機器學習愛好者,必須熟悉神經網路和深度學習的概念,但為了完整起見,將在這裡介紹基礎知識,並** tensorflow 的哪些特性使其成為深度學習的熱門選擇。
神經網路是乙個生物啟發式的計算和學習模型。像生物神經元一樣,它們從其他細胞(神經元或環境)獲得加權輸入。這個加權輸入經過乙個處理單元並產生可以是二進位制或連續(概率,**)的輸出。
人工神經網路(ann)是這些神經元的網路,可以隨機分布或排列成乙個分層結構。這些神經元通過與它們相關的一組權重和偏置來學習。
下圖對生物神經網路和人工神經網路的相似性給出了形象的對比:
圖 1 生物神經網路和人工神經網路的相似性
根據 hinton 等人的定義,深度學習
(是由多個處理層(隱藏層)組成的計算模型。層數的增加會導致學習時間的增加。由於資料量龐大,學習時間進一步增加,現今的 cnn 或生成對抗網路(gan)的規範也是如此。
因此,為了實際實現 dnn,需要高計算能力。nvdia 公司 gpu 的問世使其變得可行,隨後 google 的 tensorflow 使得實現複雜的 dnn 結構成為可能,而不需要深入複雜的數學細節,大資料集的可用性為 dnn 提供了必要的資料**。
tensorflow 成為最受歡迎的深度學習庫,原因如下:
tensorflow 是乙個強大的庫,用於執行大規模的數值計算,如矩陣乘法或自動微分。這兩個計算是實現和訓練 dnn 所必需的。
tensorflow 在後端使用 c/c++,這使得計算速度更快。
tensorflow 有乙個高階機器學習 api(tf.contrib.learn),可以更容易地配置、訓練和評估大量的機器學習模型。
可以在 tensorflow 上使用高階深度學習庫 keras。keras 非常便於使用者使用,並且可以輕鬆快速地進行原型設計。它支援各種 dnn,如rnn、cnn,甚至是兩者的組合。
任何深度學習網路都由四個重要部分組成:資料集、定義模型(網路結構)、訓練/學習和**/評估。可以在 tensorflow 中實現所有這些。
dnn 依賴於大量的資料。可以收集或生成資料,也可以使用可用的標準資料集。tensorflow 支援三種主要的讀取資料的方法,可以在不同的資料集中使用;本教程中用來訓練建立模型的一些資料集介紹如下:
在 tensorflow 中可以通過三種方式讀取資料:
通過feed_dict傳遞資料;
從檔案中讀取資料;
使用預載入的資料;
本文使用這三種方式來讀取資料。
接下來,將依次學習每種資料讀取方式。
通過feed_dict傳遞資料
在這種情況下,執行每個步驟時都會使用 run() 或 eval() 函式呼叫中的 feed_dict 引數來提供資料。這是在佔位符的幫助下完成的,這個方法允許傳遞 numpy 陣列資料。可以使用 tensorflow 的以下**:
這裡,x 和 y 是佔位符;使用它們,在 feed_dict 的幫助下傳遞包含 x 值的陣列和包含 y 值的陣列。
從檔案中讀取
當資料集非常大時,使用此方法可以確保不是所有資料都立即占用記憶體(例如 60 gb的 youtube-8m 資料集)。從檔案讀取的過程可以通過以下步驟完成:
這個函式還提供了乙個選項來排列和設定批次的最大數量。整個檔名列表被新增到每個批次的佇列中。如果選擇了 shuffle=true,則在每個批次中都要重新排列檔名。
預載入的資料
當資料集很小時可以使用,可以在記憶體中完全載入。因此,可以將資料儲存在常量或變數中。在使用變數時,需要將可訓練標誌設定為 false,以便訓練時資料不會改變。預載入資料為 tensorflow 常量時:
一般來說,資料被分為三部分:訓練資料、驗證資料和測試資料。
建立描述網路結構的計算圖。它涉及指定資訊從一組神經元到另一組神經元的超引數、變數和佔位符序列以及損失/錯誤函式。
在 dnn 中的學習通常基於梯度下降演算法(後續章節將詳細討論),其目的是要找到訓練變數(權重/偏置),將損失/錯誤函式最小化。這是通過初始化變數並使用 run() 來實現的:
評估模型
一旦網路被訓練,通過 predict() 函式使用驗證資料和測試資料來評估網路。這可以評價模型是否適合相應資料集,可以避免過擬合或欠擬合的問題。一旦模型取得讓人滿意的精度,就可以部署在生產環境中了。
拓展閱讀
在 tensorflow 1.3 中,增加了乙個名為 tensorflow estimator 的新功能。 tensorflow
estimator 使建立神經網路模型的任務變得更加容易,它是乙個封裝了訓練、評估、**和服務過程的更高層次的api。它提供了使用預先製作的估算器的選項,或者可以編寫自己的定製估算器。通過預先制定的估算器,不再需要擔心構建計算或建立會話,它會處理所有這些。
目前 tensorflow estimator 有 6 個預先制定的估算器。使用 tensorflow 預製的 estimator 的另乙個優點是,它本身也可以在 tensorboard 上建立視覺化的摘要。
TensorFlow 深度學習筆記
google 深度學習筆記 經常總結是個好習慣,筆記目錄奉上。歡迎star,有問題可以到issue區討論 官方教程位址 最近tensorflow團隊出了乙個model專案,和這個課程無關,但是可以參考 框架 tensorflow 谷歌出品的基於python的深度學習工具集 工具 ipython,py...
TensorFlow深度學習框架
tensorflow支援python和c 兩種程式語言,再複雜的多層神經網路模型都可以用python來實現,如果業務使用其他程式設計也不用擔心,使用跨語言的grpc或者http服務也可以訪問使用tensorflow訓練好的智慧型模型。tensorflow 是乙個採用資料流圖 data flow gr...
深度學習 初識TensorFlow
深度學習使用場景 影象理解 語音識別 自然語言處理 機器自主 無人駕駛 深度學習,如深度神經網路 卷積神經網路和遞迴神經網路已被應用計算機視覺 語音識別 自然語言處理 音訊識別與生物資訊學等領域並取得了很好的效果。深度學習在人工智慧領域的地位 深度學習框架 google brain計畫產物 應用於a...