in utils.py [0:0]
def smart_res_block(
inp,
weights,
reuse,
scope,
downsample=True,
adaptive=True,
stop_batch=False,
upsample=False,
label=None,
act=tf.nn.leaky_relu,
dropout=False,
train=False,
**kwargs):
gn1 = weights[scope + '_res_c1']
gn2 = weights[scope + '_res_c2']
c1 = smart_conv_block(
inp,
weights,
reuse,
scope + '_res_c1',
use_stride=False,
activation=None,
extra_bias=True,
label=label,
**kwargs)
if dropout:
c1 = tf.layers.dropout(c1, rate=0.5, training=train)
c1 = act(c1)
c2 = smart_conv_block(
c1,
weights,
reuse,
scope + '_res_c2',
use_stride=False,
activation=None,
use_scale=True,
extra_bias=True,
label=label,
**kwargs)
if adaptive:
c_bypass = smart_conv_block(
inp,
weights,
reuse,
scope +
'_res_adaptive',
use_stride=False,
activation=None,
**kwargs)
else:
c_bypass = inp
res = c2 + c_bypass
if upsample:
res_shape = tf.shape(res)
res_shape_list = res.get_shape()
res = tf.image.resize_nearest_neighbor(
res, [2 * res_shape_list[1], 2 * res_shape_list[2]])
elif downsample:
res = tf.nn.avg_pool(res, (1, 2, 2, 1), (1, 2, 2, 1), 'VALID')
res = act(res)
return res