Mon modèle est formé aux images numériques ( MNIST dataset
). J'essaie d'imprimer la sortie de la deuxième couche de mon réseau - un tableau de 128 chiffres.
Après avoir lu beaucoup d'exemples - par exemple ce , et cela , ou cela .
Je n'ai pas réussi à le faire sur mon propre réseau. Aucune des solutions ne fonctionne avec mon propre algorithme.
Lien vers Colab: https://colab.research.google.com/drive/1MLbpWJmq8JZB4_zKongaHP2o3M1FpvAv?fbclid=IwAR20xRz2i6sFS-Nm6Xwfk5hztdXOuxY4tZaDRXxAx3b98I
J'ai reçu beaucoup de messages d'erreur différents. J'ai essayé de gérer chacun d'eux, mais je ne pouvais pas le comprendre par moi-même.
Qu'est-ce que je rate? Comment sortir la deuxième couche?
Si ma forme est (28,28)
- quel devrait être le type et la valeur de input_shape
?
Essais et erreurs ayant échoué, par exemple:
(1)
for layer in model.layers:
get_2nd_layer_output = K.function([model.layers[0].input],[model.layers[2].output])
layer_output = get_2nd_layer_output(layer)[0]
print('\nlayer output: get_2nd_layer_output=, layer=', layer, '\nlayer output: get_2nd_layer_output=', get_2nd_layer_output)
TypeError: les entrées doivent être une liste ou un tuple.
(2)
input_shape=(28, 28)
inp = model.input # input placeholder
outputs = [layer.output for layer in model.layers] # all layer outputs
functor = K.function([inp, K.learning_phase()], outputs ) # evaluation function
# Testing
test = np.random.random(input_shape)[np.newaxis,...]
layer_outs = functor([test, 0.])
print('layer_outs',layer_outs)
tensorflow.python.framework.errors_impl.FailedPreconditionError: Erreur lors de la lecture de la variable de ressource dense_1 / biais du conteneur: localhost. Cela pourrait signifier que la variable n'était pas initialisée. Introuvable: l'hôte local de conteneur n'existe pas. (Impossible de trouver la ressource: localhost / dense_1 / biais) [[{{node dense_1 / BiasAdd / ReadVariableOp}}]]
la source
Réponses:
On dirait que vous mélangez d'anciens keras (avant tensorflow 2.0:)
import keras
et de nouveaux keras (from tensorflow import keras
).Essayez de ne pas utiliser d'anciens kéros avec tensorflow> = 2.0 (et de ne pas vous référer à l'ancienne documentation comme dans votre premier lien), car elle est facilement confondue avec la nouvelle (bien que rien de strictement illogique):
Le comportement sera très instable en mélangeant ces deux bibliothèques.
Une fois cela fait, en utilisant une réponse de ce que vous avez essayé, m étant votre modèle et
my_input_shape
étant la forme de vos modèles, c'est-à-dire la forme d'une image (ici (28, 28) ou (1, 28, 28) si vous avez lots):Si vous avez une image,
img
vous pouvez directement écrirenew_temp_model.predict(img)
la source
input_shape=(28, 28)
my_input_data
par vos propres données bien sûr(En supposant TF2)
Je pense que l'approche la plus simple serait de nommer vos couches, puis de les appeler avec une entrée standard, de sorte que votre modèle pourrait ressembler à
Ensuite, créez simplement une entrée et
output_of_hidden
est ce que vous cherchezApproche alternative
Si vous cherchez une solution plus générale, en supposant que votre modèle est séquentiel, vous pouvez utiliser le
index
mot - cléget_layer
comme ceciÀ la fin de cette boucle
my_input
devrait être ce que vous recherchezla source
output_of_hidden.numpy()
et il le convertira en tableau