3
votes

Comment exécuter n'importe quelle couche Keras en tant que couche unique pour comprendre son comportement?

Afin de comprendre l'implémentation de n'importe quelle couche Keras (par exemple Conv2DTranspose ), existe-t-il un moyen d'exécuter la couche en tant que couche autonome (avec le backend Tensorflow)?


0 commentaires

3 Réponses :


0
votes

Vous pouvez extraire les poids de chaque couche en keras et l'utiliser pour initialiser les poids de la nouvelle couche du même type. Ensuite, utilisez cette nouvelle couche comme modèle et faites simplement des prévisions. Si la couche n'est pas la première, vous devez recréer le modèle avec toutes les couches jusqu'à la couche souhaitée, initialiser leurs poids avec les poids du modèle entraîné et le reste est le même.


4 commentaires

Je suppose que je ne suis intéressé que par un modèle avec une seule couche ou seulement une couche que je peux pour indépendamment.


Ok, je comprends, mais s'il y a 4 couches Conv en séquence, la 3ème prend la sortie de la 2ème couche (carte des caractéristiques) comme entrée, pas comme image. Comment pensez-vous créer cette carte des caractéristiques? Ou que donnerez-vous à la couche comme entrée?


Raison pour laquelle j'ai écrit, y a-t-il une approche à ma question.


Non, c'est tout le problème. C'est pourquoi j'ai écrit ce commentaire avec ces questions ... Il y a une chose à faire mais je ne le ferais pas. Si vous utilisez l'API fonctionnelle Keras, vous pouvez enregistrer quelques sorties de la couche juste avant la couche souhaitée et l'observer. Ensuite, créez un modèle avec un seul calque, celui que vous souhaitez voir et initialiser ses poids avec les poids à partir de, le même calque du modèle et alimentez les images en sortie du calque précédent que vous avez enregistré et voyez ce qui se passe. Mais vous ne pourrez pas voir grand-chose car vous ne comprendrez pas ce qui se passe dans la couche avant



1
votes

J'ai trouvé un moyen de développer un modèle simple à une seule couche.

keras_model = Sequential()
keras_model.add(Conv2DTranspose(32, (2, 2), strides=(2, 2), input_shape=(32, 32, 3), name='trans'))
keras_model.compile(loss=keras.losses.categorical_crossentropy, optimizer=keras.optimizers.SGD())
keras_model.summary()
keras_model.save('model.h5')


0 commentaires

0
votes

Je l'ai fait de cette façon:

image_t = ds.make_one_shot_iterator().get_next() 
inputs = Input(shape=(224, 224, 3))
conv = Conv2D(16, (3, 3), padding='same')(inputs)
m = Model(inputs=inputs, outputs=conv)
m.compile(loss='mse', optimizer='rmsprop')  # loss and optimizer do not matter really
m.summary()

with tf.Session() as sess:                                                                                                                                                                                                                                        
   image = sess.run([image_t])                                                                                                                                                                                                                                         
   out = m.predict(image)[0]  


1 commentaires

le code tensorflow pour ce que j'ai écrit pour keras dans le fil ci-dessous en guise de réponse.