Tensorflow tf.gather\n的用法

Tensorflow tf.gather\n的用法,tensorflow,Tensorflow,假设你有一个3-张量 data = np.reshape(np.arange(12), [2, 2, 3]) x = tf.constant(data) 将其视为由最后一个索引索引的2x2矩阵,我想从第一个矩阵中获取第一列,从第二个矩阵中获取第二列,从第三个矩阵中获取第二列 如何使用tf.gather\n执行此操作?您需要首先生成所需的索引 导入tensorflow作为tf 将numpy作为np导入 根据您的描述,索引=[[i,minj,1,j]用于范围3中的j,用于范围2中的i] [[0,

假设你有一个3-张量

data = np.reshape(np.arange(12), [2, 2, 3])
x = tf.constant(data)
将其视为由最后一个索引索引的2x2矩阵,我想从第一个矩阵中获取第一列,从第二个矩阵中获取第二列,从第三个矩阵中获取第二列


如何使用tf.gather\n执行此操作?

您需要首先生成所需的索引

导入tensorflow作为tf 将numpy作为np导入 根据您的描述,索引=[[i,minj,1,j]用于范围3中的j,用于范围2中的i] [[0, 0, 0], [1, 0, 0], [0, 1, 1], [1, 1, 1], [0, 1, 2], [1, 1, 2]] a=tf.constantnp.Arange2.2.3 res=tf.gather\u nda,索引 sess=tf.InteractiveSession a、 评估 数组[[0,1,2], [ 3, 4, 5]], [[ 6, 7, 8], [ 9, 10, 11]]] 资源评估 数组[0,6,4,10,5,11]
我在网上找到了以下教程,解释了如何处理此类问题:

假设我们有一个4x3矩阵

M = tf.constant(np.arange(12).reshape(4,3))
现在让我们假设您想要第一行的第三个元素、第二行的第二个元素、第三行的第一个元素和第四行的第二个元素。如本教程所述,这可以通过以下方式实现:

idx = tf.constant([2,1,0,1], tf.int32)
x = tf.gather_nd(M, tf.stack([tf.range(M.shape[0]), idx], axis=1))

但是如果M的行数未知怎么办?idx作为适当大小的整数张量,则tf.rangeM.shape[0]将引发错误。我怎么能绕过这个

谢谢,如果第三个索引未知呢?本质上,第三个维度是批量大小,我想根据每个样本的属性从这些2x2张量中选择元素。我明白了,你可以尝试索引=[[I,sel_col[j],j]表示范围中的j,b表示范围2中的I]。B是批次大小,sel_col是一个dict,指示第j个样本应从2x2矩阵中选择哪个col。但批次大小通常未知。我在一个单独的答案中发布了一个简化的解决方案,该解决方案在给定批量的情况下有效,但它是什么呢?