【參考資料】
《面向機器智慧型的tensorflow實踐》
keras/example – mnist_cnn.py
keras中文文件
常用層卷積層
卷積理解就是之前影象處理裡用作檢測邊緣、檢測角點的運算元,例如:
輸入:[12
34]\begin 1 & 2 \\ 3 & 4 \end
[1324
]核:[2]
\begin 2 \end
[2]
卷積:[1∗
22∗2
3∗24
∗2]\begin 1*2 & 2*2 \\ 3*2 & 4*2 \end
[1∗23∗
22∗
24∗2
]輸出:[24
68]\begin 2 & 4 \\ 6 & 8 \end
[2648
]卷積處理時需要考慮(在tensorflow引數中)
跨度: 即不是每個影象區域都要進行卷積,可以跨過一些畫素
邊界填充:當卷積核(例如3*3的sobel卷積核)滑動到邊界時,考慮用0填充
*備註: 卷積作為整個網路的核心,理解是模擬生物學中的特徵,即我們的視覺神經只是做最簡單的邊緣檢測,然後在一層層的對接後,將簡單的邊界線抽象出複雜的形狀等資訊。 *
# 32 為輸出維度
# kernel_size為卷積核的大小,此時核的定義由
# kernel_initializer初始化,預設是glorot_uniform,一種基於均勻分布的隨機取值
# activation 為該卷積輸出的啟用函式
model.add(conv2d(32, kernel_size=(3, 3),
activation='relu',
input_shape=input_shape))
池化層
池化層層通過對輸入進行採用,比如在3*3的區域內取最大值,目的在於減少輸入尺寸、降低過擬合等。
#(2,2)表示在x、y軸上都使得輸出變為原圖的一半,進行最大值池化
model.add(maxpooling2d(pool_size=(2, 2)))
dropout層
為輸入資料施加dropout。dropout將在訓練過程中每次更新引數時按一定概率(rate)隨機斷開輸入神經元,dropout層用於防止過擬合。
# 0.25是要斷開的神經元比例
model.add(dropout(0.25))
flatten層
flatten層用來將輸入「壓平」,即把多維的輸入一維化,常用在從卷積層到全連線層的過渡。flatten不影響batch的大小。
dense層(全連線層)
# 128 表示該層的輸出維度
model.add(dense(128, activation='relu'))
備註:理解在全連線層之前的卷積和池化層可以理解為特徵的選取,即從原始空間對映到乙個新的特徵空間,但這個特徵真正意義上的分類是在全連線做的。
卷積神經網路程式(keras/mnist_cnn.py)
mnist是手寫數字識別庫
卷積神經網路筆記
一 卷積神經網路基礎 cnn是一種空間上共享引數的神經網路,它通過正向和反向傳播,自己學習識別物體。它可能有幾層網路構成,第一層是抽象層次的最底層,cnn一般把中的較小的部分識別成簡單的形狀,下一層將會上公升到更高的抽象層次,一般會識別更複雜的概念,以此類推,直至識別整個物體。cnn的學習方式 層次...
卷積神經網路筆記
卷積神經網路依舊是乙個可導的評分函式,該函式輸入為原始影象畫素,輸出是不同類別的評分。並假設輸入資料是影象,基於該假設,向結構中新增一些特有性質。常規神經網路的輸入是乙個向量,對大尺寸影象效果不好,效率低下,大量引數導致網路過擬合。神經元的各層三維排列 寬度,高度和深度 深度是指啟用函式資料體的第3...
學習筆記 卷積神經網路 一文讀懂卷積神經網路
一文讀懂卷積神經網路 原文 本文為 一文讀懂卷積神經網路 讀書筆記 圖中公式 對輸入項x 進行加權求和 最後加上偏移量 在影象處理方面相當於 影象矩陣a 與 權值矩陣b 卷積核 進行 aij bij 偏移量 得到乙個數值 2 卷積神經網路 為什麼要進行卷積 如果 畫素大小是1000 1000,隱含層...