【问题标题】:TensorFlow, how to index so that (batch_size x num_labels)+(batch_size) -> (batch_size)TensorFlow,如何索引,以便 (batch_size x num_labels)+(batch_size) -> (batch_size)
【发布时间】:2016-04-24 14:43:33
【问题描述】:

假设我只有一个矩阵 (2D tensor) X,其形状为 (batch_size x num_labels)。每个样本的标签分数存储在矩阵中。现在我想提取真实标签的分数,而真实标签存储在另一个1D tensory中,其形状为(batch_size)。 我能做些什么 ? 我知道在 Theano 或 Numpy 中。它可以用一个表达式来完成:X[y]。 但是在 TensorFlow 中,实现这一目标最方便或成本最低的方法是什么?

X = tf.get_variable("X",[batch_size,num_labels])
y = tf.placeholder(tf.int32,[batch_size])

注意0 <= y[i] <= num_labels - 1。输出z 应该是1D tensor 其中z[i]= X[i][y[i]]

【问题讨论】:

  • 你能给个MCVE吗?
  • 嘿。我添加一个例子。我说清楚了吗?谢谢

标签: python numpy neural-network tensorflow


【解决方案1】:

我知道 X 是一个向量,其中包含每个类和批次实例的概率,并且您希望获得真实标签的概率。我提出了解决方案,尽管它可能不是最佳解决方案:

# Create mask for values
increasing = tf.range(start=0, limit=tf.shape(X)[0], delta=1)

# Concatenate batch index and true label
# Note that in Tensorflow < 1.0.0 you must call tf.pack
mask = tf.stack([increasing, y], axis=1)

# Extract values
masked = tf.gather_nd(params=X, indices=mask)

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 2020-02-09
    • 1970-01-01
    • 2020-08-24
    • 1970-01-01
    • 2021-02-23
    • 2019-10-24
    • 2020-04-14
    • 1970-01-01
    • 2019-07-15
    相关资源
    最近更新 更多