从张量流中的张量创建新矩阵

时间:2017-01-08 10:23:47

标签: tensorflow

假设我有一个带有3个通道的(7,7,3)图像。 如何使用图像创建矩阵A,使每行只包含相邻像素的成对连接?我知道这可以在python中使用for循环轻松完成,但是我们如何才能在张量流图中做到这一点?

矩阵A的例子:

[[pixel1 pixel2],
 [pixel1 pixel3],
 [pixel1 pixel4],
 .....so on    ]]

1 个答案:

答案 0 :(得分:3)

你可以使用一些矩阵代数来做到这一点。为了说明这个想法,假设你想为一维向量做这个。

您可以使用自身的移位版本堆叠矢量以获得邻居对

n = 5
a = tf.range(n)
left = tf.stack([a[1:], a[:n-1]])
left = tf.transpose(left)

enter image description here

通过砍掉尾巴并重复不同的偏移,你可以得到左邻居和右邻居

right = tf.stack([a[:n-1], a[1:]])
right = tf.transpose(right)

enter image description here

要忽略边缘效应,您可以砍掉两端并再次叠加到rank-3矩阵

stacked_neighbors = tf.stack([left[:-1], right[1:]])

enter image description here

现在要交错邻居,我们可以使用转置和重塑技巧。

stacked_neighbors = tf.transpose(stacked_neighbors, [1, 0, 2])

enter image description here

由于数据存储按行主要顺序排列,重新塑造成比原始尺寸更小的尺寸,因此重新塑造了左侧多余尺寸的展平

stacked_neighbors = tf.reshape(stacked_neighbors, [6,2])

enter image description here