叠加,洗牌,得到原来的张量



我有以下两个tensorflow占位符:

Tensor("Placeholder:0", shape=(32, 2048), dtype=float32)
Tensor("Placeholder:1", shape=(64, 2048), dtype=float32)

我们称它们为ab。我想随机地对它们进行stackshuffle。之后,我想通过网络传递它们。最后,我想在stackshuffle之前得到ab

我已经做了什么

我理解堆叠和随机洗牌。因此,请指导我如何堆叠它们、对它们进行洗牌,并最终获得原始索引。

你可以在连接矩阵上创建一个shuffle index,这样我们就知道被洗牌的元素去了哪里,然后我们可以使用索引的argsort将它们按顺序放回一起。

输入:

a = tf.random.normal(shape=(32, 2048), dtype=tf.float32)
b = tf.random.normal(shape=(64, 2048), dtype=tf.float32)

数组栈:

c = tf.concat([a,b], axis=0)

随机洗牌:

indices = tf.range(start=0, limit=tf.shape(c)[0], dtype=tf.int32)
shuffled_indices = tf.random.shuffle(indices) #shuffled index will tell where each element of c went.
shuffled_c = tf.gather(c, shuffled_indices)

返回c, a, b:

getback_c = tf.gather(shuffled_c, tf.argsort(shuffled_indices))
a_1, b_1 = getback_c[:tf.shape(a)[0]], getback_c[tf.shape(a)[0]:]

检查值是否相同:

np.testing.assert_allclose(a.numpy(), a_1.numpy())
np.testing.assert_allclose(b.numpy(), b_1.numpy())

相关内容

  • 没有找到相关文章

最新更新