一、CNN简介
一般的卷积神经网络由以下几个层组成:卷积层,池化层,非线性激活函数,全连接层。这四者构成了常见的卷积神经网络。当然,损失函数也至关重要,还有各种各样的网络的优化,使得网络准确率更高。
CNN的理论知识及推导请参照:卷积神经网络CNN模块化剖析。
二、主要函数
1、卷积 tf.nn.conv2d():
顾名思义,用于卷积,定义如下:
tf.nn.conv2d (input, filter, strides, padding, use_cudnn_on_gpu=None, data_format=None, name=None)
参数:
-
input : 输入的要做卷积的图片,要求为一个张量,shape为 [ batch, in_height, in_weight, in_channel ],其中batch为图片的数量,in_height 为图片高度,in_weight 为图片宽度,in_channel
为图片的通道数,灰度图该值为1,彩色图为3; -
filter: 卷积核,要求也是一个张量,shape为 [ filter_height, filter_weight, in_channel, out_channels ],其中 filter_height 为卷积核高度,filter_weight
为卷积核宽度,in_channel 是图像通道数 ,和 input 的 in_channel 要保持一致,out_channel
是卷积核数量; -
strides: 卷积时在图像每一维的步长,这是一个一维的向量,[ 1, strides, strides, 1],第一位和最后一位固定必须是1,第二位参数表示x方向,第三位参数表示y方向;
-
padding: string类型,值为“SAME” 和 “VALID”,表示的是卷积的形式,是否考虑边界。”SAME”是考虑边界,不足的时候用0去填充周围,”VALID”则不考虑;
-
use_cudnn_on_gpu: bool类型,是否使用cudnn加速,默认为true。
返回值:结果返回一个Tensor,这个输出,就是我们常说的feature map。
程序示例:
kernel = tf.Variable(tf.truncated_normal([3,3,384,256], dtype=tf.float32, stddev=1e-1), name='weights')
conv = tf.nn.conv2d(conv3, kernel, [1,1,1,1],padding='SAME')
2、池化 tf.nn.max_pool()