Mi modelo está entrenado en imágenes de dígitos ( MNIST dataset
). Estoy tratando de imprimir la salida de la segunda capa de mi red: una matriz de 128 números.
Después de leer un montón de ejemplos - por ejemplo este , y esto , o esto .
No logré hacer esto en mi propia red. Ninguna de las soluciones funciona con mi propio algoritmo.
Enlace a Colab: https://colab.research.google.com/drive/1MLbpWJmq8JZB4_zKongaHP2o3M1FpvAv?fbclid=IwAR20xRz2i6sFS-Nm6Xwfk5hztdXOuxY4tZaDRXxAx3U98HT6
Recibí muchos mensajes de error diferentes. Traté de manejar cada uno de ellos, pero no pude resolverlo por mi cuenta.
¿Qué me estoy perdiendo? ¿Cómo dar salida a la segunda capa?
Si mi forma es (28,28)
, ¿cuál debería ser el tipo y el valor de input_shape
?
Pruebas fallidas y errores, por ejemplo:
(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: las entradas deben ser una lista o 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: Error al leer la variable de recursos dense_1 / sesgo del Contenedor: localhost. Esto podría significar que la variable no fue inicializada. No encontrado: el contenedor localhost no existe. (No se pudo encontrar el recurso: localhost / dense_1 / bias) [[{{node dense_1 / BiasAdd / ReadVariableOp}}]]
fuente
Respuestas:
Parece que está mezclando viejos keras (antes de tensorflow 2.0:)
import keras
y nuevos keras (from tensorflow import keras
).Intente no usar keras antiguas junto con tensorflow> = 2.0 (y no hacer referencia a la documentación antigua como en su primer enlace), ya que se confunde fácilmente con la nueva (aunque nada estrictamente ilógico):
El comportamiento será altamente inestable al mezclar esas dos bibliotecas.
Una vez hecho esto, utilice una respuesta de lo que intentó, siendo su modelo y
my_input_shape
la forma de entrada de sus modelos, es decir, la forma de una imagen (aquí (28, 28) o (1, 28, 28) si tiene lotes):Si tienes una imagen
img
puedes escribir directamentenew_temp_model.predict(img)
fuente
input_shape=(28, 28)
my_input_data
con sus propios datos, por supuesto(Suponiendo TF2)
Creo que el enfoque más directo sería nombrar sus capas y luego llamarlas con una entrada estándar, para que su modelo se vea así
Luego solo crea una entrada y
output_of_hidden
es lo que buscasEnfoque alternativo
Si está buscando una solución más general, suponiendo que su modelo sea secuencial, puede usar la
index
palabra clave deget_layer
esta maneraAl final de este ciclo
my_input
debería ser lo que estás buscandofuente
output_of_hidden.numpy()
y lo convertirá en una matriz