三、卷积神经网络(CNN)
1.CNN 解决了什么问题?
在 CNN 出现之前,图像对于人工智能来说是一个难题,有2个原因:
- 图像需要处理的**数据量太大**,导致成本很高,效率很低
- 图像在数字化的过程中很难保留原有的**特征**,导致图像处理的准确率不高
而CNN的提出很好的解决了这两个问题,对大量的图像数据进行降维的同时进行特征提取。它用类似视觉的方式保留了图像的特征,当图像做翻转,旋转或者变换位置时,它也能有效的识别出来是类似的图像。
2.基本组件.
典型的 CNN 由3个部分构成:
- 卷积层– 主要作用是保留图片的特征
- 池化层 – 主要作用是把数据降维,可以有效的避免过拟合
- 全连接层 – 根据不同任务输出我们想要的结果
3.卷积层
- 作用:特征提取,卷积层通过卷积核的过滤提取出图片中局部的特征,跟上面提到的人类视觉的特征提取类似。
- 超参数:卷积核数量、核尺寸、步长、零填充
# 卷积层,32个卷积核,尺寸为5x5conv1=tf.layers.conv2d(x, 32, 5, activation=tf.nn.relu)
4.池化层
- 作用:特征融合,降维
- 无参数需要学习
- 超参数:尺寸、步长、计算类别--最大池化/平均池化
# 最大池化层,步长为2,无需学习任何参量conv1=tf.layers.max_pooling2d(conv1, 2, 2)
5.全连接层
- 全连接层采用softmax函数,指数归一化函数,将一个实数向量压缩到(0,1)。
- 最后一个全连接层对接1000类的softmax层(主要取决于标签的种类)
# 展开特征为一维向量,以输入全连接层fc1=tf.contrib.layers.flatten(conv2) # 全连接层fc1=tf.layers.dense(fc1, 1024) # 应用Dropout (训练时打开,测试时关闭)fc1=tf.layers.dropout(fc1, rate=dropout, training=is_training) # 输出层,预测类别out=tf.layers.dense(fc1, n_classes)