卷积神经网络
深度学习中卷积神经网络的应用解析 #生活技巧# #学习技巧# #深度学习技巧#
卷积神经网络
上一篇文章实现了用全连接层神经网络手写数字识别,但是全连接层神经网络有一个缺点就是:假设我是32323的RGB图片,如果我的第一层全连接层是500个节点,那么我需要的参数就是32323*500+500一共需要150多万个参数,这样会导致计算过慢以及过拟合的问题。
于是就有了卷积神经网络的算法。
卷积神经网络也有全连接层,但是在全连接层之前它加入了卷积层和池化层达到了减少计算参数的作用
卷积层
卷积层是卷积神经网络的重要组成部分,又被称为过滤器(Filter)。
过滤器所处理的节点矩阵的长和宽需要由人工指定,这个节点矩阵也被称为是过滤器的矩阵。RGB的节点矩阵是三维的,但是其过滤器尺寸是二维的。我们可以通过控制过滤器的深度来设置输出节点矩阵的深度。比如:如果我们希望RGB图片输出的深度也是三,我们过滤器的深度就需要是3。
这就是一个RGB图像进行过滤之后的操作,最后相应深度矩阵相乘的结果加上偏置就是对影1*1矩阵的值。
代码
import tensorflow as tf # 初始化权重矩阵,尺寸5*5,当前层深度是3,过滤器深度是16就代表有16个filter filter_weight = tf.get_variable("weight", [5, 5, 3, 16], initializer=tf.truncated_normal_initializer(stddev=0.1)) # 为16个过滤器设置偏置 biases = tf.get_variable("biases", [16], initializer=tf.constant(0.1)) # tf.nn.connv2d提供了非常方便的函数实现了卷积层的向前传播。,这个函数第一个矩阵代表当前层节点矩阵,这个矩阵是一个四维矩阵 # 后面三个维度对应节点矩阵,第一个维度对用哪一张图片,(batch批处理) conv = tf.nn.conv2d(input, filter_weight, strides=[1, 1, 1, 1], padding="SAME") # SAME代表选择0填充 # 加上偏置 bias = tf.nn.bias_add(conv, biases) # ReLU激活函数去线性化 actived_conv = tf.nn.relu(bias)
1234567891011121314151617181920卷积API
对照着demo看一下就能看懂了
池化层
首先明确一点池化层也是一种过滤器Filter。卷积层是加权求和加偏置,池化层更加简单就是在当前池化的size下选择最大值(max pooling)或者平均值(average pooling)
假如这是一张RGB图片,我们在三个维度的每一个维度都选择出最大值,其实也就代表着我们选择了分辨能力最大的像素点。很好理解。
代码
#池化层 pool=tf.nn.max_pool(actived_conv,ksize=[1,3,3,1],strides=[1,2,2,1],padding="SAME") 123
参数解释:
actived_conv:卷积层计算好的参数
ksize:池化层窗口大小
strides:步长
全连接层
全连接层是卷积神经网络的最后一层,可以参考文章手写数字识别
author: specyue@mail.ustc.edu.cn 欢迎交流
github:https://github.com/zhangyuespec/AI
网址:卷积神经网络 https://www.yuejiaxmz.com/news/view/414637
相关内容
基于图卷积神经网络的推荐模型优化神经网络调参总结
对循环神经网络(RNN)中time step的理解
详解神经网络各层的结构与功能
AI = 神经网络?这8个技术就不是!
详解卷网络(CNN)在语音识别中的应用
深度神经网络训练的必知技巧
基于神经网络的智能虚拟助手研究
Matlab代码实践——BP神经网络
训练神经网络的五大算法