人工智能-深度學習(3)TensorFlow 實戰一:手寫圖片識別

http://gitbook.cn/gitchat/column/59f7e38160c9361563ebea95/topic/59f7e86d60c9361563ebeee5html

wiki.jikexueyuan.com/project/tensorflow-zh/tutorials/mnist_beginners.htmlgit

1、簡介

手寫圖片識別的實現,分爲三步:數組

  • 1,數據的準備
  • 2,模型的設計
  • 3,代碼實現
    個人另外一篇博文-神經網絡的解釋
    什麼是神經網絡

這裏寫圖片描述
input層表明將二維數組從全部行都排列成一行,hidden層表明若干次處理,output層存儲計算獲得的結果,最後輸出機率最大的網絡

知乎神經網絡的解釋
總結一下:
神經元就是分類器,能夠根據正確的值進行調整機器學習

反向傳播訓練神經網絡函數

1.神經網絡深刻淺出
!!!!!!!!!!!!!!!!!認真看兩遍,保證你神清氣爽。看懂了後,回來點個贊,就當你的答謝了。這個博客下的另外一篇文章也寫的不錯
2.從機器學習談起 推薦 不錯,不過,我推的都只是適合初學者哦,大神們繞道走開
3.還有一篇關於SVM的,雖然有點跑題了,可是也以爲特別好。SVM講解
雖然第三個連接有點跑題,可是講真,學AI怎能不學SVM,這是我在一次雙語課上作pre,查資料用到的最多的一個blog了。認真看兩遍,基本能夠本身跑代碼了。仍是不會的,歡迎私信我,一塊兒進步。哈哈哈哈哈
開心,我覺得會沒人看,一夜醒來贊變多了,也算是確定了。學神經網絡的人兒們好好努力哦,好了,大早上的,我也繼續看書了。學習

做者:知乎用戶 連接:https://www.zhihu.com/question/22553761/answer/267280164
來源:知乎 著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。測試

2、數據的準備

Kaggle 裏包含了42000份訓練數據和28000份測試數據(和谷歌準備的 MNIST 數據,在數量上有所不一樣)。訓練和測試數據的下載地址能夠百度也能夠點這裏。下載下來是兩個CVS文件。
這裏寫圖片描述優化

3、模型設計

這個模型,組成是這樣的:編碼

  • 使用一個最簡單的單層的神經網絡進行學習
  • 用 SoftMax 來作爲激活函數
  • 用交叉熵來作損失函數
  • 用梯度降低來作優化方式

神經網絡:由不少個神經元組成,每一個神經元接收不少個輸入:[X1,X2….Xn],加權相加而後加上偏移量後,看是否是超過了某個閥值,超過了發出1,沒超過發出0。

神經網絡:由不少個神經元組成,每一個神經元接收不少個輸入:[X1,X2….Xn],加權相加而後加上偏移量後,看是否是超過了某個閥值,超過了發出1,沒超過發出0。

想要成爲激活函數,你得有兩把刷子啊。這兩把刷子是:一是你得到處可微,可微分才能求導,求極值。二是要非線性的,由於線性模型的表達能力不夠。
目前主流的幾個激活函數是:sigmoid,tanh,ReLU。

sigmoid:採用 S 形函數,取值範圍[0,1] tanh:雙切正切函數,取值範圍[-1,1]
ReLU:簡單而粗暴,大於0的留下,不然一概爲0。

SoftMax:咱們知道 max(A,B),是指 A 和 B 裏哪一個大就取哪一個值,但咱們有時候但願比較小的那個也有必定機率取到,怎麼辦呢?咱們就按照兩個值的大小,計算出機率,按照這個機率來取 A 或者 B。好比A=9,B=1,那取 A 的機率是90%,取B的機率是10%。

損失函數:損失函數是模型對數據擬合程度的反映,擬合得越好損失應該越小,擬合越差損失應該越大,而後咱們根據損失函數的結果對模型進行調整。

交叉熵:這個概念要解釋的簡單,那就不許確,若是要準確,那可能一千字都打不住。這裏說一個簡單但不必定準確的解釋吧。

好比,你想把乾坤大挪移練到第七層大圓滿,你如今是第五層,那你還差兩層,這個兩層就是你和大圓滿之間的距離。交叉熵通俗的講就是如今的訓練程度和圓滿之間的距離,咱們但願距離越小越好,因此交叉熵能夠做爲一個損失函數,來衡量和目標之間的距離。

梯度降低:這個概念能夠這樣理解,咱們要解決的問題是一座山,答案在山底,咱們從山頂到山底的過程就是解決問題的過程。

在山頂,想找到最快的下山的路。這個時候,咱們的作法是什麼呢?在每次選擇道路的時候,選最陡的那條路。梯度是改變率或者斜度的另外一個稱呼,用數學的語言解釋是導數。對於求損失函數最小值這樣的問題,朝着梯度降低的方向走,就能找到最優值了。

4、代碼實現

1,載入數據,並對數據進行處理
在寫代碼的過程當中,數據的預處理是最大的一塊工做,作一個項目,60%以上的代碼在作數據預處理。 這個項目的預處理,分爲5步:

  • 把輸入和結果分開
  • 對輸入進行處理:把一維的輸入變成28*28的矩陣
  • 對結果進行處理:把結果進行 One-Hot 編碼
  • 把訓練數據劃分訓練集和驗證集
  • 對訓練集進行分批
相關文章
相關標籤/搜索