2016-10-03 3 views
0

Je suis en train de mettre en œuvre une couche keras personnalisée. La méthode d'appel de ma classe est la suivante.Recherche des dimensions d'une expression intermédiaire keras

def call(self, inputs, mask=None): 
    if type(inputs) is not list or len(inputs) <= 1: 
     raise Exception('Merge must be called on a list of tensors ' 
         '(at least 2). Got: ' + str(inputs)) 
    e1 = inputs[0] 
    e2 = inputs[1] 
    f = K.transpose((K.batch_dot(e1, K.dot(e2, self.W), axes=1))) #Removing K.transpose also works, why? 
    return f 

Je verfied et le code fonctionne mais je suis en train de trouver des moyens de mieux debug lors de l'implémentation d'une couche personnalisée dans keras. En supposant que e1 et e2 sont (taille_batch * d) et W est (d * d) Comment puis-je trouver les dimensions de chaque sous-partie de mon expression? Par exemple. K.dot (e2, self.W), le résultat de batch_dot etc.

Répondre

1

Si vous utilisez le backend theano, vous pouvez définir des fonctions Theano. (like François suggested)

E.g.

import theano 
from keras import layers 

input = layers.Input(params) 
layer = YourLayer(params) 
output = layer(input) 

debug_fn = theano.function([input], output) 
print(debug_fn(numpy_array)) 

Si vous voulez des résultats intermédiaires En général, je les retourne temporairement, comme celui-ci par exemple:

def call(self, inputs, mask=None): 
    if type(inputs) is not list or len(inputs) <= 1: 
     raise Exception('Merge must be called on a list of tensors ' 
         '(at least 2). Got: ' + str(inputs)) 
    e1 = inputs[0] 
    e2 = inputs[1] 
    f = K.transpose((K.batch_dot(e1, K.dot(e2, self.W), axes=1))) #Removing  K.transpose also works, why? 
    return f, e1 


import theano 
from keras import layers 

input = layers.Input(params) 
layer = YourLayer(params) 
output, e1 = layer(input) 

debug_fn = theano.function([input], e1) 
print(debug_fn(numpy_array)) 

Je ne sais pas s'il y a de meilleures pratiques, mais il fonctionne très bien pour moi.

+0

Connaissez-vous le truc similaire pour tensorflow? – Apurv

+0

Malheureusement, je ne le fais pas. Il semble qu'il devrait y avoir [fonctionnalité similaire] (http://stackoverflow.com/questions/35366970/theano-function-equivalent-in-tensorflow) dans tensorflow si! – Tivaro

+0

Avez-vous vérifié [cette publication] (http://stackoverflow.com/questions/37221621/how-to-turn-entire-keras-model-into-theano-function?rq=1)? – Tivaro