InterpreterApi

सार्वजनिक इंटरफ़ेस इंटरप्रेटरएपीआई
ज्ञात अप्रत्यक्ष उपवर्ग

प्रयोगात्मक तरीकों को छोड़कर, TensorFlow Lite मॉडल दुभाषिया का इंटरफ़ेस।

एक InterpreterApi उदाहरण एक पूर्व-प्रशिक्षित TensorFlow Lite मॉडल को इनकैप्सुलेट करता है, जिसमें मॉडल अनुमान के लिए ऑपरेशन निष्पादित किए जाते हैं।

उदाहरण के लिए, यदि कोई मॉडल केवल एक इनपुट लेता है और केवल एक आउटपुट लौटाता है:

try (InterpreterApi interpreter =
     new InterpreterApi.create(file_of_a_tensorflowlite_model)) {
   interpreter.run(input, output);
 }
 

यदि कोई मॉडल एकाधिक इनपुट या आउटपुट लेता है:

Object[] inputs = {input0, input1, ...};
 Map<Integer, Object> map_of_indices_to_outputs = new HashMap<>();
 FloatBuffer ith_output = FloatBuffer.allocateDirect(3 * 2 * 4);  // Float tensor, shape 3x2x4.
 ith_output.order(ByteOrder.nativeOrder());
 map_of_indices_to_outputs.put(i, ith_output);
 try (InterpreterApi interpreter =
     new InterpreterApi.create(file_of_a_tensorflowlite_model)) {
   interpreter.runForMultipleInputsOutputs(inputs, map_of_indices_to_outputs);
 }
 

यदि कोई मॉडल स्ट्रिंग टेंसर लेता है या उत्पन्न करता है:

String[] input = {"foo", "bar"};  // Input tensor shape is [2].
 String[][] output = new String[3][2];  // Output tensor shape is [3, 2].
 try (InterpreterApi interpreter =
     new InterpreterApi.create(file_of_a_tensorflowlite_model)) {
   interpreter.runForMultipleInputsOutputs(input, output);
 }
 

ध्यान दें कि आकार [] और आकार [1] के बीच अंतर है। स्केलर स्ट्रिंग टेंसर आउटपुट के लिए:

String[] input = {"foo"};  // Input tensor shape is [1].
 ByteBuffer outputBuffer = ByteBuffer.allocate(OUTPUT_BYTES_SIZE);  // Output tensor shape is [].
 try (Interpreter interpreter = new Interpreter(file_of_a_tensorflowlite_model)) {
   interpreter.runForMultipleInputsOutputs(input, outputBuffer);
 }
 byte[] outputBytes = new byte[outputBuffer.remaining()];
 outputBuffer.get(outputBytes);
 // Below, the `charset` can be StandardCharsets.UTF_8.
 String output = new String(outputBytes, charset);
 

टोको के साथ TensorFlow मॉडल को TensorFlowLite मॉडल में परिवर्तित करते समय इनपुट और आउटपुट के ऑर्डर निर्धारित किए जाते हैं, जैसे कि इनपुट के डिफ़ॉल्ट आकार होते हैं।

जब इनपुट (बहु-आयामी) सरणियों के रूप में प्रदान किए जाते हैं, तो संबंधित इनपुट टेंसर को उस सरणी के आकार के अनुसार अंतर्निहित रूप से आकार दिया जाएगा। जब इनपुट Buffer प्रकार के रूप में प्रदान किए जाते हैं, तो कोई अंतर्निहित आकार परिवर्तन नहीं किया जाता है; कॉल करने वाले को यह सुनिश्चित करना होगा कि Buffer बाइट का आकार या तो संबंधित टेंसर से मेल खाता है, या वे पहले resizeInput(int, int[]) के माध्यम से टेंसर का आकार बदलते हैं। टेन्सर आकार और प्रकार की जानकारी Tensor वर्ग के माध्यम से प्राप्त की जा सकती है, जो getInputTensor(int) और getOutputTensor(int) के माध्यम से उपलब्ध है।

