我想构建一个变分自编码器,其中一个样本是一个N*M矩阵,每一行有M个类别。本质上,一个样本是一组分类数据,其中只能选择一个类别 – 一组独热向量列表。
目前,我已经为这种类型的数据构建了一个工作的自编码器 – 我在最后一个维度上使用了softmax来创建这个约束,并且它有效(重构交叉熵低)。
现在,我想使用tf.distributions来创建一个变分自编码器。我在想哪种分布会合适。
回答:
tf.contrib.distributions.Categorical能满足你的需求吗?样本应来自(0到n-1),其中n代表类别。
示例:
# logits的形状为[N, M],其中M是类别的数量
dist = tf.contrib.distributions.Categorical(logits=logits)
# 采样20次。应返回形状为[20, N]的输出。
samples = dist.sample(20)
# depth是类别的数量。
one_hots = tf.one_hot(samples, depth=M)