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.mzph.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. 如果你是对计算机感兴趣的, 想更多的了…