DNN(深度神經網路演算法)

2021-10-25 11:26:12 字數 3401 閱讀 3494

資料集定義模型

訓練/學習

評估模型

自從 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反向傳播演算法要解決的問題,也就是說,什麼時候我們需要這個反向...