Skip to content

Instantly share code, notes, and snippets.

Eric Jang ericjang

Block or report user

Report or block ericjang

Hide content and notifications from this user.

Learn more about blocking users

Contact Support about this user’s behavior.

Learn more about reporting abuse

Report abuse
View GitHub Profile
ericjang /
Created Mar 2, 2018
numerically stable version of log-variance, in TF
def _reduce_logmeanexp(x, axis, epsilon):
"""Numerically-stable (?) implementation of log-mean-exp.
x: The tensor to reduce. Should have numeric type.
axis: The dimensions to reduce. If `None` (the default),
reduces all dimensions. Must be in the range
`[-rank(input_tensor), rank(input_tensor)]`.
epsilon: Floating point scalar to avoid log-underflow.
for i in range(num_bijectors):
hidden_layers=[512, 512])))
bijectors.append(tfb.Permute(permutation=[1, 0]))
flow_bijector = tfb.Chain(list(reversed(bijectors[:-1])))
class BatchNorm(tfb.Bijector):
def __init__(self, eps=1e-5, decay=0.95, validate_args=False, name="batch_norm"):
super(BatchNorm, self).__init__(
event_ndims=1, validate_args=validate_args, name=name)
self._vars_created = False
self.eps = eps
self.decay = decay
def _create_vars(self, x):
n = x.get_shape().as_list()[1]
loss = -tf.reduce_mean(dist.log_prob(x_samples))
train_op = tf.train.AdamOptimizer(1e-3).minimize(loss)
sess = tf.InteractiveSession()
NUM_STEPS = int(1e5)
global_step = []
np_losses = []
for i in range(NUM_STEPS):
_, np_loss =[train_op, loss])
if i % 1000 == 0:
d, r = 2, 2
DTYPE = tf.float32
bijectors = []
num_layers = 6
for i in range(num_layers):
with tf.variable_scope('bijector_%d' % i):
V = tf.get_variable('V', [d, r], dtype=DTYPE) # factor loading
shift = tf.get_variable('shift', [d], dtype=DTYPE) # affine shift
L = tf.get_variable('L', [d * (d + 1) / 2],
dtype=DTYPE) # lower triangular
# quite easy to interpret - multiplying by alpha causes a contraction in volume.
class LeakyReLU(tfb.Bijector):
def __init__(self, alpha=0.5, validate_args=False, name="leaky_relu"):
super(LeakyReLU, self).__init__(
event_ndims=1, validate_args=validate_args, name=name)
self.alpha = alpha
def _forward(self, x):
return tf.where(tf.greater_equal(x, 0), x, self.alpha * x)
import numpy as np
import matplotlib.pyplot as plt
import tensorflow as tf
tfd = tf.contrib.distributions
tfb = tfd.bijectors
base_dist = tfd.MultivariateNormalDiag(loc=tf.zeros([2], tf.float32))
x2_dist = tfd.Normal(loc=0., scale=4.)
x2_samples = x2_dist.sample(batch_size)
x1 = tfd.Normal(loc=.25 * tf.square(x2_samples),
scale=tf.ones(batch_size, dtype=tf.float32))
x1_samples = x1.sample()
x_samples = tf.stack([x1_samples, x2_samples], axis=1)
ericjang /
Last active Dec 26, 2017
Generate 2D points randomly distributed on a flat text mesh in Blender.
# run this from a blender interpreter
# First, create text object, then <SPACE> convert it from Text to a Mesh object. Select it.
import bpy_extras.mesh_utils
import pickle
obj = bpy.context.object # get actively selected object
me = # get mesh
me.calc_tessface() # recalc tessfaces
points = bpy_extras.mesh_utils.face_random_points(10, me.tessfaces)
You can’t perform that action at this time.