图像识别与卷积神经网络
- 神经网络:全连接层网络结构,卷积神经网络,循环神经网络(第八章介绍)
- 全连接层网络结构:神经网络层中的邻接层的节点都与相邻的节点相连接
- 卷积神经网络:和全连接层中的神经网络整体结构差不多,但是结构还是有很大的差别。卷积神经网络相邻两层之间只有部分节点相连,为了展示每一层神经元的维度,一般会将每一层卷积层的节点组成一个三位矩阵。卷积网络的输入层就可以是图像原始像素,输出层的每一个节点代表了不同类别的可信度,
- 两者的后面的区别在于神经网络中相邻两层的连接方式。
上图简单的介绍了卷积神经网络的架构图,包括卷积层,池化层,全连接层,softmax层
- 输入层:就是整个神经网络的输入,在RGB色彩模式下,图像深度为3,从输入层开始,卷积神经网络通过不同的神经网络结构将上一层三维矩阵转化为下一层的三维举证,直到最后的全连接层。
- 卷积层:卷积层每隔节点的输入只是上一层的一小块,这个小块一般是3或5的正方形,试图从更深层次地分析,而得到抽象程度更高地特征,一般来说,通过卷积层处理过的节点矩阵会变得更深
- 池化层:(pooling)池化层神经网络不会改变三维矩阵的深度,但是可以缩小矩阵的大小。可以简单的认为是将高分辨率的图变为低分辨率的图,可以缩小最后全连接层的节点个数,从而减少整个神经网络的参数。
- 全连接层:最后,在整个卷积神经网络架构中,还需要1-2个全连接层来进行分类,前面卷积和池化的过程可以看作是信息含量更高的特征,而后者可以将信息进行分类。
- sofemax层:也是主要用于分类的问题。
卷积层:
池化层:
之后,书上简单介绍了inception-v3模型及与之相关的一个迁移学习,
迁移学习: 将一个问题上训练好的模型通过简单的调整使其适用于一个新的问题。
下面是代码,
import glob
import os
import numpy as np
from tensorflow.python.platform import gfile
import random
import tensorflow as tf
BOTTLENECK_TENSOR_SIZE = 2048
# inception-v3 model's the bottleneck
# inception-v3模型中,张量名称是pool_3/_reshape:0
# 训练模型时,可以使用tensor.name来获取
BOTTLENECK_TENSOR_NAME = 'pool_3/_reshape:0'
# 图片输入张量所对应的名称
JPEG_DATA_TENSOR_NAME = 'DecodeJpeg/contents:0'
# 谷歌训练好的inception-v3模型的文件陌路
MODEL_DIR = 'F:\code\python\inception-v3-transfer_learning'
# 下载好的模型文件铭
MODEL_FILE = 'F://code//python//inception-v3-transfer_learning//inception_dec_2015//tensorflow_inception_graph.pb'
# 因为一个模型会使用很多次,所以可以将原始图像通过inception-v3模型计算得到特征
# 向量保存到文件中,
CACHE_DIR = '/tmp/bottleneck'
# 图片数据文件夹,在这个文件夹中的每隔子文件夹代表一个需要区分的类别,每隔子文件夹中存放了相应的图片
INPUT_DATA = 'F://code//python//inception-v3-transfer_learning//flower_photos//'
# 验证的数据百分比
VALIDATION_PERCENTAGE = 10
# 测试数据的百分比
TEST_PERCENTAGE = 10
# 定义神经网络的设置
LEARNING_RATE = 0.01
STEPS = 4000
BATCH = 100
# 这个函数从文件夹
# test_per