我目前正在做一门 tensorflow 课程,他们在其中使用了 tf.one_hot(indices, depth)。现在我不明白这些索引是如何变成二进制序列的。
谁能给我解释一下具体过程???
我目前正在做一门 tensorflow 课程,他们在其中使用了 tf.one_hot(indices, depth)。现在我不明白这些索引是如何变成二进制序列的。
谁能给我解释一下具体过程???
假设您的数据集中有一个分类特征(例如颜色)。您的样品可以是红色、黄色或蓝色。为了将此参数传递给 ML 算法,您首先需要对其进行编码,以便使用数字代替字符串。
做这种事情的最简单方法是创建一个映射,其中:
红色 --> 1
黄色 --> 2
蓝色 --> 3
并用其映射值替换每个字符串。
然而,这可能会在我们的 ML 模型中产生不必要的副作用,因为在处理数字时,它可能会认为蓝色 > 黄色(因为 3 > 2)或红色 + 黄色 = 蓝色(因为 1 + 2 = 3)。该模型无法知道这些数据是分类的,然后被映射为整数。
这个问题的解决方案是one-hot 编码,我们创建N个 新特征,其中N是原始特征中唯一值的数量。在我们的示例中, N等于 3,因为我们有 3 种独特的颜色(红色、黄色和蓝色)。
这些特征中的每一个都是二进制的,并且将对应于这些唯一值之一。在我们的示例中,第一个特征将是一个二进制特征,告诉我们该样本是否为红色,第二个特征与黄色相同,第三个特征与蓝色相同。
这种转换的一个例子如下所示:
请注意,由于这种方法增加了数据集的维度,如果我们有一个具有许多唯一值的特征,我们可能希望使用更稀疏的编码(就像我上面介绍的那样)。
depth:定义一个热维度的深度的标量。
指数:指数的张量。
这是 tensorflow 文档中给出的示例。
1. 仅指定索引和深度(on_value 的默认值为 1,off_value 的默认值为 0)
indices = [0, 1, 2]
depth = 3
tf.one_hot(indices, depth) # output: [3 x 3]
# [[1., 0., 0.],
# [0., 1., 0.],
# [0., 0., 1.]]
指数 = [0, 2, -1, 1] 深度 = 3 tf.one_hot(索引,深度,on_value=5.0,off_value=0.0,axis=-1) ##输出:[4 x 3] # [[5.0, 0.0, 0.0], # one_hot(0) # [0.0, 0.0, 5.0], # one_hot(2) # [0.0, 0.0, 0.0], # one_hot(-1) # [0.0, 5.0, 0.0]] # one_hot(1)