def var_dropout(observed, x, n, net_size, n_particles, is_training):
with zs.BayesianNet(observed=observed) as model:
h = x
normalizer_params = {'is_training': is_training,
'updates_collections': None}
for i, [n_in, n_out] in enumerate(zip(net_size[:-1], net_size[1:])):
eps_mean = tf.ones([n, n_in])
eps = zs.Normal(
'layer' + str(i) + '/eps', eps_mean, std=1.,
n_samples=n_particles, group_ndims=1)
h = layers.fully_connected(
h * eps, n_out, normalizer_fn=layers.batch_norm,
normalizer_params=normalizer_params)
if i < len(net_size) - 2:
h = tf.nn.relu(h)
y = zs.OnehotCategorical('y', h)
return model, h
评论列表
文章目录