2017-03-27 3 views
-1

Considérant Text Classification Using Convolutional Neural Networks on Characters exemple: Je veux avoir trois couches de convolution (au lieu de deux dans le code original). Here is the modified code with three layers. Il semble que j'ai des problèmes avec les formes. Pourriez-vous s'il vous plaît considérer le code et laissez-moi savoir ce qui ne va pas avec?TF Apprenez CNN exemple: Comment ajouter une couche supplémentaire?

+0

pouvez-vous partager le message d'erreur? – dv3

Répondre

2

Si vous mettez print(pool1), print(pool2) et print(pool3) dans les lignes 68, 83 et 90, respectivement, vous remarquerez que les deux premiers sont imprimés:

Tensor("CNN_Layer1/transpose:0", shape=(?, 41, 10, 1), dtype=float32) 
Tensor("CNN_Layer2/transpose:0", shape=(?, 11, 10, 1), dtype=float32) 

Et c'est parce que vous ne faisait pas attention avec la dimension de données tout en créant de nouvelles opérations. Jetez un oeil à l'évolution de la dimensionnalité de votre réseau:

byte_list output shape = (?, 100, 256, 1) 
# apply 10x conv1 filters of size (20,256) 
conv1 output shape = (?, 81, 1, 10) 
# apply max_pooling of size 4 and stride 2 + transpose filter dimension 
pool1 output shape = (?, 41, 10, 1) 
# apply 10x conv2 filters of size (20,10) 
conv2 output shape = (?, 22, 1, 10) 
# apply max_pooling of size 4 and stride 2 + transpose filter dimension 
pool2 output shape = (?, 11, 10, 1) 

Ensuite, vous essayez d'appliquer 10x filtres CONV2 de taille (20,10), mais votre tenseur a une forme (?, 11, 10, 1). Si cette opération a été appliquée avec succès, sa forme serait (?, -8, 1, 10), mais les dimensions négatives sont impossibles. Par conséquent, le problème provient de la ligne 86.

Il existe plusieurs façons d'aborder cela, et toutes impliquent de modifier les tailles de filtre et/ou l'architecture réseau. Essayez simplement d'écrire ces dimensions pour garder une trace de ce qui se passe, et vous devriez être capable de comprendre comment le faire. :-)