3

我在内部使用一个小的自定义函数tf.contrib.seq2seq.sequence_loss(softmax_loss_function=[...])作为自定义 sofmax_loss_function:

    def reduced_softmax_loss(self, labels, logits):
        top_logits, indices = tf.nn.top_k(logits, self.nb_top_classes, sorted=False)
        top_labels = tf.gather(labels, indices)

        return tf.nn.softmax_cross_entropy_with_logits_v2(labels=top_labels,
                                                          logits=top_logits)

但即使标签和 logits 应该具有相同的维度,执行后它会返回 and InvalidArgumentError

indices[1500,1] = 2158 is not in [0, 1600)由于我的随机种子,数字会有所不同。

tf.gather有没有我可以使用的其他功能?或者返回的值是假的?

如果我通过通常的 Tensorflow 函数,一切正常。

提前致谢!

4

1 回答 1

0

仅通过查看您的代码很难判断发生了什么,但我认为您编写的代码并没有达到您想要的效果。tf.gather 操作需要一个索引输入,其中每个标量值索引到第一个参数的最外层维度,但这里 top_k 的输出尝试同时索引行和列,这会导致超出范围的错误。

于 2019-03-14T16:45:55.957 回答