python - Tensorflow 2:根据 2D 张量对 3D 张量进行排序
问题描述
我有一个带有批次、序列、特征维度(N、s、e)的 3D 张量。它是一系列概率分布。然后我想根据最高预测对应的整数对它们进行排序。所以说
x_probabs = 3D tensor (ex: [[[0.5, 0.1, 0.4], [0.3, 0.3, 0.4], [0.1,
0.8, 0.1]]]; # shape N s e
x = tf.argmax(x_probabs, axis=-1) = [[0, 2, 1]]; # shape N s
或者另一个例子是
x_probabs=[[[0.6, 0.1, 0.1, 0.1, 0.1], [0.1,0.1,0.1,0.1,0.6], [0.1,0.1,0.1,0.6,0.1]]];
x = [[0, 4, 3]];
如果我想订购 xi can do ordered_x = tf.sort(x, axis=-1)
,然后得到我能做的订购indices_sorted_x = tf.argsort(x, axis=-1)
。我希望将相同的顺序应用于 x_probabs 并且我很困惑如何做到这一点,我已经尝试过sorted_x_probabs = tf.gather(x_probabs, indices_sorted_x)
但它不起作用,因为索引是针对 2D 张量而不是 3D 张量的。我被困在这里。
以下是第一个示例的样子
sorted_x = [[0,1,2]];
sorted_x_probabs = [[[0.5, 0.1, 0.4],[0.1,
0.8, 0.1],[0.3, 0.3, 0.4]]];
这将是第二个例子
sorted_x = [[0,3,4]];
sorted_x_probabs = [[[0.6, 0.1, 0.1, 0.1, 0.1],[0.1,0.1,0.1,0.6,0.1],[0.1,0.1,0.1,0.1,0.6]]];
非常感谢您提前。
解决方案
您可以添加batch_dims
参数以从较低维度开始收集:
x = tf.gather(x_probabs, x, batch_dims=1)
推荐阅读
- apache-spark - Spark 驱动程序作为 REST API
- java - 严重:空错误 com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException
- module - 在创建单独的模块过程时,您会在什么情况下在子模块中使用“模块过程”?
- java - 验证二维数组的元素
- c# - ASP.NET Core 2.2 - 2个选择表单字段之间的依赖关系
- python - Jupyter Python 中的输入对我没有任何作用
- visual-studio-code - VS Code 中的 C++ 自定义问题匹配器未突出显示文件路径
- python - 服务器上的 Python:以下错误消息是什么意思?
- javascript - Chartjs-plugin:如何为每个标签添加不同的颜色?
- google-analytics - 页面加载示例未发送 GA-100% 页面浏览量