代码之家  ›  专栏  ›  技术社区  ›  tinonetic

在TensorFlow中,函数“tf”中的参数“axis”是什么。1\u热'

  •  27
  • tinonetic  · 技术社区  · 8 年前

    谁能帮我解释一下 axis 在中 TensorFlow one_hot 作用

    根据 documentation :

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

    我最接近于一个答案 SO was an explanation 与相关 Pandas :

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

    3 回复  |  直到 7 年前
        1
  •  23
  •   Maxim    8 年前

    下面是一个示例:

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

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

    axis=-1

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

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

    ... 其中最后一个维度是一个热编码的维度(清晰可见)。这与默认值相对应 轴=-1 ,即 最后的

    axis=0

    现在,计算 one_hot_2 = tf.one_hot(x, 4, axis=0).eval() 产生a (4, 3) 无法立即识别为热编码的张量:

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

    这是因为一个热编码是沿着0轴进行的,必须转置矩阵才能看到之前的编码。当输入的维度更高时,情况会变得更复杂,但想法是一样的:不同之处在于 额外的 用于一个热编码的维度。

        2
  •  22
  •   loco.loop    5 年前

    对于我来说,轴翻译为“在哪里添加额外的数字以增加维度”。至少这是我对它的解释,也是一种记忆法。

    例如,你有[1,2,3,0,2,1],这是形状(1,6)。这意味着它是一个一维数组。one\u hot在原始数组的每个位置添加零并将位置转换为1,要实现这一点,原始数组必须比原始数组多1个维度,axis告诉函数将其添加到何处, 这个新维度将确定示例 .


    轴=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
    
        3
  •  0
  •   Thanator    5 年前

    对我来说,我的理解如下- (注:索引参考 documentation 只是类标签的信息,可以是标量、向量或矩阵) 如果索引只是标量,则不需要轴。 但是,如果它是向量,则可以选择要素和类的方向 2 ` 这里,一个热向量的图像有一行作为深度(类),一列作为各自的特征(标签),因此对于这种情况,轴的值为0。 类似地,如果需要特征x深度,则轴的值将为-1。

    同样,如果索引是一个矩阵,那么您可以选择以下方向


    (batch表示索引中的行) 3

    batch x features x depth if axis == -1
    batch x depth x features if axis == 1
    depth x batch x features if axis == 0