keras中文文檔_【DL項目實戰02】圖像識別分類——Keras框架+卷積神經網絡CNN(使用VGGNet)

ae25c64ca64167833d29acb15f809a86.png
版權聲明:小博主水平有限,希望大家多多指導。

目錄:

【使用傳統DNN】

BG大龍:【DL項目實戰02】圖像分類——Keras框架+使用傳統神經網絡DNN?zhuanlan.zhihu.com
df8187f39f3f60287ae3d02ebf65b71e.png

【使用卷積神經網絡CNN】

BG大龍:【DL項目實戰02】圖像識別分類——Keras框架+卷積神經網絡CNN(使用VGGNet)?zhuanlan.zhihu.com
df8187f39f3f60287ae3d02ebf65b71e.png

1、數據集情況

2、任務目標

3、流程中的注意點

(1)讀取數據

(2)建立CNN(選用VGGNet)

——【第1部分】Conv2D層中,確定data_format類型

——【第2部分】特征提取:(卷積+池化)

——【第3部分】分類識別:(全連接)

(3)設定超參

(4)定義損失函數

(5)訓練模型

(6)結果

4、對比實驗

(1)第1個對比:添加Batch Normalization(BN,批量標準化層)

(2)第2個對比:添加Truncated Normal(TN,截斷分布)

(3)第3個對比:添加Dropout

5、加載模型,進行測試


1、數據集情況

9d4d0074a149496a8acda54139d3b69b.png

2、任務目標

當輸入“image”時候,能否正確識別,識別的acc是多少

10590262f412e42a23d3da86706e93e5.png

3、流程中的注意點

(1)讀取數據

DNN結構:

d2c67d45a1e500e8f9d1a27f4f43ead1.png

CNN結構:

正常CNN輸入是224
244
3,這里進行縮小成64
64
3,為了提高計算速度

cbaf411edbe9be296df874a92242415b.png

f04f4f3972d7aa3741fa3798fbf1963b.png

(2)建立CNN(選用VGGNet)

把網絡模型單獨寫成一個模塊,然后直接去調用simpleVGGNet

65ba3bf716cb8497089a7f8dbd6a6bdb.png

在simpleVGGNet模塊里面,三部分工作

【第1部分】Conv2D層中,確定data_format類型

(data_format='channels_last')—input_shape = (128,128,3)代表128*128的RGB圖像

(data_format='channels_first')—input_shape = (3,128,128)代表128*128的RGB圖像

