- 直接使用tensorflow原始的API实现卷积层
with tf.variable_scope(scope_name):
weights = tf.get_variable("weight",...)
biases = tf.get_variable("bias",...)
conv = tf.nn.conv2d
relu = tf.nn..relu(tf.nn.bias_add(conv,biases))
然而,在复现经典网络架构的时候,比如Googlenet这种动不动几十层上百层的网络,这么写的话,代码量会很大,冗余。为此,tensorflow提供了tensorflow-slim实现卷积层。通过tensorflow-slim可以在一行中实现一个卷积层的前向传播算法。其中,slim.conv2d函数的3个参数是必填的:
第一个参数是输入节点矩阵
第二个参数是当前卷积层过滤器的深度
第三个参数是过滤器的尺寸
另外,可选的参数有过滤器移动的步长、是否使用全0填充,激活函数的选择以及变量的命名空间等。
如:
slim = tf.contrib.slim
net = slim.conv2d(input, 32, [3,3])
另外,slim.arg_scope函数可用于设置默认的参数取值。slim.arg_scope函数的第一个参数是一个函数列表,在这个列表中的函数将使用默认的参数取值。比如通过下面的定义,调用slim.conv2d(net, 320, [1,1]) 函数时会自动加上stride = 1 和padding = ‘SAME’ 的参数。如果在函数调用时指定了stride, 那么这里的默认值就不再使用。
with slim.arg_scope([slim.conv2d, slim.max_pool2d, ],stride = 1, padding = ‘SAME’):
net = slim.conv2d(input, 32, [3,3])