主頁 >  其他 > 《Python深度學習》第五章-1(CNN簡介)讀書筆記

《Python深度學習》第五章-1(CNN簡介)讀書筆記

2021-07-27 06:29:52 其他

第五章 深度學習用于計算機視覺

5.1 卷積神經網路簡介

5.1.1 卷積神經網路對 MNIST 分類

使用卷積神經網路對 MNIST 數字進行分類,在第 2 章用密集連接網路做過(當時的測驗精度為 97.8%),它是 Conv2D 層和 MaxPooling2D 層的堆疊,

  1. 實體化一個小型的卷積神經網路

    from keras import layers
    from keras import models
    
    model = models.Sequential()
    model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)))
    model.add(layers.MaxPooling2D((2, 2)))
    model.add(layers.Conv2D(64, (3, 3), activation='relu'))
    model.add(layers.MaxPooling2D((2, 2)))
    model.add(layers.Conv2D(64, (3, 3), activation='relu'))
    

    卷積神經網路接收形狀為 (image_height, image_width, image_channels)的輸入張量(不包括批量維度),第一層傳入引數 input_shape=(28, 28, 1) 來完成此設定,

    >>> model.summary()
    _________________________________________________________________
    Layer (type) Output Shape Param #
    =================================================================
    conv2d_1 (Conv2D) (None, 26, 26, 32)                  320
    _________________________________________________________________
    max_pooling2d_1 (MaxPooling2D) (None, 13, 13, 32)     0
    _________________________________________________________________
    conv2d_2 (Conv2D) (None, 11, 11, 64)                  18496
    _________________________________________________________________
    max_pooling2d_2 (MaxPooling2D) (None, 5, 5, 64)       0
    _________________________________________________________________
    conv2d_3 (Conv2D) (None, 3, 3, 64)                    36928
    =================================================================
    Total params: 55,744
    Trainable params: 55,744
    Non-trainable params: 0
    

    每個 Conv2D 層和 MaxPooling2D 層的輸出都是一個形狀為 (height, width,channels) 的 3D 張量,通道數量由傳入 Conv2D 層的第一個引數所控制(32 或 64),

  2. 在卷積神經網路上添加分類器

    model.add(layers.Flatten())
    model.add(layers.Dense(64, activation='relu'))
    model.add(layers.Dense(10, activation='softmax'))
    

    在進入兩個 Dense 層之前,形狀 (3, 3, 64) 的輸出被展平為形狀 (576,) 的向量,

    >>> model.summary()
    _________________________________________________________________
    Layer (type) Output Shape Param #
    =================================================================
    conv2d_1 (Conv2D) (None, 26, 26, 32)                    320
    _________________________________________________________________
    max_pooling2d_1 (MaxPooling2D) (None, 13, 13, 32)       0
    _________________________________________________________________
    conv2d_2 (Conv2D) (None, 11, 11, 64)                    18496
    _________________________________________________________________
    max_pooling2d_2 (MaxPooling2D) (None, 5, 5, 64)         0
    _________________________________________________________________
    conv2d_3 (Conv2D) (None, 3, 3, 64)                      36928
    _________________________________________________________________
    flatten_1 (Flatten) (None, 576)                         0
    _________________________________________________________________
    dense_1 (Dense) (None, 64)                              36928
    _________________________________________________________________
    dense_2 (Dense) (None, 10)                              650
    =================================================================
    Total params: 93,322
    Trainable params: 93,322
    Non-trainable params: 0
    
  3. 在 MNIST 影像上訓練卷積神經網路

    from keras.datasets import mnist
    from keras.utils import to_categorical
    (train_images, train_labels), (test_images, test_labels) = mnist.load_data()
    
    train_images = train_images.reshape((60000, 28, 28, 1))
    train_images = train_images.astype('float32') / 255
    
    test_images = test_images.reshape((10000, 28, 28, 1))
    test_images = test_images.astype('float32') / 255
    
    train_labels = to_categorical(train_labels)
    test_labels = to_categorical(test_labels)
    
    model.compile(optimizer='rmsprop',
    			  loss='categorical_crossentropy',
    			  metrics=['accuracy'])
    model.fit(train_images, train_labels, epochs=5, batch_size=64)
    

    在測驗資料上對模型進行評估,

    >>> test_loss, test_acc = model.evaluate(test_images, test_labels)
    >>> test_acc
    0.9912999868392944
    
  4. 整體代碼

    from tensorflow.keras.datasets import mnist
    from tensorflow.keras.utils import to_categorical
    from tensorflow.keras import layers
    from tensorflow.keras import models
    (train_images, train_labels), (test_images, test_labels) = mnist.load_data()
    
    train_images = train_images.reshape((60000, 28, 28, 1))
    train_images = train_images.astype('float32') / 255
    
    test_images = test_images.reshape((10000, 28, 28, 1))
    test_images = test_images.astype('float32') / 255
    
    train_labels = to_categorical(train_labels)
    test_labels = to_categorical(test_labels)
    
    model = models.Sequential()
    model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)))
    model.add(layers.MaxPooling2D((2, 2)))
    model.add(layers.Conv2D(64, (3, 3), activation='relu'))
    model.add(layers.MaxPooling2D((2, 2)))
    model.add(layers.Conv2D(64, (3, 3), activation='relu'))
    model.add(layers.Flatten())
    model.add(layers.Dense(64, activation='relu'))
    model.add(layers.Dense(10, activation='softmax'))
    
    model.compile(optimizer='rmsprop',
    			  loss='categorical_crossentropy',
    			  metrics=['accuracy'])
    model.fit(train_images, train_labels, epochs=5, batch_size=64)
    test_loss, test_acc = model.evaluate(test_images, test_labels)
    

    結果是:

    >>> test_acc
    0.99080000000000001
    

