def px_graph(z, y): reuse = len(tf.get_collection(tf.GraphKeys.VARIABLES, scope='px')) > 0 # -- p(z) with tf.variable_scope('pz'): zm = Dense(y, 64, 'zm', reuse=reuse) zv = Dense(y, 64, 'zv', tf.nn.softplus, reuse=reuse) # -- p(x) with tf.variable_scope('px'): h1 = Dense(z, 512, 'layer1', tf.nn.relu, reuse=reuse) h2 = Dense(h1, 512, 'layer2', tf.nn.relu, reuse=reuse) px_logit = Dense(h2, 784, 'logit', reuse=reuse) return zm, zv, px_logit tf.reset_default_graph() x = Placeholder((None, 784), 'x') # binarize data and create a y "placeholder" with tf.name_scope('x_binarized'): xb = tf.cast(tf.greater(x, tf.random_uniform(tf.shape(x), 0, 1)), tf.float32) with tf.name_scope('y_'): y_ = tf.fill(tf.pack([tf.shape(x)[0], k]), 0.0) # propose distribution over y qy_logit, qy = qy_graph(xb, k) # for each proposed y, infer z and reconstruct x z, zm, zv, zm_prior, zv_prior, px_logit = [[None] * k for i in xrange(6)] for i in xrange(k): with tf.name_scope('graphs/hot_at{:d}'.format(i)):
zm = Dense(y, 64, 'zm', reuse=reuse) zv = Dense(y, 64, 'zv', tf.nn.softplus, reuse=reuse) # -- p(x) with tf.variable_scope('px'): with tf.name_scope('layer1'): zy = zm + tf.sqrt(zv) * z h1 = custom_layer(zy, reuse) h2 = Dense(h1, 512, 'layer2', tf.nn.relu, reuse=reuse) h3 = Dense(h2, 512, 'layer3', tf.nn.relu, reuse=reuse) h4 = Dense(h3, 512, 'layer4', tf.nn.relu, reuse=reuse) px_logit = Dense(h2, 784, 'logit', reuse=reuse) return px_logit tf.reset_default_graph() x = Placeholder((None, 784), name='x') # binarize data and create a y "placeholder" with tf.name_scope('x_binarized'): xb = tf.cast(tf.greater(x, tf.random_uniform(tf.shape(x), 0, 1)), tf.float32) with tf.name_scope('y_'): y_ = tf.fill(tf.stack([tf.shape(x)[0], 10]), 0.0) # propose distribution over y qy_logit, qy = qy_graph(xb) # for each proposed y, infer z and reconstruct x z, zm, zv, px_logit = [[None] * 10 for i in xrange(4)] for i in xrange(10): with tf.name_scope('graphs/hot_at{:d}'.format(i)):