2017-09-09 68 views
1

我試圖做Tensorflow如下:8預定義的二進制卷積濾鏡 - Tensorflow

I need this

爲此,我已經做了迄今爲止以下:

def new_weights(shape): 
    return tf.Variable(tf.truncated_normal(shape, stddev=0.05)) 

# From here down is another function 
shape = [3, 3, 1, 8,] 

H = [ 
    [[0, 1, 0,],[0, -1, 0,],[0, 0, 0,],], 
    [[0, 0, 1,],[0, -1, 0,],[0, 0, 0,],], 
    [[0, 0, 0,],[0, -1, 1,],[0, 0, 0,],], 
    [[0, 0, 0,],[0, -1, 0,],[0, 0, 1,],], 
    [[0, 0, 0,],[0, -1, 0,],[0, 1, 0,],], 
    [[0, 0, 0,],[0, -1, 0,],[1, 0, 0,],], 
    [[0, 0, 0,],[1, -1, 0,],[0, 0, 0,],], 
    [[1, 0, 0,],[0, -1, 0,],[0, 0, 0,],] 
] 

anchor_weights = tf.reshape(tf.cast(H, tf.float32), shape) 

layer = tf.nn.conv2d(input=input, 
        filter=anchor_weights, 
        strides=[1, 1, 1, 1], 
        padding='SAME') 

layer = tf.nn.max_pool(value=layer, 
         ksize=[1, 2, 2, 1], 
         strides=[1, 2, 2, 1], 
         padding='SAME') 

layer = tf.nn.relu(layer) 

feature_maps = layer 

shape = [1, 1, 8, 1] 

v = tf.cast(new_weights(shape), tf.float32) 

# To put all together 
layer = tf.nn.conv2d(input=feature_maps, 
        filter=v, 
        strides=[1, 1, 1, 1], 
        padding="SAME") 

但當我去打印anchor_weights和feature_maps時,我會做出迴應。

anchor_weights e feature_maps

對我來說,這似乎是完全錯誤的什麼我需要一個會像第一個圖像我發現你。

我不知道如何解決這個問題,有什麼想法?

回答

1

我想你在H數組中有錯誤的元素順序。您填充H[8,3,3]張量。那麼你使用tf.reshape,這改變張量的形狀,但不交換元素。你需要這樣的東西:

H = [ 
    [ 
     [[0, 0, 0, 0, 0, 0, 0, 1]], 
     [[1, 0, 0, 0, 0, 0, 0, 0]], 
     [[0, 1, 0, 0, 0, 0, 0, 0]] 
    ], 
    [ 
     [[ 0, 0, 0, 0, 0, 0, 1, 0]], 
     [[-1,-1,-1,-1,-1,-1,-1,-1]], 
     [[ 0, 0, 1, 0, 0, 0, 0, 0]] 
    ], 
    [ 
     [[0, 0, 0, 0, 0, 1, 0, 0]], 
     [[0, 0, 0, 0, 1, 0, 0, 0]], 
     [[0, 0, 1, 0, 0, 0, 0, 0]] 
    ] 
    ] 
anchor_weights = tf.cast(H, tf.float32) 
+0

我明白了!這完美的作品!謝謝!但是,你能否試着向我解釋究竟有什麼作用?它究竟在哪裏工作? (也就是說,發生這種變化的地方) 有沒有什麼方法可以打印H並將其視爲具有8個矩陣3x3的矢量? – QuestionsStackOverflow

+0

您使用張量'H'作爲'tf.conv2d'的內核,內核必須具有形狀'[3,3,1,8] = [kernel_w,kernel_h,inp_ch,out_ch]'。 'tf.reshape'不改變張量元素的順序,只描述形狀。 –

+0

也許你可以幫助我:https://stackoverflow.com/questions/46976483/set-initial-value-of-a-tf-variable-python-tensorflow/46976721#46976721 – QuestionsStackOverflow

相關問題