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