1. 程式人生 > >Google 深度學習筆記 卷積神經網路

Google 深度學習筆記 卷積神經網路

Convolutional Networks

deep dive into images and convolutional models

Convnet

BackGround

  • 人眼在識別影象時,往往從區域性到全域性
  • 區域性與區域性之間聯絡往往不太緊密
  • 我們不需要神經網路中的每個結點都掌握全域性的知識,因此可以從這裡減少需要學習的引數數量

Weight share

  • 但這樣引數其實還是挺多的,所以有了另一種方法:權值共享

Share Parameters across space

  • 取圖片的一小塊,在上面做神經網路分析,會得到一些預測
  • 將切片做好的神經網路作用於圖片的每個區域,得到一系列輸出

  • 可以增加切片個數提取更多特徵

  • 在這個過程中,梯度的計算跟之前是一樣的

Concept

  • Patch/Kernel:一個區域性切片
  • Depth: 資料的深度,影象資料是三維的,長寬和RGB,神經網路的預測輸出也屬於一維
  • Feature Map:每層Conv網路,因為它們將前一層的feature對映到後一層(Output map)

  • Stride: 移動切片的步長,影響取樣的數量
  • 在邊緣上的取樣影響Conv層的面積,由於移動步長不一定能整除整張圖的畫素寬度,不越過邊緣取樣會得到Valid Padding, 越過邊緣取樣會得到Same Padding
  • Example

  • 用一個3x3的網格在一個28x28的影象上做切片並移動
  • 移動到邊緣上的時候,如果不超出邊緣,3x3的中心就到不了邊界
  • 因此得到的內容就會缺乏邊界的一圈畫素點,只能得到26x26的結果
  • 而可以越過邊界的情況下,就可以讓3x3的中心到達邊界的畫素點
  • 超出部分的矩陣補零就行

Deep Convnet

在Convnet上套Convnet,就可以一層一層綜合區域性得到的資訊

OutPut

將一個deep and narrow的feature層作為輸入,傳給一個Regular神經網路

Optimization

Pooling

將不同Stride的卷積用某種方式合併起來,節省卷積層的空間複雜度。

  • Max Pooling
    在一個卷積層的輸出層上取一個切片,取其中最大值代表這個切片
  • 優點
    • 不增加需要調整的引數
    • 通常比其他方法準確
  • 缺點:更多Hyper Parameter,包括要取最值的切片大小,以及去切片的步長

LENET-5, ALEXNET

  • Average Pooling
    在卷積層輸出中,取切片,取平均值代表這個切片

1x1 Convolutions

在一個卷積層的輸出層上,加一個1x1的卷積層,這樣就形成了一個小型的神經網路。
- cheap for deeper model
- 結合Average Pooling食用效果更加

Inception

對同一個卷積層輸出,執行各種二次計算,將各種結果堆疊到新輸出的depth方向上

TensorFlow卷積神經網路實踐

資料處理

  • dataset處理成四維的,label仍然作為one-hot encoding
def reformat(dataset, labels, image_size, num_labels, num_channels):
    dataset = dataset.reshape(
        (-1, image_size, image_size, num_channels)).astype(np.float32)
    labels = (np.arange(num_labels) == labels[:, None]).astype(np.float32)
    return dataset, labels
  • 將lesson2的dnn轉為cnn很簡單,只要把WX+b改為conv2d(X)+b即可
  • 關鍵在於conv2d

tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None, data_format=None, name=None)

給定四維的inputfilter tensor,計算一個二維卷積

Args:
  • input: A Tensor. type必須是以下幾種型別之一: half, float32, float64.
  • filter: A Tensor. type和input必須相同
  • strides: A list of ints.一維,長度4, 在input上切片取樣時,每個方向上的滑窗步長,必須和format指定的維度同階
  • padding: A string from: "SAME", "VALID". padding 演算法的型別
  • use_cudnn_on_gpu: An optional bool. Defaults to True.
  • data_format: An optional string from: "NHWC", "NCHW", 預設為"NHWC"
    指定輸入輸出資料格式,預設格式為”NHWC”, 資料按這樣的順序儲存:
    [batch, in_height, in_width, in_channels]
    也可以用這種方式:”NCHW”, 資料按這樣的順序儲存:
    [batch, in_channels, in_height, in_width]
  • name: 操作名,可選.
Returns:

A Tensor. type與input相同

Given an input tensor of shape [batch, in_height, in_width, in_channels]
and a filter / kernel tensor of shape
[filter_height, filter_width, in_channels, out_channels]