चेतावनी: InterpreterApi इंस्टेंसेस थ्रेड-सुरक्षित नहीं हैं।

चेतावनी: एक InterpreterApi इंस्टेंस के पास ऐसे संसाधन होते हैं जिन्हें close() को लागू करके स्पष्ट रूप से मुक्त किया जाना चाहिए

TFLite लाइब्रेरी NDK API 19 के विरुद्ध बनाई गई है। यह 19 से नीचे के Android API स्तरों के लिए काम कर सकती है, लेकिन इसकी गारंटी नहीं है।

नेस्टेड क्लासेस

कक्षा दुभाषियाएपीआई.विकल्प रनटाइम दुभाषिया व्यवहार को नियंत्रित करने के लिए एक विकल्प वर्ग।

सार्वजनिक तरीके

अमूर्त शून्य
आबंटितटेन्सर ()
यदि आवश्यक हो, तो सभी टेंसरों के लिए आवंटन को स्पष्ट रूप से अद्यतन करता है।
अमूर्त शून्य
बंद करना ()
InterpreterApi इंस्टेंस से जुड़े संसाधन जारी करें।
स्थैतिक दुभाषिया एपीआई
बनाएं ( फ़ाइल मॉडलफ़ाइल, इंटरप्रेटरएपीआई.विकल्प विकल्प)
निर्दिष्ट मॉडल और विकल्पों का उपयोग करके एक InterpreterApi उदाहरण का निर्माण करता है।
स्थैतिक दुभाषिया एपीआई
बनाएं ( ByteBuffer byteBuffer, InterpreterApi.Options विकल्प)
निर्दिष्ट मॉडल और विकल्पों का उपयोग करके एक InterpreterApi उदाहरण का निर्माण करता है।
सार इंट
getInputIndex ( स्ट्रिंग opName)
इनपुट का ऑप नाम दिए गए इनपुट का सूचकांक प्राप्त करता है।
अमूर्त टेंसर
getInputTensor (int इनपुट इंडेक्स)
प्रदान किए गए इनपुट इंडेक्स के साथ टेंसर को संबद्ध करता है।
सार इंट
getInputTensorCount ()
इनपुट टेंसर की संख्या प्राप्त करें.
सार लंबा
getLastNativeInferenceDuration नैनोसेकंड ()
मूल अनुमान समय लौटाता है।
सार इंट
getOutputIndex ( स्ट्रिंग opName)
आउटपुट का ऑप नाम दिए गए आउटपुट का इंडेक्स प्राप्त करता है।
अमूर्त टेंसर
getOutputTensor (int आउटपुट इंडेक्स)
प्रदान किए गए आउटपुट इंडेक्स के साथ टेंसर को संबद्ध करता है।
सार इंट
getOutputTensorCount ()
आउटपुट टेंसर की संख्या प्राप्त करें।
अमूर्त शून्य
resizeInput (int idx, int[] dims, बूलियन सख्त)
मूल मॉडल के idx-वें इनपुट का आकार दिए गए डिम्स में बदलता है।
अमूर्त शून्य
आकार बदलेंइनपुट (int idx, int[] dims)
मूल मॉडल के idx-वें इनपुट का आकार दिए गए डिम्स में बदलता है।
अमूर्त शून्य
चलाएँ ( ऑब्जेक्ट इनपुट, ऑब्जेक्ट आउटपुट)
यदि मॉडल केवल एक इनपुट लेता है, और केवल एक आउटपुट प्रदान करता है, तो मॉडल अनुमान चलाता है।
अमूर्त शून्य
runForMultipleInputsOutputs ( ऑब्जेक्ट[] इनपुट, मैप < इंटेगर , ऑब्जेक्ट > आउटपुट)
यदि मॉडल एकाधिक इनपुट लेता है, या एकाधिक आउटपुट देता है तो मॉडल अनुमान चलाता है।

विरासत में मिली विधियाँ

सार्वजनिक तरीके

सार्वजनिक सार शून्य आवंटनटेन्सर्स ()

यदि आवश्यक हो, तो सभी टेंसरों के लिए आवंटन को स्पष्ट रूप से अद्यतन करता है।

