从TensorFlow
0.8开始,现在有一个原生的一站式操作,
tf.one_hot可以将一组稀疏标签转换为密集的一站式表示形式。这是的补充
tf.nn.sparse_softmax_cross_entropy_with_logits,在某些情况下,您可以使您直接在稀疏标签上计算交叉熵,而不必将其转换为单热点。
以前的答案,以防您想采用旧方法: @Salvador的答案是正确的-
以前(过去)没有本机操作。但是,您可以使用稀疏到密集运算符在tensorflow中本地执行此操作,而不是在numpy中执行此操作:
num_labels = 10# label_batch is a tensor of numeric labels to process# 0 <= label < num_labelssparse_labels = tf.reshape(label_batch, [-1, 1])derived_size = tf.shape(label_batch)[0]indices = tf.reshape(tf.range(0, derived_size, 1), [-1, 1])concated = tf.concat(1, [indices, sparse_labels])outshape = tf.pack([derived_size, num_labels])labels = tf.sparse_to_dense(concated, outshape, 1.0, 0.0)
输出,labels,是batch_size x num_labels的单矩阵。
还要注意的是,从2016年2月12日开始(我认为最终将成为0.7版本的一部分),TensorFlow还提供了
tf.nn.sparse_softmax_cross_entropy_with_logitsop,在某些情况下可以让您进行训练而无需转换为单编码。
编辑添加:最后,您可能需要显式设置标签的形状。形状推断无法识别num_labels组件的大小。如果您不需要带有Derived_size的动态批处理大小,则可以简化此过程。
编辑于2016年2月12日,更改了以下每个注释的形状分配。



