機器不學習:深度學習筆記 卷積神經網絡

機器不學習 www.jqbxx.com : 深度聚合機器學習、深度學習算法及技術實戰

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

`conv2d

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

給定四維的input和filter 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為
  2. [filter_height * filter_width * in_channels, output_channels].
  3. 從input tensor中提取image patches,每個patch是一個virtual tensor,shape[batch, out_height, out_width, filter_height * filter_width * in_channels].
  4. 將每個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,將卷積層輸出減小,從而減少要調整的參數

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%

參考鏈接

  • Tensorflow 中 conv2d 都幹了啥
  • TensorFlow Example
  • 張雨石 Conv神經網絡
  • Bill Xia 卷積神經網絡(CNN)

轉自:https://www.cnblogs.com/hellocwh/p/5564568.html


分享到:


相關文章: