2017-07-08 35 views
5

Próbowałem zbudować sekwencyjny model w Kerasie przy użyciu warstwy łączącej tf.nn.fractional_max_pool. Wiem, że mógłbym spróbować stworzyć własną warstwę niestandardową w Kerasie, ale próbuję sprawdzić, czy mogę użyć warstwy już w Tensorflow. W przypadku następującego fragmentu kodu:Używanie warstw Tensorflow w Kuli

p_ratio=[1.0, 1.44, 1.44, 1.0] 

model = Sequential() 
model.add(ZeroPadding2D((2,2), input_shape=(1, 48, 48))) 
model.add(Conv2D(320, (3, 3), activation=PReLU())) 
model.add(ZeroPadding2D((1,1))) 
model.add(Conv2D(320, (3, 3), activation=PReLU())) 
model.add(InputLayer(input_tensor=tf.nn.fractional_max_pool(model.layers[3].output, p_ratio))) 

Otrzymuję tę error. Próbowałem innych rzeczy z Input zamiast InputLayer, a także funkcjonalnego API Keras, ale jak dotąd nie ma szczęścia.

+0

Dobra robota. Sugeruję przeniesienie części EDIT w odpowiedzi (nie ma nic złego w odpowiadaniu na twoje własne pytania w SO) i zaakceptować to. – desertnaut

+0

@desertnaut zrobi! –

Odpowiedz

5

Gotowy do pracy. Na przyszłość, w ten sposób będziesz musiał go wdrożyć. Od tf.nn.fractional_max_pool zwraca 3 tensorów, trzeba się tylko pierwszy z nich:

model.add(InputLayer(input_tensor=tf.nn.fractional_max_pool(model.layers[3].output, p_ratio)[0])) 

lub przy użyciu warstwy lambda:

def frac_max_pool(x): 
    return tf.nn.fractional_max_pool(x,p_ratio)[0] 

Z istoty implementacji modelu

model.add(Lambda(frac_max_pool))