从top_k函数返回到图像

时间:2018-06-25 15:58:52

标签: numpy tensorflow image-processing keras deep-learning

enter image description here我正在研究自己的问题,但我仍然对许多功能不知所措。我正在寻找使用tf.top_k并返回第一张图片。熟悉tensorflow的人可以帮助我解决这个问题吗?

详细问题:张量图像(4 x 4)-> tf.top_k-> 4个值(2 x 2)和4个索引(2 x 2)->代码段->图像(4 ,4)作为张量

例如,假设我们有一张图片

image = np.array([[1, 2, 3, 4],
                  [7, 8, 9, 10],
                  [19, 20, 21, 22],
                  [25, 26, 27, 28]])

x = tf.placeholder(tf.float32, [None, img_height, img_width, 1], name='x')
patches = tf.extract_image_patches(x, [1, 2, 2, 1], [1, 2, 2, 1], [1, 1, 1, 1], "SAME")
ktop, indices = tf.nn.top_k(patches, k=4, sorted=True, name=None) 

现在,我希望给ktop和索引以像第一个状态一样再次获取图像

image = np.array([[1, 2, 3, 4],
                  [7, 8, 9, 10],
                  [19, 20, 21, 22],
                  [25, 26, 27, 28]])

我尝试了很多操作,例如tf.one_hot,tf.gatter等,但是我无法获得(4,4)图像。我应该在输入和输出中有一个张量,看来我不能使用numpy或for循环。我之前也问过类似的问题,但我在这里再次提出了更清晰的解释。 您能否请人帮忙解决这个问题。对其他人来说应该很容易,但对我来说却很困难。

此代码段给了我第一张图像,但没有给出(1、4、4、1),而是给出了(2、2、2、2)或其他形状。

z1 = tf.assign(z1, tf.reshape(tf.gather(ktop[0, 0, 0, :], [indices[0, 0, 0, :]]), [2, 2]))
z2 = tf.assign(z2, tf.reshape(tf.gather(ktop[0, 0, 1, :], [indices[0, 0, 1, :]]), [2, 2]))
z3 = tf.assign(z3, tf.reshape(tf.gather(ktop[0, 1, 0, :], [indices[0, 1, 0, :]]), [2, 2]))
z4 = tf.assign(z4, tf.reshape(tf.gather(ktop[0, 1, 1, :], [indices[0, 1, 1, :]]), [2, 2]))

z = tf.concat([[z1, z2], [z3, z4]], 0)

2 个答案:

答案 0 :(得分:1)

在没有明确说明如何从2x2x4张量转换为4x4x1张量的情况下,我只能提出以下建议:

img_out = tf.reshape(ktop, [-1, 4, 4, 1])

答案 1 :(得分:0)

最后,我找到了TENSORFLOW追随者迄今未重放的答案。为了从top_k返回图像,我们应该使用depth_to_space函数:

output_image = tf.depth_to_space(     output_image,     2,     名称=无,     data_format ='NHWC' )