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

TensorFlow,tf.one_hot为什么输出的形状由轴的值定义?,tensorflow,Tensorflow,我读了这本书,发现 。新轴是在尺寸轴处创建的(默认值:新轴附加在末端) 新轴是什么 如果索引是长度特征向量,则输出形状为: 如果轴==-1,特征x深度 如果轴==0,深度x特征 如果索引是具有形状[批次,特征]的矩阵(批次),则输出形状为: 如果轴==-1,批次x特征x深度 如果轴==1,则批次x深度x特征 如果轴==0,深度x批次x特征 为什么输出的形状由轴定义 tf.one_hot()转换索引列表(例如[0,2,1])并将其转换为长度深度的一个热向量列表 例如,如果depth=3 输入中的

我读了这本书,发现

。新轴是在尺寸轴处创建的(默认值:新轴附加在末端)

新轴是什么

如果索引是长度特征向量,则输出形状为:

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

如果轴==0,深度x特征

如果索引是具有形状[批次,特征]的矩阵(批次),则输出形状为:

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

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

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

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

tf.one_hot()
转换索引列表(例如
[0,2,1]
)并将其转换为长度
深度
的一个热向量列表

例如,如果
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)
。但如果更改输入参数轴,则可以选择将新尺寸标注放在其他位置,例如,如果
轴=0
,则输出的形状将为
(深度,d1,d2,…,dn)


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

因为
如果输入索引为秩n,则输出将为秩n+1。
,轴的值是输出深度的索引