Mein Modell ist auf Ziffernbildern trainiert ( MNIST dataset
). Ich versuche, die Ausgabe der zweiten Schicht meines Netzwerks zu drucken - ein Array mit 128 Zahlen.
Nachdem viele Beispiele zu lesen - zum Beispiel dieses , und dies , oder dies .
Ich habe es in meinem eigenen Netzwerk nicht geschafft. Keine der Lösungen funktioniert mit meinem eigenen Algorithmus.
Link zu Colab: https://colab.research.google.com/drive/1MLbpWJmq8JZB4_zKongaHP2o3M1FpvAv?fbclid=IwAR20xRz2i6sFS-Nm6Xwfk5hztdXOuxY4tZaD
Ich habe viele verschiedene Fehlermeldungen erhalten. Ich habe versucht, mit jedem von ihnen umzugehen, konnte es aber nicht alleine herausfinden.
Was vermisse ich? Wie wird die zweite Ebene ausgegeben?
Wenn meine Form ist (28,28)
- was sollte der Typ und Wert von sein input_shape
?
Fehlgeschlagene Versuche und Fehler zum Beispiel:
(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: Eingaben sollten eine Liste oder ein Tupel sein.
(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: Fehler beim Lesen der Ressourcenvariablen Dichte_1 / Bias aus Container: localhost. Dies könnte bedeuten, dass die Variable nicht initialisiert wurde. Nicht gefunden: Container localhost existiert nicht. (Ressource konnte nicht gefunden werden: localhost / dicht_1 / Bias) [[{{Knoten dicht_1 / BiasAdd / ReadVariableOp}}]]
quelle
Antworten:
Sieht so aus, als würden Sie alte Keras (vor Tensorflow 2.0 :)
import keras
und neue Keras (from tensorflow import keras
) mischen .Versuchen Sie, keine alten Keras neben Tensorflow> = 2.0 zu verwenden (und beziehen Sie sich nicht auf die alte Dokumentation wie in Ihrem ersten Link), da diese leicht mit der neuen verwechselt werden kann (obwohl nichts streng unlogisch ist):
Das Verhalten beim Mischen dieser beiden Bibliotheken ist sehr instabil.
Sobald dies erledigt ist, verwenden Sie eine Antwort von dem, was Sie versucht haben, m ist Ihr Modell und
my_input_shape
ist die Form Ihrer Modelleingabe, dh die Form eines Bildes (hier (28, 28) oder (1, 28, 28), falls vorhanden Chargen):Wenn Sie ein Bild haben
img
, können Sie direkt schreibennew_temp_model.predict(img)
quelle
input_shape=(28, 28)
my_input_data
Sie diese natürlich durch Ihre eigenen Daten ersetzen(Angenommen, TF2)
Ich denke, der einfachste Ansatz wäre, Ihre Ebenen zu benennen und sie dann mit Standardeingabe aufzurufen, damit Ihr Modell möglicherweise so aussieht
Dann erstellen Sie einfach eine Eingabe und
output_of_hidden
ist das, wonach Sie suchenAlternativer Ansatz
Wenn Sie nach einer allgemeineren Lösung suchen und davon ausgehen, dass Ihr Modell sequentiell ist, können Sie das
index
Schlüsselwortget_layer
wie folgt verwendenAm Ende dieser Schleife
my_input
sollte das stehen, wonach Sie suchenquelle
output_of_hidden.numpy()
und es konvertiert es in numpy Array