def __reslayer_bottleneck(self, inputs, in_filters, out_filters, stride=1):
""" A regular resnet block """
with tf.variable_scope('sub1'):
kernel = tf.get_variable('weights', [1, 1, in_filters, out_filters / 4],
initializer=xavier_initializer(
dtype=tf.float32),
dtype=tf.float32)
conv = tf.nn.conv2d(inputs, kernel, [1, stride, stride, 1],
padding='SAME',
name='conv')
batch_norm = self.__batch_norm_wrapper(conv, decay=0.9999, shape=[0, 1, 2])
conv = tf.nn.elu(batch_norm, 'elu')
with tf.variable_scope('sub2'):
kernel = tf.get_variable('weights',
[3, 3, out_filters / 4, out_filters / 4],
initializer=xavier_initializer(
dtype=tf.float32),
dtype=tf.float32)
conv = tf.nn.conv2d(conv, kernel, [1, 1, 1, 1], padding='SAME',
name='conv1')
batch_norm = self.__batch_norm_wrapper(conv, decay=0.9999, shape=[0, 1, 2])
conv = tf.nn.elu(batch_norm, 'elu')
with tf.variable_scope('sub3'):
kernel = tf.get_variable('weights', [1, 1, out_filters / 4, out_filters],
initializer=xavier_initializer(
dtype=tf.float32),
dtype=tf.float32)
conv = tf.nn.conv2d(conv, kernel, [1, 1, 1, 1],
padding='SAME',
name='conv')
batch_norm = self.__batch_norm_wrapper(conv, decay=0.9999, shape=[0, 1, 2])
with tf.variable_scope('subadd'):
if in_filters != out_filters:
kernel = tf.get_variable('weights', [1, 1, in_filters, out_filters],
initializer=xavier_initializer(
dtype=tf.float32),
dtype=tf.float32)
inputs = tf.nn.conv2d(
inputs, kernel, [1, stride, stride, 1], padding='SAME')
batch_norm += inputs
conv = tf.nn.elu(batch_norm, 'elu')
num = np.power(2, np.floor(np.log2(out_filters) / 2))
grid = self.__put_activations_on_grid(conv, (int(num),
int(out_filters /
num)))
tf.summary.image('sub3/activations', grid, max_outputs=1)
return conv
评论列表
文章目录