Ансамблевая сеть с категориальным распределением в тензорном потоке - PullRequest
0 голосов
/ 20 июня 2019

У меня есть n сети, каждая с одинаковым входом / выходом.Я хочу случайным образом выбрать один из выходов в соответствии с категориальным распределением. Tfp.Categorical выводит только целые числа, и я пытался сделать что-то вроде

act_dist = tfp.distributions.Categorical(logits=act_logits) # act_logits are all the same, so the distribution is uniform
rand_out = act_dist.sample()
x = nn_out1 * tf.cast(rand_out == 0., dtype=tf.float32) + ... # for all my n networks

Но rand_out == 0. всегда ложно, как и другие условия.

Любойидея для достижения того, что мне нужно?

Ответы [ 2 ]

1 голос
/ 22 июня 2019

Вы также можете взглянуть на MixtureSameFamily, которая собирает вас под одеялом.

nn_out1 = tf.expand_dims(nn_out1, axis=2)
...
outs = tf.concat([nn_out1, nn_nout2, ...], axis=2)
probs = tf.tile(tf.reduce_mean(tf.ones_like(nn_out1), axis=1, keepdims=True) / n, [1, n]) # trick to have ones of shape [None,1]
dist = tfp.distributions.MixtureSameFamily(
        mixture_distribution=tfp.distributions.Categorical(probs=probs),
        components_distribution=tfp.distributions.Deterministic(loc=outs))
x = dist.sample()
0 голосов
/ 21 июня 2019

Я думаю, вам нужно использовать tf.equal, потому что Tensor == 0 всегда False.

Отдельно, возможно, вы захотите использовать OneHotCategorical.Для обучения вы также можете попробовать использовать RelaxedOneHotCategorical.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...