예제 #1
0
 def _gumbel_softmax(self, logits, tau=0.67, eps=1e-10):
     u = layers.uniform_random_batch_size_like(
         logits, shape=[-1, self.latent_type_size], min=0.0, max=1.0)
     u.stop_gradient = True
     gumbel = 0.0 - layers.log(eps - layers.log(u + eps))
     y = logits + gumbel
     return layers.softmax(y / tau)
예제 #2
0
 def test_uniform_random_batch_size_like(self):
     program = Program()
     with program_guard(program):
         input = layers.data(name="input", shape=[13, 11], dtype='float32')
         out = layers.uniform_random_batch_size_like(input, [-1, 11])
         self.assertIsNotNone(out)
     print(str(program))
예제 #3
0
def gumbel_softmax(logits, tau=0.67, eps=1e-10):
    """Gumbel softmax."""
    u = layers.uniform_random_batch_size_like(
        logits, shape=[-1, logits.shape[1]], min=0.0, max=1.0)
    u.stop_gradient = True
    gumbel = 0.0 - layers.log(eps - layers.log(u + eps))
    y = logits + gumbel
    return layers.softmax(y / tau)
예제 #4
0
def dropout2d(input, prob, is_train=False):
    if not is_train:
        return input
    channels = input.shape[1]
    keep_prob = 1.0 - prob
    random_tensor = keep_prob + layers.uniform_random_batch_size_like(
        input, [-1, channels, 1, 1], min=0., max=1.)
    binary_tensor = layers.floor(random_tensor)
    output = input / keep_prob * binary_tensor
    return output