def _build_residual_layer(self, name, inputs, k, rfsize, blocksize=2, stride=1): # rfsize: receptive field size
layer = dict()
with tf.variable_scope(name):
with tf.variable_scope('layer1'):
layer['filters1'] = tf.get_variable('filters1', [rfsize, rfsize, get_shape(inputs)[-1], k])
layer['conv1'] = tf.nn.conv2d(tf.pad(inputs, [[0, 0], [1, 1], [1, 1], [0, 0]], 'REFLECT'), layer['filters1'], strides=[1, stride, stride, 1], padding='VALID')
layer['bn1'] = inst_norm(layer['conv1'])
layer['fmap1'] = tf.nn.relu(layer['bn1'])
with tf.variable_scope('layer2'):
layer['filters2'] = tf.get_variable('filters2', [rfsize, rfsize, get_shape(inputs)[-1], k])
layer['conv2'] = tf.nn.conv2d(tf.pad(layer['fmap1'], [[0, 0], [1, 1], [1, 1], [0, 0]], 'REFLECT'), layer['filters2'], strides=[1, stride, stride, 1], padding='VALID')
layer['bn2'] = inst_norm(layer['conv2'])
# No ReLu here (following http://torch.ch/blog/2016/02/04/resnets.html, as indicated by the authors)
layer['fmap2'] = layer['bn2'] + inputs
return layer
评论列表
文章目录