2017-01-20 133 views
0

假設我有兩組圖像A和B,每個圖像都是11X5x5x3,其中11是一些示例,5x5x3是圖像維度。
在Tensorflow中有一種簡單的方法來對B_i上的A_i中的每個圖像應用卷積(即B_i扮演過濾器角色,而A_i是tf.conv2d中的輸入)?例如,conv2d(A_1,B_1),conv2d(A_2,B_2),...,conv2d(A_11,B_11)
這裏沒有加權學習只是想對一幅圖像應用卷積。 我試圖做到這一點如下:Tensorflow中的圖像卷積圖像

# change B to 5x5x3x11 to be compatible with tf convolution. 
tf.nn.conv2d(A, B, strides=[1,1,1,1], padding ='SAME') 

,但這樣做的問題是,它在所有B_i的每A_I適用卷積。我不想要這個,我只希望A_i超過B_j,而我== j。當然,我可以一個接一個做,但效率不高,我需要在批處理模式下完成。

如何解決這個問題?

謝謝。 Ĵ

回答

1

我不知道這是你所需要的,因爲它不是真正的批處理模式,但你可以使用地圖功能:

A = tf.placeholder(dtype=tf.float32, shape=[None, 5, 5, 3]) 
B = tf.placeholder(dtype=tf.float32, shape=[None, 5, 5, 3]) 

output = tf.map_fn(
    lambda inputs : tf.nn.conv2d(
     tf.expand_dims(inputs[0], 0), # H,W,C -> 1,H,W,C 
     tf.expand_dims(inputs[1], 3), # H,W,C -> H,W,C,1 
     strides=[1,1,1,1], 
     padding="SAME" 
    ), # Result of conv is 1,H,W,1 
    elems=[A,B], 
    dtype=tf.float32 
) 
final_output = output[:, 0, :, :, 0] # B,1,H,W,1 -> B,H,W 

性能將取決於微小的獨立迴旋如何將並行我猜測。

+0

tnx你的時間和答案。 – superMind