本周主要构件了一个卷积神经网络的模型,主要用以识别对应图片的种类,并且能够对图片进行预测
以下就是实现从网上爬取图片之后并识别毫不相干的从百度上查找的猫和狗图片的种类
首先从网上爬取一些图片到本地的文件夹当中,并对图片进行对应标签的标记。
我在网上选取了一些猫和狗的图片,
对爬取的图片进行标记,猫的图片标记A,狗的图片标记B
将对应图片的名称标记到其总类上,爬取的狗的图片网站是:
https://www.ivsky.com/tupian/gou_t116/index_2.html 中的页面
其猫的图片爬取的是对应上述页面中的猫种类的图片,
两种种类的图片合起来共计
152张图片+一个label标签集合
爬取的代码如下:(部分代码未放出,html是我单独写的一个模块)
构建训练模型,将图片统一缩放成40*40的大小,并获取对应图片的标签之后,构建一个识别只有一个特征,2个种类的宽度为40,高度为40的卷积神经网络模型,对应的第一个卷积层输出通道大小为32,第二个卷积层输出通道大小为64(代码中未给出)
用的优化器是亚当优化器,该优化器回溯比较快
对其进行250次学习率为0.001的模型训练并将模型保存为picture/recognize
训练过程:
进行250次识别之后,可以看到对应图片的识别效果拟合的不错,实际上识别的效果还得用实际的图片来检验一下
在模型训练好之后,要检验是被模型的准确率,就要找几张毫不相干的猫和狗的图片来测试一下。
我直接在百度上通过搜索猫和狗分别得到以下的几张图
随机抓取几个幸运的小朋友之后,得到以下的几张图片:
我们选取了5张图片,其中在训练的时候,我将猫的种类设置为A,狗的种类设置为B,然后对应图片的预测结果如下。
我们猜想的结果是:
u=231....对应A小狗
u=126....对应B小猫
u=141...对应B小猫
u=192...对应A小狗
u=327...对应A小狗
然后在代码中读取刚刚训练好的卷积神经网络的模型,对这些图片首先进行统一缩放成40*40大小之后,将其代入卷积神经网络模型中进行判断其类别:(预测时用的函数为softmax,该函数在识别单分类图片具有比sigmoid函数更好的分类能力,反之则用sigmoid有较好的效果)
可以看到除了
这张图片以后,其他图片均能正确识别。
这张狗的图片确实从肉眼上看起来有点像猫,可能是训练集中没有对应该类犬的形状的图片导致的,毕竟仅仅只有152个训练集同时还是两个种类的。
5张图片的识别正确率在80%左右,(未经过参数调优的结果)