我遇到了同样的function 并写了一个更简单的理解。我使用的数字 0 到 4 代表 5 个类别。
labels_dense.shape[0] 的作用是什么?
在这个例子中它返回标签的数量是'10'。
这段代码是什么意思?
labels_one_hot.flat[index_offset + labels_dense.ravel()] = 1
如您在输出中看到的那样,将“1”放在正确的位置是符合逻辑的。它只是从整个 one-hot 表示的开头计算位置。
因此,要将数字“0”表示为 one-hot 向量,第 45 位应为“1”。这对应于最后一个向量的第 0 个元素。
所以
[1. 0. 0. 0. 0.]
当我们有 5 个类时,是数字“0”的 one-hot 表示。
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.]]