我正在学习张量流,我不知道操纵张量的惯用方法。我想把一个方形矩阵读成重叠的补丁,这些补丁将用于卷积。
如果我有一个简单的方阵,例如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])
答案 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)
希望这有帮助!