TensorFlow卷积神经网络
1、反向传播
几个人站成一排第一个人看一幅画(输入数据),描述给第二个人(隐层)……依此类推,到最后一个人(输出)的时候,画出来的画肯定不能看了(误差较大)。
反向传播就是,把画拿给最后一个人看(求取误差),然后最后一个人就会告诉前面的人下次描述时需要注意哪里(权值修正)
2、什么是卷积
1.已有运算:加减乘除,幂运算指数运算
卷积:卷积是一种运算
2.卷积运算
卷积操作是使用一个二维的卷积核在一个批处理的图片上进行不断扫描。具体操作是将一个卷积核在每张图片上按照一个合适的尺寸在每个通道上面进行扫描
3.卷积过程
如下图所示,用一个33的卷积核在55的图像上做卷积的过程
4.在三通道图像上的卷积过程
如下:
5.卷积函数
3、卷积函数 tf.nn.conv2d
参数一:input
input就是需要做卷积的图像(这里要求用Tensor来表示输入图像,并且Tensor(一个4维的Tensor,要求类型为float32)的shape为[batch, in_height, in_width, in_channels]具体含义[训练时一个batch图像的数量,图像高度,图像宽度, 图像通道数])
参数二:filter
filter就是卷积核(这里要求用Tensor来表示卷积核,并且Tensor(一个4维的Tensor,要求类型与input相同)的shape为[filter_height, filter_width, in_channels, out_channels]具体含义[卷积核高度,卷积核宽度,图像通道数,卷积核个数],这里的图片通道数也就input中的图像通道数,二者相同。)
参数三:strides
strides就是卷积操作时在图像每一维的步长,strides是一个长度为4的一维向量
参数四:padding
padding是一个string类型的变量,只能是 “SAME” 或者 “VALID”,决定了两种不同的卷积方式。下面我们来介绍 “SAME” 和 “VALID” 的卷积方式,如下图我们使用单通道的图像,图像大小为5 * 5,卷积核用3 * 3
方式一:VALID
具体卷积操作如下图,我们考虑卷积核中心点(这里卷积核大小是3*3,)走过的位置,
如图所示,红色#表示卷积核中心点在图像上的滑动过程。最后得到3 * 3的图像大小
方式二:SAME
对于上图,图像的每一个点都作为卷积核的中心。最后得到5 * 5的结果,如下图:
通俗的来说:首先在原图外层补一圈0,将原图的第一点作为卷积核中心,若一圈0不够,继续补一圈0
参数五:use_cudnn_on_gpu
参数六:data_format
data_format就是input的Tensor格式,一般默认就可以了。都采用NHWC
NHWC:[batch, height, width, channels]
参数七:name
name: A name for the operation (optional).
就是用以指定该操作的name,仅此而已
4、卷积构造方法
1.激活函数
在神经网络中,激活函数的作用是能够给神经网络加入一些非线性因素,使得神经网络可以更好地解决较为复杂的问题
在神经网络中,我们有很多的非线性函数来作为激活函数&#x