2017-11-02 9 views
5

Jak dynamicznie wybierać ruchy splotów?Jak dynamicznie wybierać kroki splotu?

Korzystanie zastępczych nie wydaje się działać:

s = tf.placeholder(np.int32) 
image = tf.placeholder(np.float32, [None, 3, 32, 32]) 
tf.layers.conv2d(image, 
       filters=32, 
       kernel_size=[3, 3], 
       strides=[s, s], 
       padding='same', 
       data_format='channels_first') 

Daje to TypeError.

Podobne trudności pojawiają się przy pool_size i strides podczas łączenia.

Odpowiedz

5

Niestety, Tensorflow nie pozwala na przekazywanie Tensorów do definicji conv2d. Podejście, którego używałem, polegało na uruchomieniu conv2d z krokami 1, a następnie podzielenie wyniku na wymagane kroki. Prawdopodobnie nie jest to optymalne podejście, ale działa i tf.strided_slice może używać tensorów. Więc w twoim przypadku będzie to coś jak:

s = tf.placeholder(np.int32,[4]) 
image = tf.placeholder(np.float32, [None, 3, 32, 32]) 
convoluted = tf.layers.conv2d(image, 
       filters=32, 
       kernel_size=[3, 3], 
       strides=[1,1], 
       padding='same', 
       data_format='channels_first') 
result = tf.strided_slice(convoluted, 
          [0,0,0,0], 
          tf.shape(convoluted), 
          s) 

Następnie można przejść do kroku, tym 4 rozmiarach s podczas biegu, gdzie każdy wpis odpowiada krokiem w odpowiednim wymiarze wejścia zawiłe.