tensorflow 0.8一个热编码

时间:2016-12-26 12:07:12

标签: tensorflow neural-network one-hot-encoding

我要编码的数据如下所示:

print (train['labels'])

[0 0 0 ...,42 42 42]

从0-42

有43个班级

现在我读到版本0.8中的tensorflow有一个针对一个热编码的新功能,所以我尝试使用它如下:

trainhot=tf.one_hot(train['labels'], 43, on_value=1, off_value=0)

唯一的问题是我认为输出不是我需要的

print (trainhot[1])

Tensor(“strided_slice:0”,shape =(43,),dtype = int32)

有人可以朝着正确的方向推动我吗:)

1 个答案:

答案 0 :(得分:0)

输出正确且预期。 trainhot [1]是第二个(基于0的索引)训练样本的标签,其具有1D形状(43,)。您可以使用下面的代码来更好地理解tf.one_hot:

  onehot = tf.one_hot([0, 0, 41, 42], 43, on_value=1, off_value=0)                  
  with tf.Session() as sess:                                                        
    onehot_v = sess.run(onehot)                                                  
  print("v: ", onehot_v)                                                            
  print("v shape: ", onehot_v.shape)                                                
  print("v[1] shape: ", onehot[1])

output:
v:  [[1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
  0 0 0 0 0 0]
 [1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
  0 0 0 0 0 0]
 [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
  0 0 0 0 1 0]
 [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
  0 0 0 0 0 1]]
v shape:  (4, 43)
v[1] shape:  Tensor("strided_slice:0", shape=(43,), dtype=int32)