2017-05-25 1 views
0

J'essaie d'utiliser un CNN sur certaines données mais j'obtiens une erreur dans ma fonction de perte puisque la sortie de mon modèle est la forme [1000, 1000, 4000] quand elle devrait être [ 1000, 4000]. Le premier 1000 dans ce cas est la taille du lot, et le 4000 est le nombre de classes que j'ai puisque c'est un problème de classification.Tensorflow CNN Forme erreur

Je pense que je devrais utiliser la fonction tf.reshape() à nouveau après ma couche fully_connected pour obtenir la bonne sortie, mais je ne suis pas sûr de savoir comment je peux le faire. J'ai déjà essayé tf.reshape (output [-1, 4000]), mais cela garde toujours l'autre 1000 à l'intérieur.

Voici mon code:

cnn_input = tf.reshape(input, [-1, 1000, 1]) 
    net = slim.conv2d(cnn_input, 128, [3]) 
    net = slim.pool(net, [2], "MAX") 
    output = slim.fully_connected(net, num_classes, activation_fn=tf.nn.softmax) 
    return output 

Fondamentalement, ma production doit être une forme de rang 2, mais pour une raison, il est démouler d'avoir 3 dimensions. J'ai besoin que la sortie soit de forme [1000, 4000], ce qui est la taille du lot x num_classes.

Toute aide serait grandement appréciée. Merci d'avance! À propos, j'utilise la bibliothèque tf-slim.

EDIT: Est-ce que tf.flatten fonctionnerait avant la couche fully_connected?

Répondre

0

Je suis tombé sur la même erreur. Le documentation (line 1609) (comme lié de here) indique que l'opération 'fully_connected' est supposée aplatir la sortie, mais ce n'est pas le cas. Je viens d'utiliser slim.flatten avant les deux dernières opérations entièrement connectées comme vous l'avez suggéré, mais je n'ai aucune preuve concrète que cela fonctionne encore.

Avec 6 mois sans commentaires, j'ai pensé que quelque chose serait mieux que rien pour les autres, mais si quelqu'un d'autre a plus d'idées, ce serait apprécié.