Mój model jest przeszkolony w zakresie obrazów cyfrowych ( MNIST dataset
). Próbuję wydrukować dane wyjściowe drugiej warstwy mojej sieci - tablicy 128 liczb.
Po przeczytaniu wielu przykładów - na przykład tego , i tego , czy to .
Nie udało mi się tego zrobić we własnej sieci. Żadne z rozwiązań nie działa w moim własnym algorytmie.
Link do Colab: https://colab.research.google.com/drive/1MLbpWJmq8JZB4_zKongaHP2o3M1FpvAv?fbclid=IwAR20xRz2i6sFS-Nm6Xwfk5hztdXOuxY4tZaDRXxTxg9a986
Otrzymałem wiele różnych komunikatów o błędach. Próbowałem poradzić sobie z każdym z nich, ale nie mogłem tego sam.
czego mi brakuje? Jak wyprowadzić drugą warstwę?
Jeśli mój kształt jest (28,28)
- jaki powinien być typ i wartość input_shape
?
Nieudane próby i błędy, na przykład:
(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: dane wejściowe powinny być listą lub krotką.
(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: Błąd podczas odczytu zmiennej zasobu dense_1 / bias z kontenera: localhost. Może to oznaczać, że zmienna nie została zainicjowana. Nie znaleziono: kontener localhost nie istnieje. (Nie można znaleźć zasobu: localhost / dense_1 / bias) [[{{node dense_1 / BiasAdd / ReadVariableOp}}]]
źródło
Odpowiedzi:
Wygląda na to, że miksujesz stare keras (przed tensorflow 2.0:)
import keras
i nowe keras (from tensorflow import keras
).Staraj się nie używać starych kamer razem z tensorflow> = 2.0 (i nie odwoływać się do starej dokumentacji jak w twoim pierwszym linku), ponieważ łatwo jest ją pomylić z nową (chociaż nie jest to absolutnie nielogiczne):
Zachowanie będzie wysoce niestabilne mieszanie tych dwóch bibliotek.
Gdy to zrobisz, używając odpowiedzi z tego, co próbowałeś, m jest twoim modelem i
my_input_shape
jest kształtem twoich modeli wejściowych, tj. Kształtu jednego obrazu (tutaj (28, 28) lub (1, 28, 28), jeśli masz partie):Jeśli masz jeden obraz
img
, możesz bezpośrednio napisaćnew_temp_model.predict(img)
źródło
input_shape=(28, 28)
my_input_data
oczywiście zastąpić własnymi danymi(Zakładając TF2)
Myślę, że najprostszym podejściem byłoby nazwać swoje warstwy, a następnie wywołać je przy użyciu standardowych danych wejściowych, aby model
Następnie po prostu utwórz dane wejściowe i
output_of_hidden
jest tym, czego szukaszAlternatywne podejście
Jeśli szukasz bardziej ogólnego rozwiązania, zakładając, że Twój model jest sekwencyjny, możesz użyć
index
słowa kluczowego wget_layer
ten sposóbNa końcu tej pętli
my_input
powinno być to, czego szukaszźródło
output_of_hidden.numpy()
a to przekształci go w tablicę