2015-12-06 3 views
0

J'essaie d'exécuter un script Keras sur une instance AWS. Alors que le script tourne bien sur mon propre ordinateur (Python 2.7 - pas de CPU), il provoque une erreur sur une instance AWS GPU. J'ai installé la dernière version de Theano - et d'autres scripts (par exemple le tutoriel mnist) ne donnent pas d'erreurs.Erreur - Theano + Keras

Le script à l'origine du problème est un script de tutoriel Keras standard (https://github.com/fchollet/keras/blob/master/examples/cifar10_cnn.py). J'ai déjà déplacé, basé sur le guidage Stack Overflow, le mode frontière à "valide" - ce qui semble supprimer un problème. cependant - je rencontre immédiatement le problème suivant (pile d'erreur ci-dessous). J'ai exécuté la ligne suivante à bash "THEANO_FLAGS = optimiseur = fast_compile, périphérique = gpu, floatX = float32 cifar10.py" mais cela n'a pas donné plus d'informations. Peut-être que je devrais passer au paquet nolearn/lasagne - mais s'il vous plaît laissez-moi savoir s'il existe des moyens faciles de résoudre ce problème.

Using Theano backend. 
Using gpu device 0: GRID K520 (CNMeM is disabled) 
X_train shape: (50000, 3, 32, 32) 
50000 train samples 
10000 test samples 
Using real time data augmentation 
---------------------------------------- 
Epoch 0 
---------------------------------------- 
Training... 
Testing... 
Traceback (most recent call last): 
    File "keras_python_4.py", line 152, in <module> 
    score = model.test_on_batch(X_batch, Y_batch) 
    File "/usr/local/lib/python2.7/dist-packages/keras/models.py", line 445, in test_on_batch 
    return self._test(ins) 
    File "/usr/local/lib/python2.7/dist-packages/keras/backend/theano_backend.py", line 357, in __call__ 
    return self.function(*inputs) 
    File "/usr/local/lib/python2.7/dist-packages/theano/compile/function_module.py", line 871, in __call__ 
    storage_map=getattr(self.fn, 'storage_map', None)) 
    File "/usr/local/lib/python2.7/dist-packages/theano/gof/link.py", line 314, in raise_with_op 
    reraise(exc_type, exc_value, exc_trace) 
    File "/usr/local/lib/python2.7/dist-packages/theano/compile/function_module.py", line 859, in __call__ 
    outputs = self.fn() 
ValueError: GpuElemwise. Input dimension mis-match. Input 1 (indices start at 0) has shape[0] == 32, but the output's size on that axis is 16. 
Apply node that caused the error: GpuElemwise{Composite{(i0 * log(clip((i1/i2), i3, i4)))}}[(0, 0)](GpuFromHost.0, GpuSoftmaxWithBias.0, GpuDimShuffle{0,x}.0, CudaNdarrayConstant{[[ 1.00000001e-07]]}, CudaNdarrayConstant{[[ 0.99999988]]}) 
Toposort index: 95 
Inputs types: [CudaNdarrayType(float32, matrix), CudaNdarrayType(float32, matrix), CudaNdarrayType(float32, col), CudaNdarrayType(float32, (True, True)), CudaNdarrayType(float32, (True, True))] 
Inputs shapes: [(16, 10), (32, 10), (32, 1), (1, 1), (1, 1)] 
Inputs strides: [(10, 1), (10, 1), (1, 0), (0, 0), (0, 0)] 
Inputs values: ['not shown', 'not shown', 'not shown', <CudaNdarray object at 0x7f2165bb7730>, <CudaNdarray object at 0x7f2165bb7970>] 
Outputs clients: [[GpuCAReduce{add}{0,1}(GpuElemwise{Composite{(i0 * log(clip((i1/i2), i3, i4)))}}[(0, 0)].0)]] 

HINT: Re-running with most Theano optimization disabled could give you a back-trace of when this node was created. This can be done with by setting the Theano flag 'optimizer=fast_compile'. If that does not work, Theano optimizations can be disabled with 'optimizer=None'. 
HINT: Use the Theano flag 'exception_verbosity=high' for a debugprint and storage map footprint of this apply node. 
+0

Exécutez-vous l'exemple de script auquel vous avez lié sans aucune modification? –

+0

le seul changement que j'ai fait est que j'ai changé le border_mode de "same" à "valide". ce qui évite une erreur plus tôt - mais alors j'ai été perplexe par celui-ci. – user1885116

+0

Il semble étrange qu'un script de démonstration distribué avec Keras ne soit pas sorti de la boîte. Peut-être devriez-vous lever un ticket dans le dépôt Keras Github. –

Répondre

0

Lorsque vous changez border_mode de « même » à « valide », la dimension de votre carte de fonction va progressivement diminuer. À un certain point, la dimension d'une couche devient si petite (on dirait que c'est déjà le cas dans votre cas) que vous ne pouvez plus ajouter de couches supplémentaires.

Si vous spécifiez certaines foulées d'une couche, la taille du filtre et la taille de l'entrée doivent également être compatibles avec la longueur de votre foulée.