यह दिए गए अनुसार इनपुट टेंसर आकार(आकारों) का उपयोग करके आश्रित टेंसर के लिए आकार और मेमोरी आवंटन का प्रचार करेगा।

नोट: यह कॉल *पूरी तरह से वैकल्पिक* है। यदि किसी इनपुट टेंसर का आकार बदल दिया गया है तो निष्पादन के दौरान टेंसर आवंटन स्वचालित रूप से हो जाएगा। यह कॉल ग्राफ़ को निष्पादित करने से पहले किसी भी आउटपुट टेंसर के लिए आकार निर्धारित करने में सबसे उपयोगी है, उदाहरण के लिए,

 interpreter.resizeInput(0, new int[]{1, 4, 4, 3}));
 interpreter.allocateTensors();
 FloatBuffer input = FloatBuffer.allocate(interpreter.getInputTensor(0).numElements());
 // Populate inputs...
 FloatBuffer output = FloatBuffer.allocate(interpreter.getOutputTensor(0).numElements());
 interpreter.run(input, output)
 // Process outputs...

ध्यान दें: कुछ ग्राफ़ में गतिशील रूप से आकार के आउटपुट होते हैं, ऐसी स्थिति में आउटपुट आकार तब तक पूरी तरह से प्रसारित नहीं हो सकता जब तक कि अनुमान निष्पादित नहीं हो जाता।

फेंकता
IllegalStateException यदि ग्राफ़ के टेंसर सफलतापूर्वक आवंटित नहीं किए जा सके।

सार्वजनिक सार शून्य बंद करें ()

InterpreterApi इंस्टेंस से जुड़े संसाधन जारी करें।

सार्वजनिक स्थैतिक InterpreterApi बनाएं ( फ़ाइल मॉडलफ़ाइल, InterpreterApi.Options विकल्प)

निर्दिष्ट मॉडल और विकल्पों का उपयोग करके एक InterpreterApi उदाहरण का निर्माण करता है। मॉडल को एक फ़ाइल से लोड किया जाएगा.

पैरामीटर
मॉडलफ़ाइल एक फ़ाइल जिसमें पूर्व-प्रशिक्षित टीएफ लाइट मॉडल है।
विकल्प दुभाषिया व्यवहार को अनुकूलित करने के लिए विकल्पों का एक सेट।
फेंकता
अवैध तर्क अपवाद यदि modelFile वैध TensorFlow Lite मॉडल को एनकोड नहीं करता है।

सार्वजनिक स्थैतिक InterpreterApi बनाएं ( ByteBuffer byteBuffer, InterpreterApi.Options विकल्प)

निर्दिष्ट मॉडल और विकल्पों का उपयोग करके एक InterpreterApi उदाहरण का निर्माण करता है। मॉडल को ByteBuffer से पढ़ा जाएगा।

पैरामीटर
बाइटबफ़र बाइनरी क्रमबद्ध रूप में एक पूर्व-प्रशिक्षित टीएफ लाइट मॉडल। InterpreterApi इंस्टेंस के निर्माण के बाद बाइटबफ़र को संशोधित नहीं किया जाना चाहिए। ByteBuffer या तो एक MappedByteBuffer हो सकता है जो एक मॉडल फ़ाइल को मेमोरी-मैप करता है, या नेटिवऑर्डर () का एक सीधा ByteBuffer सकता है जिसमें एक मॉडल की बाइट्स सामग्री होती है।
विकल्प दुभाषिया व्यवहार को अनुकूलित करने के लिए विकल्पों का एक सेट।
फेंकता
अवैध तर्क अपवाद यदि byteBuffer MappedByteBuffer नहीं है और न ही नेटिवऑर्डर का प्रत्यक्ष ByteBuffer

सार्वजनिक सार int getInputIndex ( स्ट्रिंग opName)

इनपुट का ऑप नाम दिए गए इनपुट का सूचकांक प्राप्त करता है।