5.1.2 卷積運算

  1. D e n s e 層 \color{red}Dense 層 Dense從輸入特征空間中學到的是 全 局 模 式 \color{red}全域模式 ,而 卷 積 層 \color{red}卷積層 學到的是 局 部 模 式 \color{red}區域模式

  2. 卷積神經網路具有以下兩個性質

    • 卷積神經網路學到的模式具有 平 移 不 變 性 ( t r a n s l a t i o n ?? i n v a r i a n t ) \color{red}平移不變性(translation\;invariant) (translationinvariant),這使得卷積神經網
      絡在處理影像時可以高效利用資料
      (因為 視 覺 世 界 從 根 本 上 具 有 平 移 不 變 性 \color{red}視覺世界從根本上具有平移不變性 ),它只需要更少的訓練樣本就可以學到具有泛化能力的資料表示,
    • 卷積神經網路可以學到 模 式 的 空 間 層 次 結 構 ( s p a t i a l ?? h i e r a r c h i e s ?? o f ?? p a t t e r n s ) \color{red}模式的空間層次結構(spatial\;hierarchies\;of\;patterns) (spatialhierarchiesofpatterns),卷積神經網路可以有效地學習越來越復雜、越來越抽象的視覺概念(因為 視 覺 世 界 從 根 本 上 具 有 空 間 層 次 結 構 \color{red}視覺世界從根本上具有空間層次結構 ),
      在這里插入圖片描述
  3. 特 征 圖 ( f e a t u r e ?? m a p ) \color{red}特征圖(feature\;map) (featuremap)

    • 定義: 深度軸的每個維度都是一個 特 征 \color{red}特征 (或 過 濾 器 \color{red}過濾器 ),而 2D 張量 output[:, :, n] 是這個過濾器在輸入上的回應的二維空間 圖 ( m a p ) \color{red}圖(map) (map)
    • 應用
      • 輸入卷積中的: 包含兩個空間軸(高度寬度)和一個深度軸(也叫通道軸)的 3D 張量,其卷積也叫 特 征 圖 ( f e a t u r e ?? m a p ) \color{red}特征圖(feature\;map) (featuremap)
      • 從卷積中輸出的: 卷積運算從輸入特征圖中提取圖塊,并對所有這些圖塊應用相同的變換,生成 輸 出 特 征 圖 ( o u t p u t ?? f e a t u r e ?? m a p ) \color{red}輸出特征圖(output\;feature\;map) (outputfeaturemap),該輸出特征圖仍是一個 3D 張量,具有寬度高度,其深度是輸出深度是層的引數,每層代表代表 過 濾 器 ( f i l t e r ) \color{red}過濾器(filter) (filter)
  4. 卷積關鍵引數

    • 從 輸 入 中 提 取 的 圖 塊 尺 寸 \color{red}從輸入中提取的圖塊尺寸 :這些圖塊的大小通常是 3 × 3 3×3 3×3 5 × 5 5×5 5×5,本例中為 3 × 3 3×3 3×3
    • 輸 出 特 征 圖 的 深 度 \color{red}輸出特征圖的深度 :卷積所計算的過濾器的數量,本例第一層的深度為 32 32 32,最后一層的深度是 64 64 64
  5. 卷積的作業原理

    • 開始:在 3D 輸入特征圖上 滑 動 ( s l i d e ) \color{red}滑動(slide) (slide)這些 3 × 3 3×3 3×3 5 × 5 5×5 5×5的視窗,在每個可能的位置停止并提取周圍特征的 3D 圖塊[形狀為 (window_height, window_width, input_depth) ],
    • 然后,每個 3D 圖塊與學到的同一個權重矩陣[叫作 卷 積 核 ( c o n v o l u t i o n k e r n e l ) \color{red}卷積核(convolution kernel) (convolutionkernel)]做 張 量 積 \color{red}張量積 ,轉換成形狀為 (output_depth,) 的 1D 向量,
    • 最后,對所有這些向量進行空間重組,使其轉換為形狀為 (height, width, output_depth) 的 3D 輸出特征圖,輸出特征圖中的每個空間位置都對應于輸入特征圖中的相同位置,

    如圖所示:
    在這里插入圖片描述

    輸 出 的 寬 度 和 高 度 可 能 與 輸 入 的 寬 度 和 高 度 不 同 \color{red}輸出的寬度和高度可能與輸入的寬度和高度不同 ,不同的原因可能有兩點:

    • 邊 界 效 應 \color{red}邊界效應 ,可以通過對輸入特征圖進行填充來抵消,
    • 使 用 了 步 幅 ( s t r i d e ) \color{red}使用了步幅(stride) 使(stride),稍后會給出其定義,

