Numpy 如何在tensorflow中从NxN图像读取MxM补丁?
我正在学习tensorflow,但我不知道操作张量的惯用方法。我想把一个正方形矩阵读入重叠的面片,这将用于卷积 如果我有一个简单的方阵,例如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]]
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]]]