2017-06-02 2 views
0

J'utilise le TensorFlow pour le laboratoire de code Poets pour me guider lorsque je réapprends Inceptionv3 CNN pour classer une liste d'images. J'ai formé avec succès le modèle, et cela fonctionne quand j'emploie le code donné pour classifier des images individuelles. Mais quand j'essaie de l'utiliser sur un grand nombre d'images, alors le GraphDef ne peut pas être plus grand que 2GB. S'il vous plaît donnez votre avis.Etiquetage des images en utilisant Inception Obtenir ValueError: GraphDef ne peut pas être supérieur à 2 Go

import pandas as pd 
import os, sys 
import tensorflow as tf 
test_images = pd.read_csv('test_images.csv') 
testid = test_images['Id'] 
listx= list(range(4320)) 
predlist=[] 
output = pd.DataFrame({'Id': listx}) 
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' 
for x in listx: 
    path = 'test/'+str(x+1)+'.jpg' 

# change this as you see fit 
    image_path = path 

# Read in the image_data 
    image_data = tf.gfile.FastGFile(image_path, 'rb').read() 

# Loads label file, strips off carriage return 
    label_lines = [line.rstrip() for line 
       in tf.gfile.GFile("retrained_labels.txt")] 

# Unpersists graph from file 
with tf.gfile.FastGFile("retrained_graph.pb", 'rb') as f: 
    graph_def = tf.GraphDef() 
    graph_def.ParseFromString(f.read()) 
    tf.import_graph_def(graph_def, name='') 

with tf.Session() as sess: 
    # Feed the image_data as input to the graph and get first prediction 
    with tf.Graph().as_default(): 
     softmax_tensor = sess.graph.get_tensor_by_name('final_result:0') 

     predictions = sess.run(softmax_tensor, \ 
          {'DecodeJpeg/contents:0': image_data}) 

    # Sort to show labels of first prediction in order of confidence 
    top_k = predictions[0].argsort()[-len(predictions[0]):][::-1] 
    # print('the top result is' + label_lines[node_id]) 
    flag = 0 
    for node_id in top_k: 

     while flag == 0: 
      human_string = label_lines[node_id] 
      score = predictions[0][node_id] 
      predlist.append(int(human_string[:3])) 
      print('%s' % (human_string)) 

      flag = 1 # we only want the top prediction 

sortie [ 'Prediction'] = predlist output.to_csv ('outputtest.csv')

Répondre

1

Une façon par laquelle cette erreur peut E est résolu en plaçant

with tf.Graph().as_default(): 

après pour la boucle. Ceci est le morceau de code qui a fonctionné pour moi en essayant de lire l'image en vrac:

for filename in os.listdir(image_path): 

     with tf.Graph().as_default(): 
     # Read in the image_data 
     image_data = tf.gfile.FastGFile(image_path + filename, 'rb').read()