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)
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))
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)
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