import tensorflow as tf

                if scale > 1:
                    X = self.conv(name + '_downsample', X, filter, scale, scale, (not norm) and use_bias, "VALID", stddev)
                else:
                    X = self.conv(name + '_conf', X, filter, f_size, 1, (not norm) and use_bias, "VALID", stddev)
                if norm == 'I':
                    X = tf.contrib.layers.instance_norm(X, scope=scope, reuse=reuse)
                elif norm == 'B':
                    X = tf.layers.batch_normalization(X, reuse=reuse, training=is_train, name=name)
                elif norm == 'G':
                    X = tf.contrib.layers.group_norm(X, groups=16, scope=scope, reuse=reuse)

                if dropout > 0.0:
                    X = tf.layers.dropout(X, dropout, training=is_train)
                if slope < 1.0:
                    X = tf.nn.leaky_relu(X, slope) if slope > 0.0 else tf.nn.relu(X)
                return X

        def decoder_conf(name, X, filter, f_size, scale, norm, reuse, is_train, dropout=0.0, stddev=-1.0, slope=0.00,
