1. 程式人生 > >day-16 CNN卷積神經網路演算法之Max pooling池化操作學習

day-16 CNN卷積神經網路演算法之Max pooling池化操作學習

         利用CNN卷積神經網路進行訓練時,進行完卷積運算,還需要接著進行Max pooling池化操作,目的是在儘量不丟失影象特徵前期下,對影象進行downsampling。

         首先看下max pooling的具體操作:整個圖片被不重疊的分割成若干個同樣大小的小塊(pooling size)。每個小塊內只取最大的數字,再捨棄其他節點後,保持原有的平面結構得出 output。

        相應的,對於多個feature map,操作如下,原本64張224X224的影象,經過Max Pooling後,變成了64張112X112的影象,從而實現了downsampling的目的。

        為什麼可以這樣?這裡利用到一個特性:平移不變性(translation invariant),結論的公式證明還無從考證,不過從下面的例項可以側面證明這點:

        右上角為3副橫折位置不一樣的影象,分別同左上角的卷積核進行運算,然後再進行3X3大小池化操作以後,我們發現最後都能得到相同的識別結果。還有人更通俗理解卷積後再進行池化運算得到相同的結果,就好比牛逼的球隊分到不同的組得到獲得相同的比賽結果一樣。

        除了Max Pooling,還有一些其它的池化操作,例如:SUM pooling、AVE pooling、MOP pooling、CROW pooling和RMAC pooling等,這裡不再進行介紹,見末尾參考文章連結。

        下面利用tensorflow模組的max_pool函式,實現Max pooling操作:

# 匯入tensorflow庫
import tensorflow as tf

# 定義2個行為4,列為4,通道為1的資料集
batches = 2
height = 4
width = 4
channes = 1

dataset = tf.Variable(
    [
        [
            [[1.0],[2.0],[5.0],[6.0]],
            [[3.0],[4.0],[7.0],[8.0]],
            [[9.0],[10.0],[13.0],[14.0]],
            [[
11.0],[12.0],[15.0],[16.0]] ], [ [[17.0],[18.0],[21.0],[22.0]], [[19.0],[20.0],[23.0],[24.0]], [[25.0],[26.0],[29.0],[30.0]], [[27.0],[28.0],[31.0],[32.0]] ] ]) # 定義Max pooling操作運算,重點理解下ksize和strides兩個引數的含義: # ksize表示不同維度Max pooling的大小,由於batches和channels兩個維度不需要進行Max pooling,所以為1 # strides表示下個Max pooling位置的跳躍大小,同理,由於batches和channels兩個維度不需要進行Max pooling,所以為1 X = tf.placeholder(dtype="float",shape=[None,height,width,channes]) data_max_pool = tf.nn.max_pool(value=X,ksize=[1,2,2,1],strides=[1,2,2,1],padding="VALID") # 開始進行tensorflow計算圖運算 with tf.Session() as sess: sess.run(tf.global_variables_initializer()) input = sess.run(dataset) output = sess.run(data_max_pool,feed_dict = {X:input}) print(input) print("===============================") print(output) # 輸入: # [ # [ # [[ 1.] [ 2.] [ 5.] [ 6.]] # [[ 3.] [ 4.] [ 7.] [ 8.]] # [[ 9.] [10.] [13.] [14.]] # [[11.] [12.] [15.] [16.]] # ] # # [ # [[17.] [18.] [21.] [22.]] # [[19.] [20.] [23.] [24.]] # [[25.] [26.] [29.] [30.]] # [[27.] [28.] [31.] [32.]] # ] # ] # # =============================== # 輸出: # [ # [ # [[ 4.] [ 8.]] # [[12.] [16.]] # ] # [ # [[20.] [24.]] # [[28.] [32.]] # ] # ]

相關推薦

