1.卷积神经网络
从技术角度看,卷积神经网络是一种至少包含一个层(tf.nn.conv2d)的神经网络,该层的功能是计算其输入f与
一组可配置的卷积核g的卷积,以生成该层的输出。
--卷积--
卷积的目的是将卷积核(滤波器)应用到某个张量的所有点上,并通过将卷积核在输入张量上滑动而生成经过滤波处理的张量。
卷积的表示:
(f*g)(t)
其中f(t)为输入矩阵,g(t)为卷积核.
-*-简单的CNN架构
简单的CNN架构通常包含卷积层(tf.nn.conv2d)、非线性变换层(tf.nn.relu)、池化层(tf.nn.max_pool)、全连接层(tf.nn.matmul)。
2.卷积
(1)卷积
卷积运算对两个输入张量(输入与卷积核)进行卷积(对应分量相乘),并输出一个代表来自每个输入的信息的张量。
通常,TensorFlow中的卷积运算是通过tf.nn.conv2d完成的。
(2)卷积核
卷积核(kernel),也称为权值、滤波器、卷积矩阵或模板。
在TensorFlow中,这个参数被命名为filter,相应的权值可以从训练中学习得到。
*一幅RGB图像拥有3个代表了秩1张量[red, gree, blue]的通道。
卷积运算输出:
conv2d = tf.nn.conv2d(input_batch, kernel, strides=[1,1,1,1], padding='SAME')
sess.run(conv2d)
-*-该输出是另一个与输入input_batch同秩的张量,但维数与卷积核相同。
可将卷积运算tf.nn.conv2d视为图像(用input_batch表示)和卷积核张量kernel的组合,两个张量的卷积会生成一幅特征图(feature map)。
(3)跨度(strides)
在计算机视觉中,卷积的价值体现在对输入降维的能力。
如果图像具有较高的维度,则意味着神经网络扫描所有图像以判断各像素的重要性所需的时间呈指数级增长。
利用卷积运算对图像降维是通过修改卷积核的strides(跨度)参数实现的。
当卷积运算用卷积核遍历输入时,它利用这个跨度参数来修改遍历输入的方式。
-*-strides参数的格式与输入向量相同,即(image_batch_size, image_height_stride, image_width_stride, image_channels_stride)。
注:第一个参数和最后一个参数一般很少修改,一般修改中间的跨度参数。
(4)边界填充
Tensorlow用0进行边界填充。
tf.nn.conv2d的零填充数量或错误状态是由参数padding控制的,它的取值可以是SAME或VALID。
*SAME:卷积输出和输入的尺寸相同,跨越图像时不考虑滤波器尺寸。选用该设置时,缺失的像素将用0填充。
*VALID:跨越图像时,需要考虑滤波器尺寸。
注:在大多数比较简单的情形下,使用SAME。
(5)数据格式
tf.nn.conv2d还有另外一个参数data_format。
data_format:可取值为"NHWC"或"NCHW",默认值为"NHWC",用于指定输入和输出数据的格式.
*取"NHWC"时,数据的存储顺序为[batch, in_height, in_width, in_channels];
*取"NCHW"时,数据的存储顺序为[batch, in_channels, in_height, in_width].
注:N——批数据中的张量数目,即batch_size
H——每个批数据中张量的高度
W——每个批数据中张量的宽度
C——每个批数据中张量的通道数
3.卷积核
在计算机视觉中,卷积核(滤波器)常用于识别数字图像中的重要属性。
当某些滤波器感兴趣的特征在图像中存在时,滤波器会使用特定模式突出这些特征。
like:将除红色外的所有颜色值减小,则可得到一个红色滤波器的卷积核;
在这种情形下,红色值将保持不变,而其他任何匹配的颜色值将被减小。