在 TensorFlow 中,函数 'tf.one_hot' 中的参数 'axis' 是什么

新手上路,请多包涵

任何人都可以帮助解释 axis TensorFlow one_hot 功能?

根据 文档

axis:要填充的轴(默认值:-1,一个新的最里面的轴)

我最接近 SO 的答案是Pandas 相关的解释:

不确定上下文是否同样适用。

原文由 tinonetic 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 639
2 个回答

这是一个例子:

 x = tf.constant([0, 1, 2])

… 是输入张量和 N=4 (每个索引都转换为 4D 向量)。

axis=-1

计算 one_hot_1 = tf.one_hot(x, 4).eval() 产生一个 (3, 4) 张量:

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

…最后一个维度是单热编码的(清晰可见)。这个对应默认的 axis=-1 ,即 最后 一个。

axis=0

现在,计算 one_hot_2 = tf.one_hot(x, 4, axis=0).eval() 产生一个 (4, 3) 张量,它不能立即识别为单热编码:

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

这是因为 one-hot 编码是沿着 0 轴完成的,必须转置矩阵才能看到之前的编码。当输入的维数更高时,情况变得更加复杂,但想法是一样的:不同之处在于用于单热编码的 额外 维数的放置。

原文由 Maxim 发布,翻译遵循 CC BY-SA 3.0 许可协议

对我来说 axis 翻译为“你在哪里添加额外的数字来增加维度”。至少这是我解释它并作为助记符的方式。

例如,您有 [1,2,3,0,2,1],这是形状 (1,6)。这意味着它是一个一维数组。 one_hot 添加零并将原始数组的每个位置的位置转换为 1,为此,原始数组的维度必须比原始数组多 1,轴告诉函数添加它的位置, 这个新维度将标识例子


轴=1

您添加第二个维度并保留第一个维度。这将导致 (6,4) 数组。因此,对于生成的数组,您使用第一个维度 (0) 来了解您看到的是哪个示例,使用第二个维度(1,新的)来了解该类是否处于活动状态。 newArr[0][1]=1 表示示例 0,类 1,在这种情况下表示示例 0 属于类 1。

    0   1   2   3  <- class

[[ 0.  1.  0.  0.]   <- example 0
 [ 0.  0.  1.  0.]   <- example 1
 [ 0.  0.  0.  1.]   <- example 2
 [ 1.  0.  0.  0.]   <- example 3
 [ 0.  0.  1.  0.]   <- example 4
 [ 0.  1.  0.  0.]]  <- example 5


轴=0

您添加第一个维度,现有维度被移动。这将产生一个 (4,6) 数组。因此,对于生成的数组,您使用第一个维度(0,新维度)来了解该类是否处于活动状态,并使用第二个维度 (1) 来了解您看到的是哪个示例。 newArr[0][1]=0 表示类 0,示例 1,在这种情况下表示示例 1 不属于类 0。

    0   1   2   3   4   5  <- example

[[ 0.  0.  0.  1.  0.  0.]   <- class 0
 [ 1.  0.  0.  0.  0.  1.]   <- class 1
 [ 0.  1.  0.  0.  1.  0.]   <- class 2
 [ 0.  0.  1.  0.  0.  0.]]  <- class 3

原文由 loco.loop 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进