day-16 CNN神經網路演算法Max pooling操作學習

         利用CNN卷積神經網路進行訓練時,進行完卷積運算,還需要接著進行Max pooling池化操作,目的是在儘量不丟失影象特徵前期下,對影象進行downsampling。          首先看下max pooling的具體操作:整個圖片被不重疊的分割成若干個同樣大小的小塊(pooling s

神經網路物體檢測---空間金字塔

一、相關理論   本篇博文主要講解大神何凱明2014年的paper:《Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition》,這篇paper主要的創新點在於提出了空間金字塔池

Keras學習(四)——CNN神經網路

本文主要介紹使用keras實現CNN對手寫資料集進行分類。 示例程式碼: import numpy as np from keras.datasets import mnist from keras.utils import np_utils from keras.models impo

CNN神經網路簡單實現模型

這是基於Mnist手寫識別的資料訓練的一個簡單的CNN卷積神經網路,可以直接在網上下載訓練資料集,但是經常會出現連線不到伺服器的提示,所以我下到本地進行資料的載入,下面程式碼的資料載入有問題,所以自己找了一些程式碼整出來了這個資料載入的辦法,連結為:https://blog.csdn.net/lxi

【深度學習】Tensorflow——CNN 神經網路 2

轉自https://morvanzhou.github.io/tutorials/machine-learning/tensorflow/5-05-CNN3/ 目錄 圖片處理  建立卷積層  建立全連線層  選優化方法  完整程式碼

【深度學習】Tensorflow——CNN 神經網路 1

轉自https://morvanzhou.github.io/tutorials/machine-learning/tensorflow/5-04-CNN2/ 這一次我們會說道 CNN 程式碼中怎麼定義 Convolutional 的層和怎樣進行 pooling. 基於上一次卷積神經網路的介

TensorFlowCNN神經網路的實現

下載MNIST資料集(28*28,輸入維度為784) import tensorflow as tf #下載MNIST資料集(28*28,輸入維度為784) from tensorflow.examples.tutorials.mnist import input_data mnist =

DeepLearning tutorial(4)CNN神經網路原理簡介+程式碼詳解

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Python CNN神經網路程式碼實現

1 # -*- coding: utf-8 -*- 2 """ 3 Created on Wed Nov 21 17:32:28 2018 4 5 @author: zhen 6 """ 7 8 import tensorflow as tf 9 from tensorflow.e

TensorFlow實現CNN神經網路對手寫數字集mnist的模型訓練

mnist手寫數字集相當於是TensorFlow應用中的Helloworld。 在學習了TensorFlow的卷積神經網路應用之後,今天就分步解析一下其應用過程  一、mnist手寫數字資料集         MN

CNN神經網路入門整合

這是一篇關於CNN入門知識的部落格,基本手法是抄、刪、改、查,就算是自己的一個筆記吧,以後忘了多看看。   1.邊界檢測示例 假如你有一張如下的影象,你想讓計算機搞清楚影象上有什麼物體,你可以做的事情是檢測影象的垂直邊緣和水平邊緣。   卷積計算可以得

CNN-神經網路

開局一張圖 資料輸入層 去均值:把輸入資料各個維度都中心化到0             注意只是在訓練資料上,測試集上減去的是訓練集上的均值,不要再求測試集的均值。 歸一化:幅度歸一到同一範圍。             在實際操作中不用,因為RGB天生就是0-2

吳恩達deeplearningCNN神經網路入門

1.邊界檢測示例 假如你有一張如下的影象,你想讓計算機搞清楚影象上有什麼物體,你可以做的事情是檢測影象的垂直邊緣和水平邊緣。  如下是一個6*6的灰度影象,構造一個3*3的矩陣,在卷積神經網路中通常稱之為filter,對這個6*6的影象進行卷積運算,以左上角的-5計算為例  3*1+

詳細解釋CNN神經網路各層的引數和連線個數的計算

積神經網路是一個多層的神經網路,每層由多個二維平面組成,而每個平面由多個獨立神經元組成。        圖:卷積神經網路的概念示範:輸入影象通過和三個可訓練的濾波器和可加偏置進行卷積,濾波過程如圖一,卷積後在C1層產生三個特徵對映圖,然後特徵對映圖中每組的四個畫素再進行

CNN神經網路原理的直觀理解

哈哈?偶然在知乎上翻到了我旭神對CNN原理的通俗易懂的解釋,看完以後簡直醍醐灌頂呢。 下面上頭像!! 哼,趕緊記錄一下加強一下理解! 轉自知乎我旭神 如果學過數字影象處理,對於卷積核的作用應該不陌生,比如你做一個最簡單的方向濾波器,那就是一個二維卷積核,這個

CNN神經網路

1、MLP和CNN的區別 MLP喪失了二維影象資訊,必須轉成向量 2、將全連線層轉換為區域性連線層 stride和填充:stride步長,對於超出範圍的區域,可以刪除或者填充預設值,根據需要選擇(pandding分別對應valid和same) 3、卷積層的

[原始碼和文件分享]基於CUDA的神經網路演算法實現

摘 要 卷積神經網路是近年來人工智慧領域取得重大突破的一種重要手段,給出了影象識別、語音識別和自然語言處理領域中關鍵問題的優化解決方案,尤其適合處理影象方面的任務,如人臉識別和手寫體識別。手寫數字識別是用卷積神經網路解決的經典問題,採用一般方法訓練出來的神經網路達到了97%的識別率,幾乎與人類的

python神經網路案例——CNN神經網路實現mnist手寫體識別

全棧工程師開發手冊 (作者:欒鵬) 載入樣本資料集 首先我們要有手寫體的資料集檔案 我們實現一個MNIST.py檔案,專門用來讀取手寫體檔案中的資料。 # -*- coding: UTF-8 -*- # 獲取手寫資料。

CNN神經網路基礎

轉自:http://www.sohu.com/a/138403426_470008 卷積神經網路基礎 神經網路 先借用 CNTK 的一個例子,來看看如何使用神經網路來進行分類。如果想根據一個人的年齡和年收入,對他的政治傾向進行分類(保守派,居中和自由派),怎麼做呢?

CNN神經網路學習筆記1:背景介紹

     Convolutional Neural Network 卷積神經網路是基於人工神經網路提出的。人工神經網路模擬人的神經系統,由一定數量的神經元構成。在一個監督學習問題中,有一組訓練資料(xi,yi),x是樣本,y是label,把它們輸入人工神經網路,