web-dev-qa-db-fra.com

Keras: comment obtenir des formes de calque dans un modèle séquentiel

Je voudrais accéder à la taille des couches de toutes les couches dans un modèle Keras Sequential. Mon code:

model = Sequential()
model.add(Conv2D(filters=32, 
               kernel_size=(3,3), 
               input_shape=(64,64,3)
        ))
model.add(MaxPooling2D(pool_size=(3,3), strides=(2,2)))

Ensuite, je voudrais que du code comme celui-ci fonctionne

for layer in model.layers:
    print(layer.get_shape())

.. mais ce n'est pas le cas. J'obtiens l'erreur: AttributeError: 'Conv2D' object has no attribute 'get_shape'

13
Toke Faurby

Selon le document officiel pour Keras Layer , on peut accéder à la forme de sortie/entrée de la couche via layer.output_shape ou layer.input_shape.

from keras.models import Sequential
from keras.layers import Conv2D, MaxPool2D


model = Sequential(layers=[
    Conv2D(32, (3, 3), input_shape=(64, 64, 3)),
    MaxPool2D(pool_size=(3, 3), strides=(2, 2))
])

for layer in model.layers:
    print(layer.output_shape)

# Output
# (None, 62, 62, 32)
# (None, 30, 30, 32)
6
Dat Nguyen

Si vous souhaitez que la sortie soit imprimée de manière élégante:

model.summary()

Si vous voulez les tailles sous une forme accessible

for layer in model.layers:
    print(layer.get_output_at(0).get_shape().as_list())

Il existe probablement de meilleures façons d'accéder aux formes que cela. Merci à Daniel pour l'inspiration.

26
Toke Faurby

Utilisez simplement model.summary(), et il imprimera tous les calques avec leurs formes de sortie.


Si vous en avez besoin sous forme de tableaux, de tuples ou etc., vous pouvez essayer:

for l in model.layers:
    print (l.output_shape)

Il viendra comme (Aucun, 62, 62, 32) pour la première couche. Le None est lié à la batch_size et sera défini lors de la formation ou de la prévision.

11
Daniel Möller