如何在tensorflow中写一个循环矩阵
How to write a circulant matrix in tensorflow
我想在不使用任何 for 循环的情况下在 tensorflow 中生成一个循环矩阵。例如我的输入是 [1, 2, 3]
,预期的输出是 [[1,2,3],[2,3,1],[3,1,2]]
。我觉得我们可以用nd卷积来做,但是tensorflow没有nd卷积。
我认为解决此问题的最简单方法是使用 tf.extract_volume_patches,而不使用显式循环,它可用于在张量上创建滑动 window。您只需要相应地重塑张量:
import tensorflow as tf
tensor = tf.constant([1, 2, 3])
stride = 4
window_size = 3
tensor = tf.tile(tensor, [stride])
tensor = tf.reshape(tensor, [1, -1, 1, 1, 1])
windowed_tensor = tf.extract_volume_patches(tensor,
ksizes=[1, window_size, 1, 1, 1],
strides=[1, stride, 1, 1, 1],
padding='VALID')[0, :, 0, 0]
tf.print(windowed_tensor)
[[1 2 3]
[2 3 1]
[3 1 2]]
我想在不使用任何 for 循环的情况下在 tensorflow 中生成一个循环矩阵。例如我的输入是 [1, 2, 3]
,预期的输出是 [[1,2,3],[2,3,1],[3,1,2]]
。我觉得我们可以用nd卷积来做,但是tensorflow没有nd卷积。
我认为解决此问题的最简单方法是使用 tf.extract_volume_patches,而不使用显式循环,它可用于在张量上创建滑动 window。您只需要相应地重塑张量:
import tensorflow as tf
tensor = tf.constant([1, 2, 3])
stride = 4
window_size = 3
tensor = tf.tile(tensor, [stride])
tensor = tf.reshape(tensor, [1, -1, 1, 1, 1])
windowed_tensor = tf.extract_volume_patches(tensor,
ksizes=[1, window_size, 1, 1, 1],
strides=[1, stride, 1, 1, 1],
padding='VALID')[0, :, 0, 0]
tf.print(windowed_tensor)
[[1 2 3]
[2 3 1]
[3 1 2]]