Numpy 如何在tensorflow中从NxN图像读取MxM补丁?

Numpy 如何在tensorflow中从NxN图像读取MxM补丁?,numpy,tensorflow,Numpy,Tensorflow,我正在学习tensorflow,但我不知道操作张量的惯用方法。我想把一个正方形矩阵读入重叠的面片,这将用于卷积 如果我有一个简单的方阵,例如np.arange(9)。重塑(,3)): 我应该使用什么操作通过读取窗口来转换它,并给出以下信息 [[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]]

我正在学习tensorflow,但我不知道操作张量的惯用方法。我想把一个正方形矩阵读入重叠的面片,这将用于卷积

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

我应该使用什么操作通过读取窗口来转换它,并给出以下信息

[[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])

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

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)
结果:

img
[[[[0][1][2]] 
  [[3][4][5]]
  [[6][7][8]]]]
result
[[[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]]]

希望这有帮助

@Rdgstv,我的回答对你有帮助吗??
img
[[[[0][1][2]] 
  [[3][4][5]]
  [[6][7][8]]]]
result
[[[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]]]