一:tf中的卷积层:
#通过tf.get_variable的方式创建过滤层的权重变量和偏置项变量。是一个四维矩阵,前面两个维度代表了 #过滤器的尺寸,第三个维度代表当前层的深度,第四个代表过滤器的深度 filter_weight = tf.get_variable(name='weight', shape=[5,5,3,16], initializer=tf.truncated_normal_initializer(stddev=0.1)) #偏置层只需要表现深度 biases = tf.get_variable(name='biases', shape=[16], initializer=tf.constant_initializer(0.1)) #tf.nn.conv2d提供了一个函数实现卷积,第一个参数是当前层的输入,注意输入是一个四维矩阵,其第一个维度对应一个 #输入batch,表示第几张图片。 #tf.nn.conv2d第二个参数是卷积层的权重 #第三个参数是不同维度上的步长。是一个长度为四的数组,但是第一个维度和最后一个维度都必须是1.中间对应矩阵的长和宽 #最后一个参数是填充方法,字符串类型,有两个选择,‘SAME'表示添加全0填充。‘VALID'表示不添加 conv = tf.nn.conv2d(input, filter_weight, strides=[1,1,1,1], padding='SAME') #tf.nn.bias_add提供了一个函数给每一个节点加上偏置项。这里不能直接上使用加法,因为矩阵不同位置上的节点需要 #加上同样的偏置项。 bias = tf.nn.bias_add(conv, biases) #将计算结果通过relu实现去线性化 active_conv = tf.nn.relu(bias)
二:tf中的池化层:
tf中的池化层有两种,最大值池化和平均值池化。以下代码实现了最大值池化:
pool = tf.nn.max_pool(active_conv, ksize=[1,3,3,1], strides=[1,2,2,1], padding='SAME')其中ksize提供了过滤器的尺寸,strides提供了过滤器的步长信息。