5.1.3 邊界效應與填充

  1. 邊界效應定義
    假設用 3 × 3 3×3 3×3特征圖 進行卷積Con2,開始的輸入尺寸為 28 × 28 28×28 28×28,經過第一個卷積層之后尺寸變為 26 × 26 26×26 26×26
  2. 填充的定義
    填充是在輸入特征圖的每一邊 添 加 適 當 數 目 的 行 和 列 \color{red}添加適當數目的行和列 ,使得每個輸入方塊都能作為 卷 積 窗 口 的 中 心 \color{red}卷積視窗的中心
  3. 對于 Conv2D 層,可以通過 padding 引數來設定填充,這個引數有兩個取值
    • valid” 表示 不 使 用 填 充 \color{red}不使用填充 使(只使用有效的視窗位置);
    • same” 表示“ 填 充 后 輸 出 的 寬 度 和 高 度 與 輸 入 相 同 \color{red}填充后輸出的寬度和高度與輸入相同 ”,
    • padding 引數的默認值為 “valid” ,

5.1.4 卷積步幅

  1. 卷積步幅定義
    兩個連續視窗的距離是卷積的一個引數,叫作 步 幅 \color{red}步幅 默認值 1 \color{red}1 1
  2. 步幅為n的意義
    • 步幅為 n n n意味著特征圖的寬度高度都被做了 n n n 下 采 樣 \color{red}下采樣 (除了邊界效應引起的變化),
    • 為了 對 特 征 圖 進 行 下 采 樣 \color{red}對特征圖進行下采樣 我 們 不 用 步 幅 \color{red}我們不用步幅 ,而是通常使用 最 大 池 化 ( m a x ? p o o l i n g ) 運 算 \color{red}最大池化(max-pooling)運算 (max?pooling)

5.1.5 最大池化運算

  1. 最大池化的定義

    • 最大池化是 從 輸 入 特 征 圖 中 提 取 窗 口 , 并 輸 出 每 個 通 道 的 最 大 值 \color{red}從輸入特征圖中提取視窗,并輸出每個通道的最大值
    • 使 用 硬 編 碼 的 m a x 張 量 運 算 對 局 部 圖 塊 進 行 變 換 , 而 不 是 使 用 學 到 的 線 性 變 換 ( 卷 積 核 ) \color{red}使用硬編碼的 max 張量運算對區域圖塊進行變換,而不是使用學到的線性變換(卷積核) 使max使()
  2. 最大池化的作用

    • 減 少 需 要 處 理 的 特 征 圖 的 元 素 個 數 \color{red}減少需要處理的特征圖的元素個數 .
    • 通過讓連續卷積層的觀察視窗越來越大, 從 而 引 入 空 間 過 濾 器 的 層 級 結 構 \color{red}從而引入空間過濾器的層級結構

    因為如果只使用卷積核會造成:

    1. 不 利 于 學 習 特 征 的 空 間 層 級 結 構 , \color{red}不利于學習特征的空間層級結構,
    2. 最 后 一 層 的 特 征 圖 對 每 個 樣 本 所 有 的 元 素 太 多 , 造 成 難 以 計 算 , \color{red}最后一層的特征圖對每個樣本所有的元素太多,造成難以計算,
  3. 實作下采樣可以用

    • 步幅padding
    • 平均池,

    最大池化的效果往往比這些替代方法更好觀察不同特征的最大值(而不是平均值)能夠給出更多的資訊,類似SIFT演算法的下采樣步驟,


轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/290211.html

標籤:AI

上一篇:3年入行,5年懂行,軟體測驗生涯的第5個年頭,你混成啥樣了?

下一篇:【秋招面試】位元組面試準備(一面準備)

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more