पैरामीटर
opName
फेंकता
अवैध तर्क अपवाद यदि opName दुभाषिया को आरंभ करने के लिए उपयोग किए गए मॉडल में किसी भी इनपुट से मेल नहीं खाता है।

सार्वजनिक सार टेंसर getInputTensor (int इनपुट इंडेक्स)

प्रदान किए गए इनपुट इंडेक्स के साथ टेंसर को संबद्ध करता है।

पैरामीटर
इनपुटइंडेक्स
फेंकता
अवैध तर्क अपवाद यदि inputIndex नकारात्मक है या मॉडल इनपुट की संख्या से छोटा नहीं है।

सार्वजनिक सार int getInputTensorCount ()

इनपुट टेंसर की संख्या प्राप्त करें.

सार्वजनिक सार लंबा getLastNativeInferenceDurationNanoSecond ()

मूल अनुमान समय लौटाता है।

फेंकता
अवैध तर्क अपवाद यदि मॉडल को दुभाषिया द्वारा प्रारंभ नहीं किया गया है।

सार्वजनिक सार int getOutputIndex ( स्ट्रिंग opName)

आउटपुट का ऑप नाम दिए गए आउटपुट का इंडेक्स प्राप्त करता है।

पैरामीटर
opName
फेंकता
अवैध तर्क अपवाद यदि opName दुभाषिया को आरंभ करने के लिए उपयोग किए गए मॉडल के किसी भी आउटपुट से मेल नहीं खाता है।

सार्वजनिक सार टेंसर getOutputTensor (int आउटपुट इंडेक्स)

प्रदान किए गए आउटपुट इंडेक्स के साथ टेंसर को संबद्ध करता है।

नोट: आउटपुट टेंसर विवरण (उदाहरण के लिए, आकार) अनुमान निष्पादित होने तक पूरी तरह से पॉप्युलेट नहीं किया जा सकता है। यदि आपको अनुमान चलाने से *पहले* अद्यतन विवरण की आवश्यकता है (उदाहरण के लिए, इनपुट टेंसर का आकार बदलने के बाद, जो आउटपुट टेंसर आकार को अमान्य कर सकता है), आवंटन और आकार प्रसार को स्पष्ट रूप से ट्रिगर करने के लिए allocateTensors() उपयोग करें। ध्यान दें कि, आउटपुट आकार वाले ग्राफ़ के लिए जो इनपुट *मान* पर निर्भर हैं, आउटपुट आकार अनुमान चलने तक पूरी तरह से निर्धारित नहीं किया जा सकता है।

पैरामीटर
आउटपुटइंडेक्स
फेंकता
अवैध तर्क अपवाद यदि outputIndex नकारात्मक है या मॉडल आउटपुट की संख्या से छोटा नहीं है।

सार्वजनिक सार int getOutputTensorCount ()

आउटपुट टेंसर की संख्या प्राप्त करें।

सार्वजनिक सार शून्य आकार इनपुट (int idx, int[] dims, बूलियन सख्त)

मूल मॉडल के idx-वें इनपुट का आकार दिए गए डिम्स में बदलता है।

जब `सख्त` सत्य होता है, तो केवल अज्ञात आयामों का आकार बदला जा सकता है। `Tensor.shapeSignature()` द्वारा लौटाए गए सरणी में अज्ञात आयामों को `-1` के रूप में दर्शाया गया है।

पैरामीटर
आईडीएक्स
धुंधली हो जाती है
कठोर
फेंकता
अवैध तर्क अपवाद यदि idx नकारात्मक है या मॉडल इनपुट की संख्या से छोटा नहीं है; या यदि idx-th इनपुट का आकार बदलते समय त्रुटि होती है। इसके अतिरिक्त, त्रुटि तब होती है जब 'सख्त' सत्य होने पर निश्चित आयामों वाले टेंसर का आकार बदलने का प्रयास किया जाता है।

सार्वजनिक सार शून्य आकार इनपुट (int idx, int[] dims)

मूल मॉडल के idx-वें इनपुट का आकार दिए गए डिम्स में बदलता है।

