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

Goi*_*Way 4 tensorflow

我阅读了tf.one_hot文档并发现了

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

什么是The new axis

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

如果轴== -1,则为x深度

深度x特征如果轴== 0

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

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

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

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

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

gde*_*lab 10

tf.one_hot()转换索引列表(例如[0, 2, 1])并将其转换为长度为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),则输出将是形状(d1, d2, .., dn, depth).但是,如果更改输入参数,则可以选择将新尺寸放在其他位置,例如,如果axis=0输出形状正确(depth, d1, d2, .., dn).

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