假设我有一个带有3个通道的(7,7,3)图像。 如何使用图像创建矩阵A,使每行只包含相邻像素的成对连接?我知道这可以在python中使用for循环轻松完成,但是我们如何才能在张量流图中做到这一点?
矩阵A的例子:
[[pixel1 pixel2],
[pixel1 pixel3],
[pixel1 pixel4],
.....so on ]]
答案 0 :(得分:3)
你可以使用一些矩阵代数来做到这一点。为了说明这个想法,假设你想为一维向量做这个。
您可以使用自身的移位版本堆叠矢量以获得邻居对
n = 5
a = tf.range(n)
left = tf.stack([a[1:], a[:n-1]])
left = tf.transpose(left)
通过砍掉尾巴并重复不同的偏移,你可以得到左邻居和右邻居
right = tf.stack([a[:n-1], a[1:]])
right = tf.transpose(right)
要忽略边缘效应,您可以砍掉两端并再次叠加到rank-3矩阵
stacked_neighbors = tf.stack([left[:-1], right[1:]])
现在要交错邻居,我们可以使用转置和重塑技巧。
stacked_neighbors = tf.transpose(stacked_neighbors, [1, 0, 2])
由于数据存储按行主要顺序排列,重新塑造成比原始尺寸更小的尺寸,因此重新塑造了左侧多余尺寸的展平
stacked_neighbors = tf.reshape(stacked_neighbors, [6,2])