def conv2d(x,
num_outputs,
kernel_size,
strides,
padding='SAME',
activation=None,
bn=False,
post_bn=False,
phase=None,
scope=None,
reuse=None):
# Convert int to list
kernel_size = [kernel_size] * 2 if isinstance(kernel_size, int) else kernel_size
strides = [strides] * 2 if isinstance(strides, int) else strides
# Convert list to valid list
kernel_size = list(kernel_size) + [x.get_shape().dims[-1], num_outputs]
strides = [1] + list(strides) + [1]
# Conv operation
with tf.variable_scope(scope, 'conv2d', reuse=reuse):
kernel = tf.get_variable('weights', kernel_size,
initializer=variance_scaling_initializer())
biases = tf.get_variable('biases', [num_outputs],
initializer=tf.zeros_initializer)
output = tf.nn.conv2d(x, kernel, strides, padding, name='conv2d')
output += biases
if bn: output = batch_norm(output, phase, scope='bn')
if activation: output = activation(output)
if post_bn: output = batch_norm(output, phase, scope='post_bn')
return output
评论列表
文章目录