conv2d實際上執行了以下操作:

  1. 將filter轉為二維矩陣,shape為
    [filter_height * filter_width * in_channels, output_channels].
  2. 從input tensor中提取image patches,每個patch是一個virtual tensor,shape[batch, out_height, out_width,
    filter_height * filter_width * in_channels]
    .
  3. 將每個filter矩陣和image patch向量相乘

具體來講,當data_format為NHWC時:

output[b, i, j, k] =
    sum_{di, dj, q} input[b, strides[1] * i + di, strides[2] * j + dj, q] *
                    filter[di, dj, q, k]

input 中的每個patch都作用於filter,每個patch都能獲得其他patch對filter的訓練
需要滿足strides[0] = strides[3] = 1. 大多數水平步長和垂直步長相同的情況下:strides = [1, stride, stride, 1].

  • 然後再接一個WX+b連Relu連WX+b的全連線神經網路即可

Max Pooling

在tf.nn.conv2d後面接tf.nn.max_pool,將卷積層輸出減小,從而減少要調整的引數

tf.nn.max_pool(value, ksize, strides, padding, data_format='NHWC', name=None)

Performs the max pooling on the input.

Args:
  • value: A 4-D Tensor with shape [batch, height, width, channels] and
    type tf.float32.
  • ksize: A list of ints that has length >= 4. 要執行取最值的切片在各個維度上的尺寸
  • strides: A list of ints that has length >= 4. 取切片的步長
  • padding: A string, either 'VALID' or 'SAME'. padding演算法
  • data_format: A string. ‘NHWC’ and ‘NCHW’ are supported.
  • name: 操作名,可選
Returns:

A Tensor with type tf.float32. The max pooled output tensor.

優化

仿照lesson2,新增learning rate decay 和 drop out,可以將準確率提高到90.6%

參考連結

覺得我的文章對您有幫助的話,給個star可好?

相關推薦

Google 深度學習筆記 神經網路

Convolutional Networks deep dive into images and convolutional models Convnet BackGround 人眼在識別影象時,往往從區域性到全域性 區域性與區域性之間聯絡

深度學習筆記——神經網路

程式碼參考了零基礎入門深度學習(4) - 卷積神經網路這篇文章,我只對程式碼裡可能存在的一些小錯誤進行了更改。至於卷積神經網路的原理以及程式碼裡不清楚的地方可以結合該文章理解,十分淺顯易懂。 import numpy as np from functools import reduce fro

深度學習筆記-神經網路CNN與迴圈神經網路RNN有什麼區別?

CNN與RNN本質的不同就是所基於的假設不同,由於核心假設的不同,導致實現方式的差異。 CNN 首先理解什麼叫做卷積,或者說為什麼要翻譯為卷積神經網路。 卷積的定義:https://baike.baidu.com/item/%E5%8D%B7%E7%A7%AF/94110

人工智障學習筆記——深度學習(2)神經網路

上一章最後提到了多層神經網路(deep neural network,DNN),也叫多層感知機(Multi-Layer perceptron,MLP)。 當下流行的DNN主要分為應對具有空間性分佈資料的CNN(卷積神經網路)和應對具有時間性分佈資料的RNN(遞迴神經網路,又

深度學習神經網路,啟用函式,池化

卷積神經網路——輸入層、卷積層、啟用函式、池化層、全連線層 https://blog.csdn.net/yjl9122/article/details/70198357?utm_source=blogxgwz3 一、卷積層 特徵提取 輸入影象是32*32*3,3是它的深度(即R

深度學習基礎--神經網路的不變性

卷積神經網路的不變性   不變性的實現主要靠兩點:大量資料(各種資料);網路結構(pooling) 不變性的型別   1)平移不變性   卷積神經網路最初引入區域性連線和空間共享,就是為了滿足平移不變性。   關於CNN中的平移不變性的來源有多種假設。   一個想法是平移不變性

深度學習神經網路

講卷積神經網路之前說說為什麼能夠進行分類識別?按照傳統的SIFT,HOG演算法都是先進行特徵的提取過程,那麼卷積神經網路怎麼進行特徵的提取呢?   下面,我們就開始吧! 先提一個小問題:“你是通過什麼瞭解這個世界的?” 當一輛汽車從你身邊疾馳而過,你是通過哪些資訊知道那是一

深度學習神經網路層和池化層計算

一、簡介 \quad\quad 卷積神經網路(Convolutional neural network, CNN),

