in utils.py [0:0]
def smart_convt_block(
inp,
weights,
reuse,
scope,
output_dim,
upsample=True,
label=None):
weights = weights[scope]
cweight = weights['c']
bweight = weights['b']
scale = weights['g']
bias = weights['gb']
class_bias = weights['cb']
if upsample:
stride = [1, 2, 2, 1]
else:
stride = [1, 1, 1, 1]
if label is not None:
bias_batch = tf.matmul(label, bias)
batch = tf.shape(bias_batch)[0]
dim = tf.shape(bias_batch)[1]
bias = tf.reshape(bias_batch, (batch, 1, 1, dim))
inp = inp + bias
shape = cweight.get_shape()
conv_output = tf.nn.conv2d_transpose(inp,
cweight,
[tf.shape(inp)[0],
output_dim,
output_dim,
cweight.get_shape().as_list()[-2]],
stride,
'SAME')
if label is not None:
scale_batch = tf.matmul(label, scale) + class_bias
batch = tf.shape(scale_batch)[0]
dim = tf.shape(scale_batch)[1]
scale = tf.reshape(scale_batch, (batch, 1, 1, dim))
conv_output = conv_output * scale
conv_output = tf.nn.leaky_relu(conv_output)
return conv_output