資料集定義模型
訓練/學習
評估模型
自從 1962 年 rosenblat 提出感知機(perceptron)以來,dnn 的概念就已經出現了,而自 rumelhart、hinton 和 williams 在 1986 年發現了梯度下降演算法後,dnn 的概念就變得可行了。直到最近 dnn 才成為全世界 ai/ml 愛好者和工程師的最愛。
乙個演算法出名後,它概念的出現已經是好幾十年前,那時候其相應的硬體還沒有誕生。
神經網路是乙個生物啟發式的計算和學習模型。像生物神經元一樣,它們從其他細胞(神經元或環境)獲得加權輸入。這個加權輸入經過乙個處理單元並產生可以是二進位制或連續(概率,**)的輸出。
人工神經網路(ann)是這些神經元的網路,可以隨機分布或排列成乙個分層結構。這些神經元通過與它們相關的一組權重和偏置來學習。
下圖對生物神經網路和人工神經網路的相似性給出了形象的對比:
深度學習 :由多個處理層(隱藏層)組成的計算模型。層數的增加會導致學習時間的增加。由於資料量龐大,學習時間進一步增加,現今的 cnn 或生成對抗網路(gan)的規範也是如此。
tensorflow 是乙個強大的庫,用於執行大規模的數值計算,如矩陣乘法或自動微分。這兩個計算是實現和訓練 dnn 所必需的。
tensorflow 在後端使用 c/c++,這使得計算速度更快。
tensorflow 有乙個高階機器學習 api(tf.contrib.learn),可以更容易地配置、訓練和評估大量的機器學習模型。
可以在 tensorflow 上使用高階深度學習庫 keras。keras 非常便於使用者使用,並且可以輕鬆快速地進行原型設計。它支援各種 dnn,如rnn、cnn,甚至是兩者的組合。
任何深度學習網路都由四個重要部分組成:資料集、定義模型(網路結構)、訓練/學習和**/評估。可以在 tensorflow 中實現所有這些
dnn 依賴於大量的資料。可以收集或生成資料,也可以使用可用的標準資料集。
tensorflow 支援三種主要的讀取資料的方法,可以在不同的資料集中使用,下面是訓練建立模型的一些資料集:
mnist:這是最大的手寫數字(0~9)資料庫。它由 60000 個示例的訓練集和 10000 個示例的測試集組成。該資料集存放在 yann lecun 的主頁(中。這個資料集已經包含在tensorflow.examples.tutorials.mnist 的 tensorflow 庫中。
cifar10:這個資料集包含了 10 個類別的 60000 幅 32×32 彩色影象,每個類別有 6000 幅影象。其中訓練集包含 50000 幅影象,測試資料集包含 10000 幅影象。資料集的 10 個類別分別是:飛機、汽車、鳥、貓、鹿、狗、青蛙、馬、船和卡車。該資料由多倫多大學電腦科學系維護(
wordnet:這是乙個 英文的詞彙資料庫。它包含名詞、動詞、副詞和形容詞,被歸為一組認知同義詞(synset),即代表相同概念的詞語,例如 shut 和 close,car 和 automobile 被分組為無序集合。它包含 155287 個單詞,組織在 117659 個同義詞集合中,總共 206941 個單詞對。該資料集由普林斯頓大學維護(
imagenet:這是乙個根據wordnet 層次組織的影象資料集(目前只有名詞)。每個有意義的概念(synset)由多個單詞或單詞短語來描述。每個子空間平均由 1000 幅影象表示。目前共有 21841 個同義詞,共有 14197122 幅影象。自 2010 年以來,每年舉辦一次 imagenet 大規模視覺識別挑戰賽(ilsvrc),將影象分類到 1000 個物件類別中。這項工作是由美國普林斯頓大學、史丹福大學、a9 和谷歌贊助(
一般來說,資料被分為三部分:訓練資料、驗證資料和測試資料。
通過feed_dict傳遞資料;
從檔案中讀取資料;
使用預載入的資料;
在這種情況下,執行每個步驟時都會使用 run() 或 eval() 函式呼叫中的 feed_dict 引數來提供資料。這是在佔位符的幫助下完成的,這個方法允許傳遞 numpy 陣列資料。可以使用 tensorflow 的以下**:
x=tf.placeholder(tf.int32)
y=tf.placeholder(tf.float32)
with tf.session(
)as sess:
x_arr=..
. y_arr=..
. loss =..
. sess.run(loss,feed_dic=
)
當資料集非常大時,使用此方法可以確保不是所有資料都立即占用記憶體(例如 60 gb的 youtube-8m 資料集)。從檔案讀取的過程可以通過以下步驟完成:
filename_queue=tf.train.string_input_producer(files)
這個函式還提供了乙個選項來排列和設定批次的最大數量。整個檔名列表被新增到每個批次的佇列中。如果選擇了 shuffle=true,則在每個批次中都要重新排列檔名。
reader=tf.textlinereader(
)key,value=reader.read(filename_queue)
reacord_defaults=[[
1],[
1],[
1]]col1,col2,col3=tf.decode_csv(value,record_defaults=record_defaults)
當資料集很小時可以使用,可以在記憶體中完全載入。因此,可以將資料儲存在常量或變數中。在使用變數時,需要將可訓練標誌設定為 false,以便訓練時資料不會改變。預載入資料為 tensorflow 常量時
在 dnn 中的學習通常基於梯度下降演算法,其目的是要找到訓練變數(權重/偏置),將損失/錯誤函式最小化。這是通過初始化變數並使用 run() 來實現的:
with tf.session as sess:..
. sess.run(..
.)..
.
一旦網路被訓練,通過 predict() 函式使用驗證資料和測試資料來評估網路。這可以評價模型是否適合相應資料集,可以避免過擬合或欠擬合的問/題。一旦模型取得讓人滿意的精度,就可以部署在生產環境中了。
在 tensorflow 1.3 中,增加了乙個名為 tensorflow estimator 的新功能。 tensorflow estimator 使建立神經網路模型的任務變得更加容易,它是乙個封裝了訓練、評估、**和服務過程的更高層次的api。它提供了使用預先製作的估算器的選項,或者可以編寫自己的定製估算器。通過預先制定的估算器,不再需要擔心構建計算或建立會話,它會處理所有這些。
目前 tensorflow estimator 有 6 個預先制定的估算器。使用 tensorflow 預製的 estimator 的另乙個優點是,它本身也可以在 tensorboard 上建立視覺化的摘要。
深度神經網路DNN
深度網路dnn的概念,是基於淺層網路 多層感知機mlp 或稱人工神經網路ann 的基礎上發展而來。關於mlp或ann的知識,此處不作贅述,網上有很多資料可以參考。有8000個變數,其中少數變數之間可能存在相關性 有20000個樣本,每個樣本都有這8000個變數的資料 這20000個樣本可以被分為2類...
深度神經網路(DNN)反向傳播演算法 BP
在深度神經網路 dnn 模型與前向傳播演算法中,我們對dnn的模型和前向傳播演算法做了總結,這裡我們更進一步,對dnn的反向傳播演算法 back propagation,bp 做乙個總結。在了解dnn的反向傳播演算法前,我們先要知道dnn反向傳播演算法要解決的問題,也就是說,什麼時候我們需要這個反向...
深度神經網路(DNN)反向傳播演算法 BP
在深度神經網路 dnn 模型與前向傳播演算法中,我們對dnn的模型和前向傳播演算法做了總結,這裡我們更進一步,對dnn的反向傳播演算法 back propagation,bp 做乙個總結。在了解dnn的反向傳播演算法前,我們先要知道dnn反向傳播演算法要解決的問題,也就是說,什麼時候我們需要這個反向...