Error al utilizar Inception en TensorFlow (la misma salida para todas las imágenes)

Estoy tratando de rastrear una red en el conjunto de datos cifar-10, pero en lugar de usar las imágenes, quiero usar las características de Inceptions antes de la última capa.

Así que escribí un pequeño código de Peace Pf para pasar todas las imágenes en Inception y obtener las características, aquí está:

def run_inference_on_images(images): #Creates graph from saved GraphDef. create_graph() features_vec = np.ndarray(shape=(len(images),2048),dtype=np.float32) with tf.Session() as sess: # Some useful tensors: # 'pool_3:0': A tensor containing the next-to-last layer containing 2048 # float description of the image. # 'DecodeJpeg:0': A numpy array of the image # Runs the softmax tensor by feeding the image data as input to the graph. length = len(images) for i in range(length): print ('inferencing image number',i,'out of', length) features_tensor = sess.graph.get_tensor_by_name('pool_3:0') features = sess.run(features_tensor, {'DecodeJpeg:0': images[i]}) features_vec[i] = np.squeeze(features) return features_vec 

“images” es el conjunto de datos CIFAR-10. Es una matriz numpy con forma (50000,32,32,3)

El problema al que me enfrento es que las salidas de “características” son siempre las mismas, incluso cuando envío imágenes diferentes a la parte “sess.run”. ¿Me estoy perdiendo de algo?

Pude resolver este problema Parece que Inception no funciona con varias matrices como pensé, así que cubrí la matriz a una imagen JPEG y solo la pasé a la red.

A continuación se muestra el código que funciona (el rest es el mismo):

 def run_inference_on_images(images): # Creates graph from saved GraphDef. create_graph() features_vec = np.ndarray(shape=(len(images),2048),dtype=np.float32) with tf.Session() as sess: features_tensor = sess.graph.get_tensor_by_name('pool_3:0') length = len(images) for i in range(length): im = Image.fromarray(images[i],'RGB') im.save("tmp.jpeg") data = tf.gfile.FastGFile("tmp.jpeg", 'rb').read() print ('inferencing image number',i,'out of', length) features = sess.run(features_tensor, {'DecodeJpeg/contents:0': data}) features_vec[i] = np.squeeze(features) return features_vec 

No es seguro. Pero podrías intentar mover tu línea

 features_tensor = sess.graph.get_tensor_by_name('pool_3:0') 

como

 features_tensor = tf.get_tensor_by_name('pool_3:0') 

de la parte de inferencia a la parte de creación del modelo