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

use*_*426 13 machine-learning multidimensional-array python-3.x tensorflow one-hot-encoding

任何人都可以有帮助的是什么的解释axisTensorFlowone_hot功能?

根据文件:

axis:要填充的轴(默认值:-1,新的最内轴)

最近我得到的关于SO的答案熊猫有关的解释:

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

loc*_*oop 11

对我来说,轴转换为"在哪里添加额外的数字以增加尺寸".至少这就是我如何解释它并作为助记符.

例如,你有[1,2,3,0,2,1],这是形状(6,1).这意味着它是一维数组.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
Run Code Online (Sandbox Code Playgroud)

轴= 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
Run Code Online (Sandbox Code Playgroud)


Max*_*xim 10

这是一个例子:

x = tf.constant([0, 1, 2])
Run Code Online (Sandbox Code Playgroud)

...是输入张量和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.]]
Run Code Online (Sandbox Code Playgroud)

...最后一个维度是一个热门编码(清晰可见).这对应于默认值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.]]
Run Code Online (Sandbox Code Playgroud)

这是因为单热编码是沿着0轴完成的,并且必须转置矩阵以查看先前的编码.当输入更高维度时,情况变得更复杂,但想法是相同的:不同之处在于用于单热编码的额外维度的放置.