मैं अंतिम पूलिंग परत की विशेषताओं को छवियों के नए डेटासेट के लिए प्रतिनिधित्व वैक्टर के रूप में निकालने के लिए tensorflow के imageNet trained model का उपयोग कर रहा हूं।पर काबू पाने के लिए ग्राफ़डेफ़ 2 जीबी से बड़ा नहीं हो सकता है
मॉडल के रूप में है एक नई छवि पर भविष्यवाणी की है इस प्रकार है:
python classify_image.py --image_file new_image.jpeg
मैं मुख्य कार्य संपादित ताकि मैं छवियों का एक फ़ोल्डर लेने के लिए और एक बार में सभी छवियों पर भविष्यवाणी लौटने और सुविधा लिख सकते हैं एक सीएसवी फ़ाइल में वैक्टर।
def main(_):
maybe_download_and_extract()
#image = (FLAGS.image_file if FLAGS.image_file else
# os.path.join(FLAGS.model_dir, 'cropped_panda.jpg'))
#edit to take a directory of image files instead of a one file
if FLAGS.data_folder:
images_folder=FLAGS.data_folder
list_of_images = os.listdir(images_folder)
else:
raise ValueError("Please specify image folder")
with open("feature_data.csv", "wb") as f:
feature_writer = csv.writer(f, delimiter='|')
for image in list_of_images:
print(image)
current_features = run_inference_on_image(images_folder+"/"+image)
feature_writer.writerow([image]+current_features)
यह लगभग 21 छवियों के लिए ठीक काम किया लेकिन उसके बाद निम्न त्रुटि के साथ दुर्घटनाग्रस्त हो गया:
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.py", line 1912, in as_graph_def
raise ValueError("GraphDef cannot be larger than 2GB.")
ValueError: GraphDef cannot be larger than 2GB.
मैं विधि बुला run_inference_on_image(images_folder+"/"+image)
पिछले छवि डेटा होगा द्वारा सोचा यहाँ मैं कैसे किया है कि है केवल नए छवि डेटा पर विचार करने के लिए अधिलेखित, जो मामला प्रतीत नहीं होता है। इस मुद्दे को कैसे हल करें?
मैं दूसरे विकल्प के साथ गया और यह तेज़ है। विचार के लिए धन्यवाद! – MedAli
हालांकि एक सवाल है, sess.run '' 'predictions = sess.run (pool_3_tensor, {'DecodeJpeg/content: 0': image_data के पूर्वानुमान भाग में केवल एक की बजाय छवियों की एक सरणी पास करने का कोई तरीका है }) '' – MedAli
मुझे लगता है कि विशेष फ़ीड बिंदु केवल एक छवि पर काम करता है। ग्राफ को बदलना संभव होगा ताकि यह छवियों का एक बैच ले ले, लेकिन इसके लिए छवियों को एक बैच में गठबंधन करने के लिए 'prefetching thread (उदाहरण के लिए' tf.train.batch() ') का उपयोग करना होगा (जिसे करना होगा सभी का एक ही आकार है), और फिर नेटवर्क में थोड़ा बाद में बिंदु में फ़ीड करें। इनपुट के रूप में उपयोग किए जाने वाले टेंसर को बदलने के लिए आपको 'input_map' तर्क' tf.import_graph_def() 'का उपयोग करना होगा। चूंकि उस विशेष ग्राफ की संरचना अनियंत्रित है, हालांकि यह चुनौतीपूर्ण हो सकता है ... – mrry