TensorFlow实战Google深度学习框架之卷积神经网络(Convolution Neural Network)
1.特点:有效缩小矩阵的尺寸,减少最后全连接层中的参数,加快计算速度,防止过拟合问题
2.基本结构:
——a.输入层:
——b.卷积层:一般的卷积神经网络都会有多个卷积层组成,每一个卷积层包括卷积层和池化层
————b.1卷积层:过滤器(filter):将当前层神经网络上的一个子节点矩阵转化为下一层神经网络的一个单位节点矩阵
☆ 每一个卷积层中使用的过滤器中的参数都是一样的
tf.nn.conv2d(input,filter_weight,strides=[1,1,1,1],padding='SAME')
input:四维,[batch_num,:,:,:] ——第batch_num张照片
filter_weight:卷积层权重:
tf.get_variable('weight',[5,5,3,16],initializer=tf.truncted_normal_initializer(stddev=0.1))
[5,5,:,:,]过滤器尺寸,3:当前层深度,16:过滤层深度即输出单位节点矩阵深度
strides=[1,1,1,1]:第一个和第四个恒为1,第三个,第四个为步长,
padding:填充(SAME:全0填充,VALID:不添加
tf.nn.bias_add(conv,biases)%给每一项添加偏置项
————b.2池化层:
tf.nn.max_pool(actived_conv,ksize=[1,3,3,1],strides=[1,2,2,1],padding='SAME')
tf.nn.average_pool(actived_conv,ksize=[1,3,3,1],strides=[1,2,2,1],padding='SAME')
ksize =[1,3,3,1]:前后两个1恒定(池化层的过滤器不可以跨不同输入样例或者节点矩阵深度),
[:,3,3:]:过滤器尺寸
——c.全连接
——d.Softmax层
3.卷积层具体步骤:
——3.1.卷积滤波器加偏置,提取局部的特征;每一个卷积操作只处理一小块图像
——3.2.对卷积滤波器的结果,进行Relu激活函数去线性
——3.3.对激活函数的结果进行池化操作(最大池化(多)、平均池化),降采样,保留最显著的特征
☆cifar10问题中加入LRN(Local Response Normalization,局部响应归一层):卷积1>>池化层1>>规范层1>>卷积层2>>规范层2>>池化层2
----------关于LRN:一些经典卷积神经网络模型基本放弃了LRN,主要效果不明显,训练速度大大下降
☆每个神经元接收局部的像素点作为输入,最后将所有神经元收到的局部信息综合起来就可以得到全局信息。因为卷积核权值共享,可以大大降低模型中参数
4.经典卷积神经网络模型:
AlexNet:输入>>卷积层11*11,4>>LRN层>>最大池化层3*3,2>>卷积层5*5,1>>LRN层>>最大池化层3*3,2>>卷积层3*3,1>>卷积层3*3,1>>卷积层3*3,1>>最大池化层3*3>>全连接层>>全连接层>>全连接层
VGGNet:反复堆叠3*3小型的卷积核和2*2的最大池化层,构筑16~19层深的卷积神经网络
GoogleInceptionNet
ResNet
5.延伸:全卷积神经网络FCN(将全连接层变为全卷积形式):让卷积网络在一张更大的输入图片上滑动,得到多个输出,这样的转化可以让我们在单个向前传播的过程中完成上述的操作。