keras使用tensorflow作為Backend時,格式是(data_format='channels_first'

7dfd9b3fc98c064eacd5c429fdfe3f20.png
或者我們定義一個判斷語句:

fd61ec12100d1e9c42a26fb0b344252f.png

【第2部分】特征提取:(卷積+池化)

(1)32—64—128:為了降低pooling壓縮帶來的損失影響,filter個數逐步翻倍
(2)padding:補0策略,為“valid”, “same”
“valid”代表只進行有效的卷積,即對邊界數據不處理。
“same”代表保留邊界處的卷積結果,通常會導致輸出shape與輸入shape相同。
API文檔: 卷積層 - Keras中文文檔
(3)凡是計算層后面,都要加上激活函數

b76428c270496b1e29c3004e6c281fde.png

bc7781c9f93cad2db4faeb523c9674a3.png

8ecbbc6ee38517beb23b67e9f38ab691.png

【第3部分】分類識別:(全連接)

FC層:

f96665acfef2067c8bfdb944b961e287.png
激活函數softmax:

c4cf3aadb7d14fc68068091865e3c68e.png

f04f4f3972d7aa3741fa3798fbf1963b.png

(3)設定超參

30a116bf0c95936f7c0b0d129474dbfd.png

f04f4f3972d7aa3741fa3798fbf1963b.png

(4)定義損失函數

9f2cb56937871dde29c25c4a9d9e9de3.png
這里,有一個學習率的衰減,decay=INIT_LR / EPOCHS
看下API文檔,

2411f2b4ddd6bd5460fe91d9f05f11a3.png

f04f4f3972d7aa3741fa3798fbf1963b.png

(5)訓練模型

steps_per_epoch=len(trainX) // BS

它表示是將一個epoch分成多少個batch_size,
如果訓練樣本數N=1000,steps_per_epoch = 10,那么相當于一個batch_size=100

08cca550c4a0ff23f33030d7b4adba5b.png

f04f4f3972d7aa3741fa3798fbf1963b.png

(6)結果

觀察val_loss,

a99b05ea12d15f91a726c6cfd551423b.png

4、對比實驗

(1)第1個對比:添加Batch Normalization(BN,批量標準化層)

API文檔:(批)規范化BatchNormalization - Keras中文文檔

8fc581f48728eee2f0158023b629a6cc.png

axis:整數,指定當mode=0時規范化的軸。例如輸入是形如(samples,channels,rows,cols)的4D圖像張量,則應設置規范化的軸為1,意味著對每個特征圖進行規范化

NN結構:
在每一個“relu”后,添加BN

7c2cb22fb32d3f2c56455abbdbc03e18.png

0508db6b4d08ee76de56b7c2f0a60f08.png

例如:

e92b561b581737d5503baab639bfb807.png
結果:
但是Loss為什么這么大?

38a0a3e5b533326377f04616b4a76110.png

猜測是“隨機初始化”的原因,我又重新運行了一次

ba2a565a4e1f31c10a3bda64fc02ea09.png
BN添加前后對比:
更加穩定,提高了val_acc,

570c0d3c3a5bc50a65f8c3ca0ccb77c3.png

f04f4f3972d7aa3741fa3798fbf1963b.png

(2)第2個對比:添加Truncated Normal(TN,截斷分布)

API文檔: 初始化方法 - Keras中文文檔

cb8d626e199651ad15e28ac2ec968a49.png
NN結構:
在每個卷積層里面,添加kernel_initializer=TruncatedNormal(),stddev=0.01

91b052561680e063aa635ec3b9dd7be5.png

例如:

4e701feecd1fd8ff978528dd7a7b2b12.png
結果:

caa651b4427bcd4890d03376ee5870e2.png
TN添加前后對比:
有的參數添加后,不一定好

70d9c1167676232612583ca4b099c738.png

f04f4f3972d7aa3741fa3798fbf1963b.png

(3)第3個對比:添加Dropout

API文檔: 常用層 - Keras中文文檔

8844cb331f22dae97e58b13f6b9eaa64.png
NN結構:
有個疑問:在卷積層中,已經是“權重參數共享”,連接的參數本來就不多,再進行Dropout,豈不是更少?(所以一般在Dense層在dropout?)

fcba46cf6dd11569efcfcc5623cb0f37.png
結果:

f0ba6d4bd0ebc47783328b6b5bfa2be5.png
Dropout添加前后對比:
更加平穩,但是loss老是跑的比較高……

9907f387aa7e263d156e781bcd2f265e.png

5、加載模型,進行測試

用“image”文件夾,去做預測

007426e5f4838a2f9a6d6b9596dd2d6b.png

bdf1e8e128f957eeacb8f785f1f981b1.png
CNN結果:

f79acb389905349a51347e39919f0100.png

對比DNN結果:

d9fa597ad0f92296fdc4c5d703dd1a72.png

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/537336.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/537336.shtml
英文地址,請注明出處:http://en.pswp.cn/news/537336.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java Html轉pdf實戰

Java Html轉pdf實戰 - 簡書年尾手頭沒啥事,干起了打雜工作,最近幫忙解決后端項目里一個html批量轉pdf速度慢的問題,項目里用到的轉換工具是 wkhtmltopdf ,這貨轉單個html還好,批量轉速...https://www.jianshu.com/p/d0…

Hadoop生態圈-Ambari控制臺功能簡介

Hadoop生態圈-Ambari控制臺功能簡介 作者:尹正杰 版權聲明:原創作品,謝絕轉載!否則將追究法律責任。 在經歷一系列安裝過程之后(部署過HDP后我終于發現為什么大家喜歡用它了,部署比CDH簡單是他優勢之一&…

oracle監聽啟動很慢

TNS-12531: TNS:cannot allocate memory 首先查看內存,free -m 發現當前的空閑內存還有很多,那就不是內存不足的問題 想到之前重啟過數據庫服務器,查看主機名hostname,然后在查看etc/hosts 中的主機名,發現兩者不一致,…

python地圖標注_Python 給定的經緯度標注在地圖上的實現方法

博主最近發現了python中一個好玩的包叫basemap,使用這個包可以繪制地圖。值得說一下的是,basemap還沒有pip檢索,因此不能直接使用pip install basemap,來安裝這個包。所以需要自己把下面兩個包自行下載,然后在該目錄下使用pip安裝…

剪映專業版PC端清理緩存與日志

清理緩存 這個簡單,在全局設置里,點擊刪除鍵,就可以 清理日志 軟件每次剪輯都會生成日志,日志路徑在 C:\Users\zengm\AppData\Local\JianyingPro\User Data\Log C:\Users\zengm\AppData\Local\JianyingPro\User Data\VELog

nodejs源碼_nodejs之setTimeout源碼解析

setTimeout是在系統啟動的時候掛載的全局函數。代碼在timer.js。function setupGlobalTimeouts() {const timers NativeModule.require(timers);global.clearImmediate timers.clearImmediate;global.clearInterval timers.clearInterval;global.clearTimeout timers.clear…

百度網盤PC端緩存文件夾

在C:\Users\zengm\AppData\Roaming\baidu\BaiduNetdisk\users\下面 BaiduYunCacheFileV0.db 文件為百度網盤目錄數據,結構為: 百度網盤BaiduYunCacheFileV0.db數據庫研究_wqq1027的博客-CSDN博客_百度網盤數據庫最近研究了一下百度網盤的本地數據庫文件…

python 圖片轉文字錯誤_python3把base64字符串寫成圖片文件出錯

下面的代碼在python2下正常的,是一個微信圖標,文件md5是a1be719025844a1918ec6a338eaa8456我對python3不熟悉,不知道要怎么改#!/usr/bin/python3import base64def filePutContents(file, content):fp open(file, a)fp.write(content)fp.clos…

從業回憶錄,最后悔的事

被一篇文章誤導 我清楚地記得,在我畢業第一年,我看到了一篇關于程序員怎么學技術的文章,觀點是程序員要多學技術,文章引用了典故:“高筑墻,廣積糧,緩稱王”。當時讀這篇文章,感覺很有道理,認同了文章里的觀點。 這么些年,學了不少技術:C#、Asp.net、Java Web套餐、A…

kodexplorer開源網盤php程序配置解析

config/setting_user.php 追加內容(一下都是,注意不要使用中文引號、雙引號及分號) //【指定多語言只保留中文】 $GLOBALS[config][settings][language] zh-CN; //【自定義群組創建時自動新建的目錄】 $GLOBALS[config][settingSystemDefaul…

實現三元組表示的兩個稀疏矩陣的加法_K-BERT | 基于知識圖譜的語言表示模型

1.研究背景BERT曾被應用在多項NLP任務中,并且取得了很好的結果。它通過在大規模開放語料庫上進行預訓練以獲得通用的語言表示,然后在特定的下游任務中進行微調,吸收特定領域的知識。但這些模型在不同的領域執行知識驅動任務時,效果…

Excel單元格“刪除線”的添加與刪除

軟件:windows,WPS 點擊字體設計的小角標,進入更多設置,勾選“刪除線”

excel 表格復制到word后,寬超出word如何調整?

網上很多方法是用“選擇性粘貼----excel表格對象”,這個適用表格行數少的,不超過一頁word的。 步驟 復制到word里后,選中表格,右鍵---自動調整--選擇具體的調整方式。 調整后效果

sql 查詢上個月的數據_數據分析-SQL 進階篇 多表查詢

知識點一、表的加法Union:刪除表中的重復值union al:包含表中所有內容,包括重復值二、表的聯結聯結:join聯結分為以下五種:交叉聯結(cross join)又稱為笛卡爾積:將表中的每一行與另外…

jenkins部署三種構建方式的詳細步驟

部署背景:jenkins: CentOS 7.4C IP:172.16.3.74gitlab-11.5.3: CentOS 7.4D IP:172.16.4.74此上部署都是根據我之前的博客配置完成的;jenkins有三種構建方…

從業回憶,一次大膽的冒險,程序員轉崗項目經理

有些事不必知道得太早 程序員這個行業,被“中年危機”言論導向后,就和洗腳城女技師差不多,年輕,漂亮,技術好,體力好的技師收入高,一邊拿著高薪,賺著外快,一邊吐槽是青春飯,經常熬夜,干不長久。 2010年之前,網上宣傳程序員是青春飯,程序員中年危機的文章很少。近幾…

python中控腳本_Python3.7實現中控考勤機自動連接

由于考勤機與oa對接,oa會在每天定時取考勤機數據,但是需要考勤機是連接狀態,所以搜索了下相關教程,寫了個腳本自動連接。完全是個python小白,代碼爛,僅作為筆記。理論上支持所有程序的每天自動開啟與關閉# …

word轉freemarker和修改的步驟

第一步 編寫好word,用freemarker語法替換內容 第二步 word另存為 word xml 第三步 修改后綴名為:.ftl 第四步 notepad XML插件美化顯示,插件安裝教程:Notepad 7.6以上版本安裝XML Tools插件_lingquan0809的博客-CSDN博客Note…

python編程首選_為什么說學編程首選是python

為什么學編程你可能不會成為一名專業的程序員, 不過學編程的確是有很多的原因的1. 最重要的是你想學!不論是因為業余愛好還是作為職業,編程都是十分有意思的, 都會讓你收獲很多2. 如果你是對計算機感興趣的, 想更多的了…