【问题标题】:How can I encode labels in TensorFlow?如何在 TensorFlow 中编码标签?
【发布时间】:2017-02-07 14:35:30
【问题描述】:

我需要将我的字符串标签转换为像 [0, 0, ... , 1, ... 0] 这样的向量。
据我所知,这被称为一个热向量。
我有 10 个类,所以有 10 个不同的字符串标签。

有人可以帮忙解决直接和逆变换吗?
我是 tensorflow 的新手,所以请善待。

【问题讨论】:

    标签: tensorflow


    【解决方案1】:

    前进方向很容易,因为有tf.one_hot op:

    import tensorflow as tf
    
    original_indices = tf.constant([1, 5, 3])
    depth = tf.constant(10)
    one_hot_encoded = tf.one_hot(indices=original_indices, depth=depth)
    
    with tf.Session():
      print(one_hot_encoded.eval())
    

    输出:

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

    反之亦然,tf.where 可以找到非零索引:

    def decode_one_hot(batch_of_vectors):
      """Computes indices for the non-zero entries in batched one-hot vectors.
    
      Args:
        batch_of_vectors: A Tensor with length-N vectors, having shape [..., N].
      Returns:
        An integer Tensor with shape [...] indicating the index of the non-zero
        value in each vector.
      """
      nonzero_indices = tf.where(tf.not_equal(
          batch_of_vectors, tf.zeros_like(batch_of_vectors)))
      reshaped_nonzero_indices = tf.reshape(
          nonzero_indices[:, -1], tf.shape(batch_of_vectors)[:-1])
      return reshaped_nonzero_indices
    
    with tf.Session():
      print(decode_one_hot(one_hot_encoded).eval())
    

    打印:

    [1 5 3]
    

    【讨论】:

      猜你喜欢
      • 2018-05-09
      • 2017-05-14
      • 1970-01-01
      • 2018-10-01
      • 1970-01-01
      • 2015-09-14
      • 1970-01-01
      • 1970-01-01
      • 2019-11-17
      相关资源
      最近更新 更多