在Tensorr流程代码中将标量标记为一个热点?

时间:2017-04-21 13:09:08

标签: tensorflow

有人可以指导一下从标量转换为热点的含义吗? labels_dense.shape[0]的目的是什么,最后为什么标签一个hot.flat等于一?     def dense_to_one_hot(labels_dense, num_classes=10): """Convert class labels from scalars to one-hot vectors""" num_labels = labels_dense.shape[0] index_offset = np.arange(num_labels) * num_classes labels_one_hot = np.zeros((num_labels, num_classes)) labels_one_hot.flat[index_offset + labels_dense.ravel()] = 1 return labels_one_hot

2 个答案:

答案 0 :(得分:0)

我想您可能会发现这个答案描述了一个热门编码在机器学习中的作用: One Hot Encoding for Machine learning

答案 1 :(得分:0)

我遇到了同样的function并且写了一个更简单的人来理解。我使用的数字0到4代表5个类。

labels_dense.shape [0]的目的是什么?

它返回此示例中标签的数量为“10”。

这段代码是什么意思?

labels_one_hot.flat[index_offset + labels_dense.ravel()] = 1

将'1'置于正确的位置是正确的,如输出中所示。它只是从整个一热表示的开头计算位置。

因此,为了将数字'0'表示为单热矢量,第45个位置应为'1'。这对应于最后一个向量的第0个元素。

所以

[1. 0. 0. 0. 0.]
当我们有5个班级时,

是数字'0'的单热表示。

def onehot():

    labels_dense = numpy.array([1,2,3,4,3,4,3,2,1,0])

    print('Shape of labels_dense is ' + str(labels_dense.shape))

    index_offset = numpy.arange(10) * 5

    print('Index offset is \n' + str(index_offset))

    labels_one_hot = numpy.zeros((10, 5))

    print('index_offset + labels_dense.ravel() is\n' + str(index_offset + labels_dense.ravel()))

    labels_one_hot.flat[index_offset + labels_dense.ravel()] = 1

    print('One-hot labels are ' + str(labels_one_hot))

输出就是这个。

Shape of labels_dense is (10,)
Index offset is 
[ 0  5 10 15 20 25 30 35 40 45]
index_offset + labels_dense.ravel() is
[ 1  7 13 19 23 29 33 37 41 45]
One-hot labels are 

[[0. 1. 0. 0. 0.]
 [0. 0. 1. 0. 0.]
 [0. 0. 0. 1. 0.]
 [0. 0. 0. 0. 1.]
 [0. 0. 0. 1. 0.]
 [0. 0. 0. 0. 1.]
 [0. 0. 0. 1. 0.]
 [0. 0. 1. 0. 0.]
 [0. 1. 0. 0. 0.]
 [1. 0. 0. 0. 0.]]