深度學習神經網路)問題總結

 深度卷積網路   涉及問題: 1.每個圖如何卷積:   (1)一個圖如何變成幾個?   (2)卷積核如何選擇? 2.節點之間如何連線? 3.S2-C3如何進行分配? 4.1

深度學習神經網路CNN入門

該文是,並假設你理解前饋神經網路。 目錄 視覺感知 畫面識別是什麼識別結果取決於什麼 影象表達 畫面識別的輸入畫面不變形 前饋神經網路做畫面識別的不足卷積神經網路做畫面識別 區域性連線空間共享輸出空間表達Depth維的處理Zero padding形狀、概念抓取多filte

深度學習神經網路入門(2)

卷積神經網路入門學 作者:hjimce 卷積神經網路演算法是n年前就有的演算法,只是近年來因為深度學習相關演算法為多層網路的訓練提供了新方法,然後現在電腦的計算能力已非當年的那種計算水平,同時現在的訓練資料很多,於是神經網路的相關演算法又重新火了起來,因此卷積神經網路就又

深度學習神經網路CNN基本知識點

卷積神經網路與前面學的常規神經網路很相似,也有輸入、權重、偏差、損失函式、啟用函式、全連線層等概念,之前的一些小的技巧也仍然適用。 與常規神經網路的對比 卷積神經網路(Convolutional Neural Networks,CNNs / ConvNe

深度學習神經網路CNN及tensorflow程式碼實現示例詳細介紹

一、CNN的引入 在人工的全連線神經網路中,每相鄰兩層之間的每個神經元之間都是有邊相連的。當輸入層的特徵維度變得很高時,這時全連線網路需要訓練的引數就會增大很多,計算速度就會變得很慢,例如一張黑白的 28×28 的手寫數字圖片,輸入層的神經元就有784個,如下圖所示:

乾貨 | 深度學習神經網路(CNN)的前向傳播演算法詳解

微信公眾號 關鍵字全網搜尋最新排名 【機器學習演算法】:排名第一 【機器學習】:排名第一 【Python】:排名第三 【演算法】:排名第四 前言 在(乾貨 | 深度學習之卷積神經網路(CNN)的模型結構)中,我們對CNN的模型結構做了總結,這裡我們就在CNN的模型基礎上,看看CNN的前向傳播演算法是什麼樣

深度學習神經網路物體檢測之感受野大小計算

1 感受野的概念   在卷積神經網路中,感受野的定義是 卷積神經網路每一層輸出的特徵圖(feature map)上的畫素點在原始影象上對映的區域大小。       RCNN論文中有一段描述,Alexnet網路pool5輸出的特徵圖上的畫

深度學習神經網路原理詳解(一)

初探CNN卷積神經網路 1、概述 典型的深度學習模型就是很深層的神經網路,包含多個隱含層,多隱層的神經網路很難直接使用BP演算法進行直接訓練,因為反向傳播誤差時往往會發散,很難收斂 CNN節省訓練開銷的方式是權共享weight sharing,讓一組神經元

深度學習神經網路CNN及tensorflow程式碼實現示例

一、CNN的引入 在人工的全連線神經網路中,每相鄰兩層之間的每個神經元之間都是有邊相連的。當輸入層的特徵維度變得很高時,這時全連線網路需要訓練的引數就會增大很多,計算速度就會變得很慢,例如一張黑白的 28×28 的手寫數字圖片,輸入層的神經元就有784個,如下圖

乾貨 | 深度學習神經網路(CNN)的模型結構

微信公眾號 關鍵字全網搜尋最新排名 【機器學習演算法】:排名第一 【機器學習】:排名第一 【Python】:排名第三 【演算法】:排名第四 前言 在前面我們講述了DNN的模型與前向反向傳播演算法。而在DNN大類中,卷積神經網路(Convolutional Neural Networks,以下簡稱CNN)是最

深度學習神經網路(直觀理解)

基本上在輸入影象中,如果有一個形狀是類似於這種濾波器的代表曲線,那麼所有的乘積累加在一起會導致較大的值!現在讓我們看看當我們移動我們的過濾器時會發生什麼。可以看到結果值是0哦,為什麼?還不明白麼,因為耳朵的邊緣和剛剛尾股部曲線太不同了。 這樣的多個濾波器就可以在大量資料的訓練下得到大量特徵了

深度學習神經網路程式設計實現(二)

void conv_bprop(Layer *layer, Layer *prev_layer, bool *pconnection) { int index = 0; int size = prev_layer->map_w * prev_layer->map_h; // delta