पैरामीटर
आईडीएक्स
धुंधली हो जाती है
फेंकता
अवैध तर्क अपवाद यदि idx नकारात्मक है या मॉडल इनपुट की संख्या से छोटा नहीं है; या यदि idx-th इनपुट का आकार बदलते समय त्रुटि होती है।

सार्वजनिक सार शून्य रन ( ऑब्जेक्ट इनपुट, ऑब्जेक्ट आउटपुट)

यदि मॉडल केवल एक इनपुट लेता है, और केवल एक आउटपुट प्रदान करता है, तो मॉडल अनुमान चलाता है।

चेतावनी: यदि Buffer (अधिमानतः प्रत्यक्ष, लेकिन आवश्यक नहीं) का उपयोग इनपुट/आउटपुट डेटा प्रकार के रूप में किया जाता है तो एपीआई अधिक कुशल है। कृपया बेहतर प्रदर्शन के लिए आदिम डेटा को फीड करने और लाने के लिए Buffer उपयोग करने पर विचार करें। निम्नलिखित कंक्रीट Buffer प्रकार समर्थित हैं:

  • ByteBuffer - किसी भी अंतर्निहित आदिम टेन्सर प्रकार के साथ संगत।
  • FloatBuffer - फ्लोट टेंसर के साथ संगत।
  • IntBuffer - int32 Tensors के साथ संगत।
  • LongBuffer - int64 टेंसर के साथ संगत।
ध्यान दें कि बूलियन प्रकार केवल सरणियों के रूप में समर्थित हैं, Buffer एस या स्केलर इनपुट के रूप में नहीं।

