机器学习平凡之路六
- 卷积层神经网络
 - 图像识别
 
卷积层神经网络
卷积层神经网络称作为卷积网络,与普通的神经网络是,卷积层的神经元中只覆盖输入特征局部范围的单元,其中的过滤器可以做到对图像关键特征的提取。卷积层神经网络在图像识别上有很好的效果
图像识别
猫狗分类本质就是二元分类的问题。对单一种类细分就是多元分类问题。
回顾卷积网络代码
1  | import tensorflow as tf  | 

同样的生成图形
1  | from IPython.display import SVG # 实现神经网络结构的图形化显示  | 



- 分为了三大层次构建
 - 输入层,特层学习(卷积和最大池化),分类学习(展平层,全连接,softmax)
 
卷积层的原理
卷积网络是通过Conv2D层中的过滤器用卷积计算对图像的核心特性进行抽取,提高图像处理的效率和准确率
其余原理可以自行百度学习
利用卷积网络给天气进行分类
数据说明:天气分为4种多云,雨天,晴天,日落
- 准备数据集,把不同目录中图像全部整理到同一个特征张量数组中,进行乱序排列。输入结构应该是4D张量(样本,图像高度,图像宽度,颜色深度)
 - 对应的获取目录名整理到一个同样长度的1D标签张量中,次序与特征张量一致
 
准备图像数据
1  | import numpy as np  | 

处理图像数据到X和y中(pip install opencv-python)
1  | dir = 'dataset2/'  | 

构建X,y的张量
1  | from sklearn.preprocessing import LabelEncoder  | 


随机显示图片
1  | import matplotlib.pyplot as plt  | 

拆分数据集
1  | from sklearn.model_selection import train_test_split  | 
构建简单的卷积网络
1  | import tensorflow as tf  | 

1  | def show_history(history): # 显示训练过程的学习曲线  | 

我们可以看到在图像识别的线性上面还是比较欠缺
优化学习
优化学习速率
1  | import tensorflow as tf  | 

其实还是不够完美,更多详情参考一下Adam
第二个添加Dropout层
1  | import tensorflow as tf  | 

从线性上面看,偏差还是不够
使用数据增强
在keras中,有一个imageData-Generator,通过对图像的平移,颠倒等一些列多种手段,增大数据集样本数
1  | from keras.preprocessing.image import ImageDataGenerator  | 
1  | history = cnn.fit( # 使用fit_generator  | 

总的来说,效果其实还是比较一般
保存模型
1  | from tensorflow.keras.models import Sequential, load_model  | 
可以保存模型
绘制特征通道
1  | import matplotlib.pyplot as plt # 导入matplotlib  | 

1  | pred = cnn.predict(X_test[2].reshape(1,100,100,3))  | 

2对应的是shine,可以看到当前结果还是很满意的