CNN API
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.nn.relu(Z1)
- tf.sigmoid
- tf.tanh
随机数生成相关API
tf.random_uniform(shape, minval=0, maxval=None, dtype=tf.float32, seed=None, name=None)
生成介于[minval, maxval)的服从均匀分布的随机数,比如:
tf.random_uniform(shape=(3, 4), minval = 0, maxval=1)tf.random_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None)
生成服从正态分布的随机数
Loss Function for Classification
tf.nn.softmax_cross_entropy_with_logits(labels= y , logits=
z^ )tf.nn.sigmoid_cross_entropy_with_logits(labels= y , logits=
z^ )
compute Loss of all training examples with this formula:
loss = y * -log(sigmoid( z^ )) + (1 - y) * -log(1 - sigmoid( z^ ))