使用百度飞桨框架,GPU运行,jupyter
https://www.bilibili.com/video/BV1cK411G7y8
对深度学习的CNN的简单了解
下面是代码的整个结构目录:
数据集介绍
数据集中章子怡、姜文、彭于晏三位明星的人脸图片。
总计317张图片,章子怡100张,姜文103张,彭于晏114张。按照9:1的比例进行划分,90%用于训练,10%用于测试。
自定义的数据集,首先要生成图像列表,把自定的图像分为测试集和训练集,并带有标签。下面的程序可以单独运行,只要把一个大类的文件夹路径传进去就可以了,该程序会把里面的每个小类别都迭代,生成固定格式的列表.比如我们把人脸类别的根目录传进去…/images/face。最后会在指定目录下面生成三个文件,readme.json、trainer.list和test.list.
自定义数据集需要先定义自己的reader,把图像数据处理一些,并输出图片的数组和标签。
设置batch_size,可以设置为32,64,128
尝试打印一下,观察一下自定义的数据集
这里需要注意的是: Fluid中默认使用 -1 表示 batch size 维度,默认情况下会在 shape 的第一个维度添加 -1 。 所以 上段代码中, 我们可以接受将一个 [-1, 3, 100, 100] 的numpy array传给 image 。Fluid中用来做类别标签的数据类型是 int64,并且标签从0开始。
搭建CNN网络
搭建VGG网络
1.首先定义了一组卷积网络,即conv_block。卷积核大小为3x3,池化窗口大小为2x2,窗口滑动大小为2,groups决定每组VGG模块是几次连续的卷积操作,dropouts指定Dropout操作的概率。所使用的img_conv_group是在paddle.networks中预定义的模块,由若干组 Conv->BN->ReLu->Dropout 和 一组 Pooling 组成。
2.五组卷积操作,即 5个conv_block。 第一、二组采用两次连续的卷积操作。第三、四、五组采用三次连续的卷积操作。每组最后一个卷积后面Dropout概率为0,即不使用Dropout操作。
3.最后接两层512维的全连接。
模型的更改
获取损失函数准确率
自适应学习率算法
Executor:接收传入的program,通过run()方法运行program。
训练分为三步:第一步配置好训练的环境,第二步用训练集进行训练,并用验证集对训练进行评估,不断优化,第三步保存好训练的模型。