Meu modelo é treinado em imagens de dígitos ( MNIST dataset
). Estou tentando imprimir a saída da segunda camada da minha rede - uma matriz de 128 números.
Depois de ler um monte de exemplos - por exemplo este , e este , ou esta .
Não consegui fazer isso na minha própria rede. Nenhuma das soluções funciona com meu próprio algoritmo.
Link para Colab: https://colab.research.google.com/drive/1MLbpWJmq8JZB4_zKongaHP2o3M1FpvAv?fbclid=IwAR20xRz2i6sFS-Nm6Xwfk5hztdXOuxY4tZaDRXxAX3b986HToa
Recebi muitas mensagens de erro diferentes. Eu tentei lidar com cada um deles, mas não consegui entender sozinho.
o que estou perdendo? Como produzir a segunda camada?
Se minha Forma é (28,28)
- qual deve ser o tipo e o valor input_shape
?
Tentativas falhas e erros, por exemplo:
(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: as entradas devem ser uma lista ou tupla.
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: Erro ao ler a variável de recurso dense_1 / viés do Contêiner: localhost. Isso pode significar que a variável não foi inicializada. Não encontrado: o host local do contêiner não existe. (Não foi possível encontrar o recurso: localhost / dense_1 / viés) [[{{node dense_1 / BiasAdd / ReadVariableOp}}]]
fonte
Respostas:
Parece que você está misturando keras antigas (antes do tensorflow 2.0:)
import keras
e novas keras (from tensorflow import keras
).Tente não usar keras antigas ao lado do tensorflow> = 2.0 (e não se referir à documentação antiga como no seu primeiro link), pois ela é facilmente confundida com a nova (embora nada estritamente ilógico):
O comportamento será altamente instável, misturando essas duas bibliotecas.
Uma vez feito isso, usando uma resposta do que você tentou, estou sendo seu modelo e
my_input_shape
sendo a forma dos modelos inseridos, ou seja, a forma de uma imagem (aqui (28, 28) ou (1, 28, 28), se você tiver lotes):Se você tem uma imagem,
img
pode escrever diretamentenew_temp_model.predict(img)
fonte
input_shape=(28, 28)
my_input_data
pelos seus próprios dados, é claro(Supondo TF2)
Acho que a abordagem mais direta seria nomear suas camadas e chamá-las com entrada padrão, para que seu modelo possa parecer
Em seguida, basta criar uma entrada e
output_of_hidden
é o que você está procurandoAbordagem alternativa
Se você estiver procurando por uma solução mais geral, assumindo que seu modelo é seqüencial, use a
index
palavra - chaveget_layer
assimNo final desse loop,
my_input
deve estar o que você está procurandofonte
output_of_hidden.numpy()
e ele será convertido em array numpy