如何从张量流中的NxN图像读取MxM补丁?

时间:2017-05-11 02:22:17

标签: numpy tensorflow

我正在学习张量流,我不知道操纵张量的惯用方法。我想把一个方形矩阵读成重叠的补丁,这些补丁将用于卷积。

如果我有一个简单的方阵,例如np.arange(9).reshape((,3))

[[0 1 2]
 [3 4 5]
 [6 7 8]]

我应该使用什么操作来通过阅读窗口来转换它并提供以下内容?

[[0 0 0] [0 0 1] [0 3 4]]
[[0 0 0] [0 1 2] [3 4 5]]
[[0 0 0] [1 2 0] [4 5 0]]
[[0 0 1] [0 3 4] [0 6 7]]
[[0 1 2] [3 4 5] [6 7 8]]
[[1 2 0] [4 5 0] [7 8 0]]
[[0 3 4] [0 6 7] [0 0 0]]
[[3 4 5] [6 7 8] [0 0 0]]
[[4 5 0] [7 8 0] [0 0 0]]

我使用的numpy代码是:

pad = 3

X = np.arange(9).reshape((3, 3))
X_padded = np.pad(X, 3, mode='constant', constant_values=0)

for i in range(3):
    for j in range(3):
        row_a = pad + i - pad // 2
        row_b = row_a + pad
        col_a = pad + j - pad // 2
        col_b = col_a + pad        
        print(X_padded[row_a:row_b, col_a:col_b])

1 个答案:

答案 0 :(得分:1)

以下代码是在TF中实现所需过程的一种方法。

np.sum(np.count_nonzero(array[:][3], axis=1))

结果:

import tensorflow as tf
import numpy as np
img = tf.constant([[0,1,2],[3,4,5],[6,7,8]])
img = tf.reshape(img,[1,3,3,1])

op = tf.extract_image_patches(images=img, ksizes=[1, 3, 3, 1], strides=[1, 1, 1, 1], rates=[1, 1, 1, 1], padding='SAME')
op = tf.reshape(op,[-1,3,3,1])

init = tf.initialize_all_variables()
with tf.Session() as sess:
    sess.run(init)
    print("img")
    print(img.eval())
    result = sess.run(op)
    result = np.squeeze(result)
    print("result")
    print(result)

希望这有帮助!