पर छवि टेंसर का आकार बदलें मैं टेंसरफ्लो के साथ छवि वर्गीकरण समस्या के लिए कुछ छवि इनपुट पढ़ने की कोशिश कर रहा हूं।TensorFlow गतिशील आकार
बेशक, मैं tf.image.decode_jpeg(...)
के साथ ऐसा कर रहा हूं। मेरी छवियों में परिवर्तनीय आकार है और इसलिए मैं छवि टेंसर के लिए एक निश्चित आकार निर्दिष्ट करने में सक्षम नहीं हूं।
लेकिन मुझे छवियों को उनके वास्तविक आकार के आधार पर स्केल करने की आवश्यकता है। विशेष रूप से, मैं छोटी तरफ एक निश्चित मूल्य और लंबी तरफ स्केल अनुपात को संरक्षित करना चाहता हूं।
मैं shape = tf.shape(image)
द्वारा एक निश्चित छवि का वास्तविक आकार प्राप्त कर सकता हूं। मैं भी अब है कि मैं tf.image.resize_images(...)
को new_height
और new_width
पारित नहीं कर सकते क्योंकि उनमें से एक एक टेन्सर है और resize_images
ऊंचाई और चौड़ाई इनपुट के रूप में पूर्णांकों की उम्मीद की तरह
shape = tf.shape(image)
height = shape[0]
width = shape[1]
new_shorter_edge = 400
if height <= width:
new_height = new_shorter_edge
new_width = ((width/height) * new_shorter_edge)
else:
new_width = new_shorter_edge
new_height = ((height/width) * new_shorter_edge)
मेरे समस्या नई नहीं रह बढ़त के लिए गणना करने के लिए कर रहा हूँ ।
क्या टेंसर के पूर्णांक को "बाहर खींचने" का कोई तरीका है या क्या TensorFlow के साथ मेरा कार्य करने का कोई अन्य तरीका है?
अग्रिम धन्यवाद।
संपादित
जब से मैं भी tf.image.resize_images
साथ some other issues था, यहाँ कोड है कि मेरे लिए काम किया है:
shape = tf.shape(image)
height = shape[0]
width = shape[1]
new_shorter_edge = tf.constant(400, dtype=tf.int32)
height_smaller_than_width = tf.less_equal(height, width)
new_height_and_width = tf.cond(
height_smaller_than_width,
lambda: (new_shorter_edge, _compute_longer_edge(height, width, new_shorter_edge)),
lambda: (_compute_longer_edge(width, height, new_shorter_edge), new_shorter_edge)
)
image = tf.expand_dims(image, 0)
image = tf.image.resize_bilinear(image, tf.pack(new_height_and_width))
image = tf.squeeze(image, [0])
यह बहुत अच्छी, अच्छी सुविधा है। लेकिन मेरी समस्या अभी भी मौजूद है। 'tf.image.resize_images (...) 'दूसरे और तीसरे तर्क के रूप में' int32' लेता है। यही वह जगह है जहां 'new_height' और' new_width' के मान चलना चाहिए। टेंसरफ्लो की मेरी समझ में, 'eval()' के लिए एक कॉल काम नहीं करेगा क्योंकि यह केवल रनटाइम पर मूल्यांकन किया जाता है। क्या ग्राफ़ बिल्डिंग समय पर "टेंसर के पहले (और केवल) पूर्णांक को खींचने के लिए" टेंसरफ्लो "कहने का कोई आदेश है? – mackcmillion
कॉलिंग 'tf.image.resize_images (छवि, new_height, new_width)' हमेशा फेंकता है 'टाइपरर: अपेक्षित int32, इसके बजाय' _Message 'प्रकार के टेंसर युक्त सूची मिली। – mackcmillion
आह, यह मेरे लिए एक बग जैसा लगता है। मैंने दायर किया [एक मुद्दा] (https://github.com/tensorflow/tensorflow/issues/1001) और जल्द ही एक फिक्स आउट करने का प्रयास करेगा। – mrry