Répondre

2

Tout d'abord, il est important de comprendre ce que sont x, y et F et pourquoi ils ont besoin de toute projection. Je vais essayer d'expliquer en termes simples, mais la compréhension de base de ConvNets est nécessaire.

x est une donnée d'entrée (appelé tenseur) de la couche, en cas de ConvNets rang de c'est 4. Vous pouvez penser comme un 4-dimensional array. F est généralement une couche de conv (conv+relu+batchnorm dans ce document), et y combine les deux ensemble (formant le canal de sortie). Le résultat de F est également de rang 4, et la plupart des dimensions seront les mêmes que dans x, sauf pour un. C'est exactement ce que la transformation devrait corriger.

Par exemple, la forme x peut être (64, 32, 32, 3), où 64 correspond à la taille du lot, 32x32 à la taille de l'image et 3 aux canaux de couleur (R, G, B). F(x) pourrait être (64, 32, 32, 16): taille du lot ne change jamais, pour simplifier, conv-couche ResNet ne change pas la taille de l'image aussi, mais utilisera probablement un nombre différent de filtres - 16.

Ainsi, pour y=F(x)+x être une opération valide, x doit être "remodelée" de (64, 32, 32, 3) à (64, 32, 32, 16).

Je voudrais souligner ici que "remodeler" ici n'est pas ce que fait numpy.reshape.

Au lieu de cela, x[3] est rembourré avec 13 zéros, comme ceci:

pad(x=[1, 2, 3],padding=[7, 6]) = [0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0] 

Si vous y pensez, cela est une projection d'un vecteur 3 dimensions sur 16 dimensions. En d'autres termes, nous commençons à penser que notre vecteur est le même, mais il y a 13 autres dimensions là-bas. Aucune des autres dimensions x n'est modifiée.

Voici the link au code dans Tensorflow qui fait cela.

+0

Merci beaucoup! J'ai principalement utilisé matlab plutôt que python, et il pourrait y avoir un malentendu je suppose. Dans matlab la dernière dimension est # d'image en python la première dimension est # d'image. – Troy

+0

Je vous ai trouvé. L'ordre peut être différent, mais la projection doit être faite comme décrit dans la réponse. – Maxim

+0

Veuillez ne pas tenir compte de ce qui précède. – Troy

1

Une projection linéaire est celle où chaque nouvelle fonctionnalité est simple une somme pondérée des caractéristiques d'origine. Comme dans le document, cela peut être représenté par une multiplication matricielle. si x est le vecteur de caractéristiques d'entrée N et W est un M -par matrice N, puis le produit de la matrice Wx donne M nouvelles fonctions où chacun est une projection linéaire de x. Chaque ligne de W est un ensemble de poids qui définit l'une des projections linéaires M (c'est-à-dire que chaque ligne de W contient les coefficients pour l'une des sommes pondérées de x).

+0

Merci pour vos gentilles explications. S'il vous plaît confirmer si je comprends bien.Si une entrée x a 3X3 et que nous voulons la projeter en 4X4. Que, nous vectorisons x [3X3] à [9X1]. et le W sera [16X9]. Par conséquent, le W [16X9] x [9X1] = [16X1], et le remodeler à [4X4]. Est-ce ce que vous avez expliqué? – Troy

+0

Oui, vous l'avez. – bogatron

+1

@ W.Choi cette réponse est techniquement correcte, mais un peu trompeuse, comme peut être vu par votre commentaire. S'il vous plaît voir ma réponse. – Maxim