2017-05-11 6 views
0

私はテンソルの流れを学んでおり、テンソルを操作する慣用的な方法は分かりません。私は、畳み込みで使用される、重なり合ったパッチに正方行列を読みたい。テンソルフローのNxN画像からMxMパッチを読み取る方法は?

私は例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]] 

Iが使用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

次のコードは、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]]] 

は、この情報がお役に立てば幸い!

+0

@Rdgstv、私の答えはあなたを助けましたか? – hars

関連する問題