官术网_书友最值得收藏!

1.3 MNIST數據集介紹

這里使用由手寫數字及其標簽組成的圖像集MNIST(經美國國家標準與技術研究所修改)。自從1999年發布以來,這個經典數據集被用于基準分類算法。

數據文件train.csv和test.csv由從0到9的手寫數字灰度圖像組成。一個數字圖像是一個數學函數:f(x,y)=像素值。圖像是二維的。

我們可以在圖像上執行數學函數,通過計算圖像上的梯度變化來測量像素值變化的速度和方向。為了識別圖像,將圖像轉換為只有一個顏色通道的簡單灰度圖。圖像的RGB表示是由三個顏色通道組成的:紅色、藍色和綠色。在RGB配色方案中,圖像是由紅色、藍色和綠色三種圖像疊加而成的。在灰度配色方案中,顏色并不重要。彩色圖像在計算和分析上都更難,因為它們會占據更多的內存空間。亮度是圖像明度和暗度的度量,對于識別物體非常有用。例如在自動駕駛汽車應用中檢測車道線時,顏色就很重要,因為必須區分黃線和白線,而灰度圖不能提供足夠的信息來區分黃線和白線。

計算機將任何灰度圖解釋為一個矩陣,矩陣的每個元素都是一個像素。每個圖像都是28×28的像素矩陣,總共有784個像素。每個像素都有一個對應的像素值,該值表示特定像素的明度或暗度。像素值取0~255范圍內的整數,其中0表示最暗,255表示最白,灰色像素在0到255之間。

最簡單的人工神經網絡

一個簡單的兩層神經網絡如圖1-5所示。

圖1-5 兩層神經網絡

第一層是輸入層,最后一層是輸出層,中間層是隱含層。如果隱含層不止一個,則這樣的網絡就是深度神經網絡。

隱含層中每個神經元的輸入和輸出都與下一層中每個神經元相連。根據問題的不同,每一層的神經元個數都是任意的。讓我們看一個例子,你可能已經知道這個簡單的例子,就是手寫數字識別,用于從圖像中檢測數字,比如說5。網絡將接收一個標簽為5的圖像并輸出1或0,1表示圖像確實是5,而0表示不是。一旦網絡創建好,就必須進行訓練。我們可以用隨機權重初始化網絡,然后輸入被稱為訓練數據集的樣本。對每個輸入樣本,我們檢查輸出,計算誤差率,然后調整權重,直到當輸入標簽為5的圖像時,網絡輸出1,而其他都輸出0。這種類型的訓練方法稱為監督學習,而調整權重的方法稱為反向傳播。在構建人工神經網絡模型時,一個主要考慮的問題是如何為隱含層和輸出層選擇激活函數。三個最常用的激活函數是sigmoid函數、雙曲正切函數和ReLU。sigmoid的美妙之處在于它在z點的導數就是簡單的z乘以1-z,這意味著:

dy/dx=σ(x)(1-σ(x))

這有助于我們以一種方便的方式有效地計算神經網絡中的梯度。如果給定層的邏輯函數的前饋激活函數都保存在內存中,那么可以通過簡單的乘法和減法來評估特定層的梯度,而不是實現并重新評估sigmoid函數,因為這需要額外的求冪運算。圖1-6展示了ReLU激活函數,當x<0時,函數值為0,當x>0時,線性斜率是1。

圖1-6 ReLU激活函數

ReLU是一個非線性函數,計算函數是f(x)=max(0,x),即如果輸入是負值,ReLU函數值為0,如果輸入x>0,ReLU函數值為x。這意味著激活函數在0處被閾值化(請參見圖1-6左邊部分)。TensorFlow在tf.nn.relu()中實現了ReLU函數:

反向傳播是誤差反向傳播的簡稱,是訓練人工神經網絡的常用方法,常與優化方法(如梯度下降)結合使用。反向傳播在計算梯度中的損失函數時會考慮網絡中的所有權重。該優化方法采用梯度法進行權重更新以優化損失函數。

運用TensorFlow創建一個單層神經網絡

讓我們運用TensorFlow一步步建立一個單層神經網絡。本例主要基于MNIST數據集。該數據集是一組28×28像素的手寫數字灰度圖像,包含55 000個訓練數據、10 000個測試數據和5 000個驗證數據。每個MNIST數據點有兩部分:一個手寫數字圖像和一個對應標簽。加載數據的代碼塊如下所示。one_hot=True意味著標簽是one-hot編碼向量,而不是實際數字。例如,如果標簽是2,你會看到[0,0,1,0,0,0,0,0,0,0],這樣就可以直接在網絡輸出層使用它:

設置占位符和變量的代碼如下:

下面在TensorFlow中設置優化器:

在開始訓練之前,先構建變量初始化運算,然后構建測量預測準確率的運算,如下所示:

現在開始訓練模型,如以下代碼片段所示:

主站蜘蛛池模板: 巴南区| 苏州市| 朝阳市| 绥宁县| 白城市| 荔浦县| 西充县| 奉贤区| 广宗县| 鹤山市| 浮梁县| 喜德县| 勃利县| 尼玛县| 泽州县| 和平县| 宽城| 万载县| 泸州市| 新闻| 德州市| 安吉县| 益阳市| 湟中县| 巩留县| 武安市| 张家港市| 蕉岭县| 岫岩| 化隆| 保亭| 两当县| 岑巩县| 平昌县| 宣武区| 疏附县| 邵阳县| 邵武市| 神池县| 曲松县| 东安县|