300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > keras中文文档_【DL项目实战02】图像识别分类——Keras框架+卷积神经网络CNN(使用VGGNet)

keras中文文档_【DL项目实战02】图像识别分类——Keras框架+卷积神经网络CNN(使用VGGNet)

时间:2020-08-18 17:23:00

相关推荐

keras中文文档_【DL项目实战02】图像识别分类——Keras框架+卷积神经网络CNN(使用VGGNet)

版权声明:小博主水平有限,希望大家多多指导。

目录:

【使用传统DNN】

BG大龍:【DL项目实战02】图像分类——Keras框架+使用传统神经网络DNN​

【使用卷积神经网络CNN】

BG大龍:【DL项目实战02】图像识别分类——Keras框架+卷积神经网络CNN(使用VGGNet)​

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、数据集情况

2、任务目标

当输入“image”时候,能否正确识别,识别的acc是多少

3、流程中的注意点

(1)读取数据

DNN结构:

CNN结构:

正常CNN输入是224 244 3,这里进行缩小成64 64 3,为了提高计算速度

(2)建立CNN(选用VGGNet)

把网络模型单独写成一个模块,然后直接去调用simpleVGGNet

在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')
或者我们定义一个判断语句:

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

(1)32—64—128:为了降低pooling压缩带来的损失影响,filter个数逐步翻倍

(2)padding:补0策略,为“valid”, “same”

“valid”代表只进行有效的卷积,即对边界数据不处理。

“same”代表保留边界处的卷积结果,通常会导致输出shape与输入shape相同。

API文档: 卷积层 - Keras中文文档

(3)凡是计算层后面,都要加上激活函数

【第3部分】分类识别:(全连接)

FC层:
激活函数softmax:

(3)设定超参

(4)定义损失函数

这里,有一个学习率的衰减,decay=INIT_LR / EPOCHS

看下API文档,

(5)训练模型

steps_per_epoch=len(trainX) // BS

它表示是将一个epoch分成多少个batch_size,

如果训练样本数N=1000,steps_per_epoch = 10,那么相当于一个batch_size=100

(6)结果

观察val_loss,

4、对比实验

(1)第1个对比:添加Batch Normalization(BN,批量标准化层)

API文档:(批)规范化BatchNormalization - Keras中文文档

axis:整数,指定当mode=0时规范化的轴。例如输入是形如(samples,channels,rows,cols)的4D图像张量,则应设置规范化的轴为1,意味着对每个特征图进行规范化

NN结构:

在每一个“relu”后,添加BN

例如:

结果:

但是Loss为什么这么大?

猜测是“随机初始化”的原因,我又重新运行了一次

BN添加前后对比:

更加稳定,提高了val_acc,

(2)第2个对比:添加Truncated Normal(TN,截断分布)

API文档: 初始化方法 - Keras中文文档
NN结构:

在每个卷积层里面,添加kernel_initializer=TruncatedNormal(),stddev=0.01

例如:

结果:
TN添加前后对比:

有的参数添加后,不一定好

(3)第3个对比:添加Dropout

API文档: 常用层 - Keras中文文档
NN结构:

有个疑问:在卷积层中,已经是“权重参数共享”,连接的参数本来就不多,再进行Dropout,岂不是更少?(所以一般在Dense层在dropout?)

结果:
Dropout添加前后对比:

更加平稳,但是loss老是跑的比较高……

5、加载模型,进行测试

用“image”文件夹,去做预测

CNN结果:

对比DNN结果:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。