python - with - tensorflow tutorial



L'entrée de la couche Keras Dense n'est pas aplatie (1)

Actuellement, contrairement à ce qui a été indiqué dans la documentation, la couche Dense s’applique sur le dernier axe du tenseur d’entrée :

Contrairement à la documentation, nous ne l’aplatissons pas. Il est appliqué sur le dernier axe indépendamment.

En d'autres termes, si une couche Dense avec m unités est appliquée sur un tenseur d'entrée de forme (n_dim1, n_dim2, ..., n_dimk) elle aura une forme de sortie de (n_dim1, n_dim2, ..., m) .

Remarque: cela rend TimeDistributed(Dense(...)) et Dense(...) équivalents.

Autre remarque: sachez que cela a pour effet de partager les poids. Par exemple, considérons ce réseau de jouets:

model = Sequential()
model.add(Dense(10, input_shape=(20, 5)))

model.summary()

Le résumé du modèle:

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
dense_1 (Dense)              (None, 20, 10)            60        
=================================================================
Total params: 60
Trainable params: 60
Non-trainable params: 0
_________________________________________________________________

Comme vous pouvez le constater, la couche Dense n'a que 60 paramètres. Comment? Chaque unité de la couche Dense est connectée aux 5 éléments de chaque ligne de l'entrée avec les mêmes pondérations , donc 10 * 5 + 10 (bias params per unit) = 60 .

Mettre à jour. Voici une illustration visuelle de l'exemple ci-dessus:

Ceci est mon code de test:

from keras import layers
input1 = layers.Input((2,3))
output = layers.Dense(4)(input1)
print(output)

La sortie est:

<tf.Tensor 'dense_2/add:0' shape=(?, 2, 4) dtype=float32>

Mais qu'arrive-t-il?

La documentation dit:

Remarque: si l'entrée de la couche a un rang supérieur à 2, elle est aplatie avant le produit scalaire initial avec le noyau.

Alors que la sortie est remodelée?





keras-layer