TensorFlow 入门 第一课--基本函数学习(2):tf.nn.conv2d 、tf.contrib.layers.flatten、tf.nn.max_pool 详解

Tensorflow 提供了一些内置的API实现了CNN网络结构中的卷积,池化,全连接网络等运算操作。

  • tf.nn.conv2d(input,filter, strides, padding, data_format=’NHWC’) 
    完成CNN卷积运算,其中:

    input: 4-D 的Tensor, 每个dimension的意思由data_format指定,默认是[batch, Height, Width, Channel]。batch表示有多少个这样的sample。Height/Width是图片的高度/宽度,Channel决定了图片是灰度图还是彩色图。若是灰度图就只有一个 [Height, Width]的2维矩阵,若是彩色图则有3个这样的矩阵,每个矩阵分别表示像素R/G/B的值。

    filter: 有时也称之为kernel。这个filter也是一个4-D的Tensor,每个dimension分别表示 [filter_height, filter_width, in_channels, out_channels]。通常地称[filter_height, filter_width, in_channels]为单个filter的size,而且filter_height, filter_width一般为奇数并且相等。in_channel必须跟input参数中的Channel相等,卷积运算时,从input中取一个大小为[filter_height, filter_width, in_channels]的slice window跟 单个filter做卷积运算。out_channels表示有多少个这样的filter。因为filter一般用于特征的抽取,所以out_channels决定了卷积层最终输出的channel(depth)。

    strides: 4-D的Tensor, 表示在对input做卷积运算时,在每个dimension上的步长。跟input参数一样,每个dimension的顺序由data_format决定。通常地在Height, Width上步长为1或者2,而batch, Channel的步长设置为1。

    padding: “SAME” 或者 “Valid”。Same表示卷积层的输出的height/width 跟input层的height/width相同。Valid表示no padding则由公式(height−filter_heigth)/stride_height+1 (width也是一样)。

    更多细节请看这里 Reference


  • tf.nn.max_pool(value, ksize = [1,f,f,1], strides = [1,s,s,1], padding = ‘SAME’, data_format=’NHWC’) 
    池化运算。 
    value: 4-D的tensor, 一般地就是上面conv2d的输出,具体每个dimension的意义跟conv2d的input参数一样 
    ksize: 定义slice window的大小,它会在输入参数中选择跟slice window想同大小的window,并取其中的最大值。

  • tf.contrib.layers.flatten(P) 
    对于输入的P,将每一个example展开为1-D的Tensor, 但是依然保留batch-size。它返回一个[batch_size, k]的Tensor。通常在CNN的最后一步连接到Fully Connected 的网络之前会将其展开,例如CNN的conv层输出的tensor的shape为[batch_size, height, width, channel], 刚展开会就是[batch_size, height * width * channel]。
  • tf.argmax(input , axis =None, name = None, dimension = None )
    此函数是对矩阵按行或列计算最大值
    参数:
    • input:输入Tensor
    • axis:0表示按列,1表示按行
    • name:名称
    • dimension:和axis功能一样,默认axis取值优先。新加的字段
    返回:Tensor  一般是行或列的最大值下标向量

你可能感兴趣的:(python,TensorFlow)