前言
在使用paddlepaddle实战完手写数字集识别后,开始了新的一轮实战-飞机识别。
与之前不同的是,这次的项目使用更加高级的框架api接口,代码集成度更高,但是同样的也出现了一个问题,课程中并没有对这些api进行讲解。
我花了两个多小时,通过查看源代码,终于搞清楚了这些api。下面,我们分享给大家!
CNN飞机识别网络结构
数据集以及项目说明
本项目共有7897张图像,其中训练集5897张,测试集2000张图像,每幅图像的大小是32*32,形状是(32,32,3)
本次项目是百度官方视频七天入门深度学习中的 day2.
课程链接:Day 2 实战——飞机识别
代码解析
1. 加载数据
testdata_orgin = np.load('data/plane/testdata.npy')
testlabel_orgin=np.load('data/plane/testlabel.npy')
traindata_orgin = np.load('data/plane/traindata.npy')
trainlabel_orgin=np.load('data/plane/trainlabel.npy')
返回的数组形状:
testdata_orgin.shape==(2000, 32, 32, 3)
testlabel_orgin==(2000, 1)
traindata_orgin==(5897, 32, 32, 3)
trainlabel_orgin==(5897, 1)
2. 转换数据格式
testdata = np.array(testdata_orgin).reshape(2000,3,32,32).astype(np.float32)
traindata = np.array(traindata_orgin).reshape(5897,3,32,32).astype(np.float32)
testlabel = np.array(testlabel_orgin).reshape(2000,1).astype(np.float32)
trainlabel_orgin = np.array(trainlabel_orgin).reshape(5897,1).astype(np.float32)
由于在模型中,要求形状为(通道,宽,高),所以,这里需要对原数据进行格式上的转换。
3. 数据归一化
testdata = 2*testdata/255.0-1.0
traindata = 2*traindata/255.0-1.0
图片归一化,使图片中的每一个数在区间[-1,1]之间。这是在我们进行图象分类任务必须进行的操作,有利于提高我们程序执行速度和模型精准度。
4. 构造数据生成器
def dataset(data,label,buf_size):#这里bufsize是产生数据的个数
def reader():
for i in range(buf_size):