沿两个轴排列张量的最佳方法是什么(第一行然后是列,反之亦然)?我应该定义py_func
并使用numpy或使用张量转换函数(如tf.slice
之一)来执行此操作 - 我不知道这是否可行。
要使用numpy来实现这一点,我通常会执行以下操作:
>>> arr = np.arange(9).reshape([3,3])
>>> arr
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
>>> col_perm = np.random.permutation(arr.shape[1])
>>> col_perm
array([2, 1, 0])
>>> row_perm = np.random.permutation(arr.shape[0])
>>> row_perm
array([2, 0, 1])
>>> shuffled_arr = arr[row_perm,:][:,col_perm]
>>> shuffled_arr
array([[8, 7, 6],
[2, 1, 0],
[5, 4, 3]])
答案 0 :(得分:0)
tf.random_shuffle()
与tensor transposition(tf.transpose()
)相结合后呢?
答案 1 :(得分:0)
这里有一个与 tf.random.shuffle()
完全相同的快速函数,但还需要一个轴维度
def tf_shuffle_axis(value, axis=0, seed=None, name=None):
perm = list(range(tf.rank(value)))
perm[axis], perm[0] = perm[0], perm[axis]
value = tf.random.shuffle(tf.transpose(value, perm=perm))
value = tf.transpose(value, perm=perm)
return value