def conv_encoder_32_large(inputs, z_dim, nonlinearity=None, bn=True, kernel_initializer=None, kernel_regularizer=None, is_training=False, counters={}): name = get_name("conv_encoder_32_large", counters) print("construct", name, "...") with tf.variable_scope(name): with arg_scope([conv2d, dense], nonlinearity=nonlinearity, bn=bn, kernel_initializer=kernel_initializer, kernel_regularizer=kernel_regularizer, is_training=is_training, counters=counters): outputs = inputs outputs = conv2d(outputs, 32, 1, 1, "SAME") outputs = conv2d(outputs, 32, 1, 1, "SAME") outputs = conv2d(outputs, 64, 4, 2, "SAME") outputs = conv2d(outputs, 128, 4, 2, "SAME") outputs = conv2d(outputs, 256, 4, 2, "SAME") outputs = conv2d(outputs, 512, 4, 1, "VALID") outputs = tf.reshape(outputs, [-1, 512]) z_mu = dense(outputs, z_dim, nonlinearity=None, bn=False) z_log_sigma_sq = dense(outputs, z_dim, nonlinearity=None, bn=False) return z_mu, z_log_sigma_sq
def aggregator(r, num_c, z_dim, method=tf.reduce_mean, nonlinearity=None, bn=True, kernel_initializer=None, kernel_regularizer=None, is_training=False, counters={}): name = get_name("aggregator", counters) print("construct", name, "...") with tf.variable_scope(name): with arg_scope([dense], nonlinearity=nonlinearity, bn=bn, kernel_initializer=kernel_initializer, kernel_regularizer=kernel_regularizer, is_training=is_training, counters=counters): r_pr = method(r[:num_c], axis=0, keepdims=True) r = method(r, axis=0, keepdims=True) r = tf.concat([r_pr, r], axis=0) size = 256 r = dense(r, size) r = dense(r, size) r = dense(r, size) z_mu = dense(r, z_dim, nonlinearity=None, bn=False) z_log_sigma_sq = dense(r, z_dim, nonlinearity=None, bn=False) return z_mu[:1], z_log_sigma_sq[:1], z_mu[1:], z_log_sigma_sq[1:]
def conditional_decoder(x, z, nonlinearity=None, bn=True, kernel_initializer=None, kernel_regularizer=None, is_training=False, counters={}): name = get_name("conditional_decoder", counters) print("construct", name, "...") with tf.variable_scope(name): with arg_scope([dense], nonlinearity=nonlinearity, bn=bn, kernel_initializer=kernel_initializer, kernel_regularizer=kernel_regularizer, is_training=is_training): size = 256 batch_size = tf.shape(x)[0] x = tf.tile(x, tf.stack([1, int_shape(z)[1]])) z = tf.tile(z, tf.stack([batch_size, 1])) # xz = x + z * tf.get_variable(name="coeff", shape=(), dtype=tf.float32, initializer=tf.constant_initializer(2.0)) xz = x a = dense(xz, size, nonlinearity=None) + dense( z, size, nonlinearity=None) outputs = tf.nn.tanh(a) * tf.sigmoid(a) for k in range(4): a = dense(outputs, size, nonlinearity=None) + dense( z, size, nonlinearity=None) outputs = tf.nn.tanh(a) * tf.sigmoid(a) outputs = dense(outputs, 1, nonlinearity=None, bn=False) outputs = tf.reshape(outputs, shape=(batch_size, )) return outputs
def fc_encoder(X, y, r_dim, nonlinearity=None, bn=True, kernel_initializer=None, kernel_regularizer=None, is_training=False, counters={}): inputs = tf.concat([X, y[:, None]], axis=1) name = get_name("fc_encoder", counters) print("construct", name, "...") with tf.variable_scope(name): with arg_scope([dense], nonlinearity=nonlinearity, bn=bn, kernel_initializer=kernel_initializer, kernel_regularizer=kernel_regularizer, is_training=is_training, counters=counters): size = 256 outputs = dense(inputs, size) outputs = nonlinearity( dense(outputs, size, nonlinearity=None) + dense(inputs, size, nonlinearity=None)) inputs = outputs outputs = dense(outputs, size) outputs = nonlinearity( dense(outputs, size, nonlinearity=None) + dense(inputs, size, nonlinearity=None)) outputs = dense(outputs, size) outputs = dense(outputs, r_dim, nonlinearity=None, bn=False) return outputs
def conv_decoder_32_large(inputs, output_features=False, nonlinearity=None, bn=True, kernel_initializer=None, kernel_regularizer=None, is_training=False, counters={}): name = get_name("conv_decoder_32_large", counters) print("construct", name, "...") with tf.variable_scope(name): with arg_scope([deconv2d, dense], nonlinearity=nonlinearity, bn=bn, kernel_initializer=kernel_initializer, kernel_regularizer=kernel_regularizer, is_training=is_training, counters=counters): outputs = dense(inputs, 512) outputs = tf.reshape(outputs, [-1, 1, 1, 512]) outputs = deconv2d(outputs, 256, 4, 1, "VALID") outputs = deconv2d(outputs, 128, 4, 2, "SAME") outputs = deconv2d(outputs, 64, 4, 2, "SAME") outputs = deconv2d(outputs, 32, 4, 2, "SAME") if output_features: return outputs outputs = deconv2d(outputs, 3, 1, 1, "SAME", nonlinearity=tf.sigmoid, bn=False) outputs = 2. * outputs - 1. return outputs
def conv_decoder_28_binary(inputs, nonlinearity=None, bn=True, kernel_initializer=None, kernel_regularizer=None, is_training=False, counters={}): name = get_name("conv_decoder_28_binary", counters) print("construct", name, "...") with tf.variable_scope(name): with arg_scope([deconv2d, dense], nonlinearity=nonlinearity, bn=bn, kernel_initializer=kernel_initializer, kernel_regularizer=kernel_regularizer, is_training=is_training, counters=counters): outputs = dense(inputs, 128) outputs = tf.reshape(outputs, [-1, 1, 1, 128]) outputs = deconv2d(outputs, 128, 4, 1, "VALID") outputs = deconv2d(outputs, 64, 4, 1, "VALID") outputs = deconv2d(outputs, 64, 4, 2, "SAME") outputs = deconv2d(outputs, 32, 4, 2, "SAME") outputs = deconv2d(outputs, 1, 1, 1, "SAME", nonlinearity=None, bn=False) return outputs
def mlp(X, scope="mlp", params=None, nonlinearity=None, bn=True, kernel_initializer=None, kernel_regularizer=None, is_training=False, counters={}): name = get_name(scope, counters) print("construct", name, "...") if params is not None: params.reverse() with tf.variable_scope(name): default_args = { "nonlinearity": nonlinearity, "bn": bn, "kernel_initializer": kernel_initializer, "kernel_regularizer": kernel_regularizer, "is_training": is_training, "counters": counters, } with arg_scope([dense], **default_args): batch_size = tf.shape(X)[0] size = 256 outputs = X for k in range(4): if params is not None: outputs = dense(outputs, size, W=params.pop(), b=params.pop()) else: outputs = dense(outputs, size) if params is not None: outputs = dense(outputs, 1, nonlinearity=None, W=params.pop(), b=params.pop()) else: outputs = dense(outputs, 1, nonlinearity=None) outputs = tf.reshape(outputs, shape=(batch_size, )) return outputs