पैरामीटर
इनपुट एक सरणी या बहुआयामी सरणी, या इंट, फ्लोट, लॉन्ग और बाइट सहित आदिम प्रकारों का एक Buffer । आदिम प्रकारों के लिए बड़े इनपुट डेटा को पास करने के लिए Buffer पसंदीदा तरीका है, जबकि स्ट्रिंग प्रकारों के लिए (बहु-आयामी) सरणी इनपुट पथ का उपयोग करने की आवश्यकता होती है। जब Buffer उपयोग किया जाता है, तो मॉडल अनुमान पूरा होने तक इसकी सामग्री अपरिवर्तित रहनी चाहिए, और कॉल करने वाले को यह सुनिश्चित करना होगा कि Buffer उचित पढ़ने की स्थिति में है। एक null मान की अनुमति केवल तभी दी जाती है जब कॉल करने वाला एक Delegate उपयोग कर रहा है जो बफर हैंडल इंटरऑप की अनुमति देता है, और ऐसा बफर इनपुट Tensor से जुड़ा हुआ है।
आउटपुट आउटपुट डेटा की एक बहुआयामी सरणी, या इंट, फ्लोट, लॉन्ग और बाइट सहित आदिम प्रकारों का एक Buffer । जब Buffer उपयोग किया जाता है, तो कॉल करने वाले को यह सुनिश्चित करना होगा कि उसने उचित लिखने की स्थिति निर्धारित की है। एक शून्य मान की अनुमति है, और कुछ मामलों के लिए उपयोगी है, उदाहरण के लिए, यदि कॉल करने वाला एक Delegate उपयोग कर रहा है जो बफर हैंडल इंटरऑप की अनुमति देता है, और ऐसा बफर आउटपुट Tensor से जुड़ा हुआ है ( इंटरप्रेटर.ऑप्शन#सेटअल्लोबफ़रहैंडलआउटपुट(बूलियन) भी देखें) ), या यदि ग्राफ़ में गतिशील रूप से आकार के आउटपुट हैं और कॉल करने वाले को अनुमान लगाने के बाद आउटपुट Tensor आकार को क्वेरी करना होगा, तो आउटपुट टेन्सर से सीधे डेटा प्राप्त करना होगा ( Tensor.asReadOnlyBuffer() के माध्यम से)।
फेंकता
अवैध तर्क अपवाद यदि input शून्य या खाली है, या यदि अनुमान चलाते समय कोई त्रुटि होती है।
अवैध तर्क अपवाद (प्रायोगिक, परिवर्तन के अधीन) यदि अनुमान setCancelled(true) द्वारा बाधित होता है।

सार्वजनिक सार शून्य runForMultipleInputsOutputs ( ऑब्जेक्ट[] इनपुट, मानचित्र < पूर्णांक , ऑब्जेक्ट > आउटपुट)

यदि मॉडल एकाधिक इनपुट लेता है, या एकाधिक आउटपुट देता है तो मॉडल अनुमान चलाता है।

चेतावनी: यदि Buffer एस (अधिमानतः प्रत्यक्ष, लेकिन आवश्यक नहीं) को इनपुट/आउटपुट डेटा प्रकार के रूप में उपयोग किया जाता है तो एपीआई अधिक कुशल है। कृपया बेहतर प्रदर्शन के लिए आदिम डेटा को फीड करने और लाने के लिए Buffer उपयोग करने पर विचार करें। निम्नलिखित कंक्रीट Buffer प्रकार समर्थित हैं:

  • ByteBuffer - किसी भी अंतर्निहित आदिम टेन्सर प्रकार के साथ संगत।
  • FloatBuffer - फ्लोट टेंसर के साथ संगत।
  • IntBuffer - int32 Tensors के साथ संगत।
  • LongBuffer - int64 टेंसर के साथ संगत।
ध्यान दें कि बूलियन प्रकार केवल सरणियों के रूप में समर्थित हैं, Buffer एस या स्केलर इनपुट के रूप में नहीं।

ध्यान दें: inputs और outputs के अलग-अलग तत्वों के लिए null मान की अनुमति केवल तभी दी जाती है जब कॉल करने वाला एक Delegate उपयोग कर रहा है जो बफर हैंडल इंटरऑप की अनुमति देता है, और ऐसा बफर संबंधित इनपुट या आउटपुट Tensor (एस) से जुड़ा हुआ है।

पैरामीटर
आदानों इनपुट डेटा की एक सरणी. इनपुट मॉडल के इनपुट के समान क्रम में होने चाहिए। प्रत्येक इनपुट एक सरणी या बहुआयामी सरणी, या इंट, फ्लोट, लॉन्ग और बाइट सहित आदिम प्रकारों का Buffer हो सकता है। Buffer बड़े इनपुट डेटा को पास करने का पसंदीदा तरीका है, जबकि स्ट्रिंग प्रकारों को (बहु-आयामी) सरणी इनपुट पथ का उपयोग करने की आवश्यकता होती है। जब Buffer का उपयोग किया जाता है, तो मॉडल अनुमान पूरा होने तक इसकी सामग्री अपरिवर्तित रहनी चाहिए, और कॉल करने वाले को यह सुनिश्चित करना होगा कि Buffer उचित पढ़ने की स्थिति में है।
आउटपुट एक मानचित्र जो आउटपुट डेटा के बहुआयामी सरणियों या इंट, फ्लोट, लॉन्ग और बाइट सहित आदिम प्रकारों के Buffer के लिए आउटपुट इंडेक्स को मैप करता है। इसे उपयोग किए जाने वाले आउटपुट के लिए केवल प्रविष्टियाँ रखने की आवश्यकता है। जब Buffer उपयोग किया जाता है, तो कॉल करने वाले को यह सुनिश्चित करना होगा कि उसने उचित लिखने की स्थिति निर्धारित की है। मानचित्र उन मामलों के लिए खाली हो सकता है जहां या तो आउटपुट टेंसर डेटा के लिए बफर हैंडल का उपयोग किया जाता है, या ऐसे मामले जहां आउटपुट को गतिशील रूप से आकार दिया जाता है और कॉल करने वाले को आउटपुट Tensor आकार को क्वेरी करने के बाद अनुमान लगाने के बाद आउटपुट टेंसर से सीधे डेटा प्राप्त करना होगा ( Tensor.asReadOnlyBuffer() के माध्यम से)।
फेंकता
अवैध तर्क अपवाद यदि inputs शून्य या खाली है, यदि outputs शून्य है, या यदि अनुमान चलाते समय कोई त्रुटि होती है।