0

Je tente de reproduire un réseau de convolution neurale à partir d'un document de recherche en utilisant Tensorflow. Image of architectureCorrectement concaténer des cartes de caractéristiques dans Tensorflow

Il y a plusieurs fois dans le diagramme où les résultats des convolutions sont concaténés. Actuellement, j'utilise tf.concat (https://www.tensorflow.org/api_docs/python/tf/concat) le long du dernier axe (représentant les canaux) pour concaténer ces cartes de caractéristiques. Je pensais à l'origine que je voudrais concaténer le long de tous les axes, mais cela ne semble pas être une option dans tensorflow. Maintenant, je suis confronté au problème où le papier indique que les tenseurs (cartes de caractéristiques) de différentes tailles devraient être concaténés. tf.concat ne supporte pas les concaténations de tailles différentes, donc je me demandais si c'était la bonne commande à utiliser en premier lieu. En résumé, quelle est la bonne façon de concaténer les cartes de caractéristiques (parfois de différentes tailles) en tensorflow?

Merci.

Répondre

1

Il est impossible et inutile de concaténer des cartes de caractéristiques de différentes tailles.

Si vous souhaitez concaténer 2 tenseurs, toutes les dimensions sauf la concaténation doivent être égales. À partir de l'image que vous avez affichée, vous pouvez voir que toutes les entités qui sont concaténées ont la même étendue spatiale (mais une profondeur différente) de l'autre. Si vous ne pouvez pas concaténer de cette façon, la probabilité est que quelque chose ne va pas dans votre code, et probablement le problème est l'absence de padding = valide dans l'opération de convolution.

0

Les tenseurs ne peuvent être concaténés que le long d'un axe. Si vous devez concaténer des cartes de caractéristiques de différentes tailles, vous devez en quelque sorte manipuler les tailles des tenseurs d'origine.

0

Le problème que vous rencontrez pour le réseau de création peut être résolu en utilisant un remplissage dans les couches convolutionnelles pour garder la même taille. Pour les blocs de création, au lieu d'utiliser le remplissage "VALID", remplacez-le par "SAME". Ainsi, sans nécessiter de redimensionnement, vous pouvez concaténer les sorties.

Vous pouvez également ajouter un remplissage aux mappes de fonctions qui vont être concaténées. Vous pouvez le faire en utilisant tf.pad().

Si vous préférez ne pas le faire, vous pouvez utiliser la fonction tf.image.resize_images pour les redimensionner aux mêmes valeurs. Cependant, il s'agit d'une approche sale et coûteuse en termes de calcul.