TensorFlow,tf.one_hot为什么输出的形状由轴的值定义?

时间:2017-07-03 13:53:17

标签: tensorflow

我读了docs of tf.one_hot并找到了

  

......新轴在尺寸轴上创建(默认:新轴附加在末尾)。

什么是The new axis

  

如果indices是长度要素的向量,则输出形状将为:

     
    

如果轴== -1

,则为x深度          

深度x特征如果轴== 0

  
     

如果indices是具有形状[batch,features]的矩阵(批处理),则输出形状将为:

     
    

批次x特征x深度,如果轴== -1

         

批量x深度x特征如果轴== 1

         

深度x批次x特征如果轴== 0

  

为什么输出的形状由轴定义?

1 个答案:

答案 0 :(得分:9)

tf.one_hot()转换索引列表(例如[0, 2, 1])并将其转换为长度为depth的单热矢量列表。

例如,如果depth = 3

  • 输入中的索引0将替换为[1,0,0]
  • 输入中的索引1将替换为[0,1,0]
  • 输入中的索引2将替换为[0,0,1]

因此[0, 2, 1]将被编码为[[1, 0, 0], [0, 0, 1], [0, 1, 0]]

如您所见,输出的维数比输入多一个(因为每个索引都被一个向量替换)。

默认情况下(以及您通常需要的),新维度会被创建为最后一维,因此如果您的输入形状为(d1, d2, .., dn),那么您的输出将是形状{ {1}}。但是,如果更改输入参数 axis ,您可以选择将新维度放在其他位置,例如(d1, d2, .., dn, depth)输出的形状为axis=0

更改维度的顺序基本上是转置的n维版本:您具有相同的数据,但切换索引的顺序以访问它们(相当于切换2D矩阵中的列和行)。