【发布时间】:2018-12-04 06:30:15
【问题描述】:
enter image description here我解决了我的问题,但我仍然对许多功能感到不知所措。我正在寻找使用 tf.top_k 并返回到第一张图片。熟悉 tensorflow 的人可以帮我解决这个问题吗?
详细问题:图像(4 x 4)作为张量 --> tf.top_k --> 4 个值(2 x 2)和 4 个索引(2 x 2) --> sn-p --> 图像(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 循环。我之前问过类似的问题,但我在这里再次提出更清晰的解释。 请有人帮忙解决这个问题。对别人来说应该很容易,但对我来说很难。
这个 sn-p 给了我第一张图片,但不是 (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)
【问题讨论】:
-
我不确定我是否理解您的问题,您希望如何从 2x2x4 变为 4x4x1 ?
snippet是什么? -
感谢您的回答。如果你运行我的 sn-p,它会给出一个 (1, 4, 4, 1) 图像作为 x。然后它提供来自 top_k 的 8 个张量:四个值(1、2、2、4)和四个索引(1、2、2、4)。现在,我想回到图像 (1, 4, 4, 1)。是我的问题吗?我脑海中的一种可能的解决方案是使用相应的索引对每个 value[0, :, :, 0], value[0, :, :, 1], ... 值进行上采样并获得 (1, 4, 4 , 1) 每个都包含值和零之间。然后将它们组合起来以达到第一张图像。我不知道该怎么做?
标签: numpy tensorflow image-processing keras deep-learning