gpt4 book ai didi

tensorflow - 如何使用 tf.nn.top_k 返回的索引对多维张量进行排序?

转载 作者:行者123 更新时间:2023-12-03 00:23:04 24 4
gpt4 key购买 nike

我有两个多维张量ab。我想按 a 的值对它们进行排序。

我找到了tf.nn.top_k能够对张量进行排序并返回用于对输入进行排序的索引。如何使用 tf.nn.top_k(a, k=2) 返回的索引对 b 进行排序?

例如,

import tensorflow as tf

a = tf.reshape(tf.range(30), (2, 5, 3))
b = tf.reshape(tf.range(210), (2, 5, 3, 7))
k = 2
sorted_a, indices = tf.nn.top_k(a, k)

# How to sort b into
# sorted_b[0, 0, 0, :] = b[0, 0, indices[0, 0, 0], :]
# sorted_b[0, 0, 1, :] = b[0, 0, indices[0, 0, 1], :]
# sorted_b[0, 1, 0, :] = b[0, 1, indices[0, 1, 0], :]
# ...
<小时/>

更新

组合tf.gather_ndtf.meshgrid可以是一种解决方案。例如,以下代码在 python 3.5 上使用tensorflow 1.0.0-rc0进行测试:

a = tf.reshape(tf.range(30), (2, 5, 3))
b = tf.reshape(tf.range(210), (2, 5, 3, 7))
k = 2

sorted_a, indices = tf.nn.top_k(a, k)

shape_a = tf.shape(a)
auxiliary_indices = tf.meshgrid(*[tf.range(d) for d in (tf.unstack(shape_a[:(a.get_shape().ndims - 1)]) + [k])], indexing='ij')

sorted_b = tf.gather_nd(b, tf.stack(auxiliary_indices[:-1] + [indices], axis=-1))

但是,我想知道是否有一种更具可读性并且不需要在上面创建 auxiliary_indices 的解决方案。

最佳答案

您的代码有问题。

b = tf.reshape(tf.range(60), (2, 5, 3, 7))

因为 TensorFlow 无法将具有 60 个元素的张量 reshape 为 [2,5,3,7](210 个元素)。并且您无法使用 3 阶张量的索引对 4 阶张量 (b) 进行排序。

关于tensorflow - 如何使用 tf.nn.top_k 返回的索引对多维张量进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41897212/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com