Interpreter

Përkthyes i klasës së fundit publike

Klasa e drejtuesit për të nxjerrë konkluzionet e modelit me TensorFlow Lite.

Shënim: Nëse nuk keni nevojë për akses në ndonjë nga veçoritë "eksperimentale" të API-së më poshtë, preferoni të përdorni InterpreterApi dhe InterpreterFactory në vend që të përdorni Interpreter drejtpërdrejt.

Një Interpreter përmbledh një model TensorFlow Lite të trajnuar paraprakisht, në të cilin operacionet ekzekutohen për përfundimin e modelit.

Për shembull, nëse një model merr vetëm një hyrje dhe kthen vetëm një dalje:

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

Nëse një model merr shumë hyrje ose dalje:

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 (Interpreter interpreter = new Interpreter(file_of_a_tensorflowlite_model)) {
   interpreter.runForMultipleInputsOutputs(inputs, map_of_indices_to_outputs);
 }
 

Nëse një model merr ose prodhon tensorë vargu:

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

Vini re se ka një dallim midis formës [] dhe formës[1]. Për daljet skalare të tenzorit të vargut:

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);
 

Rendit e hyrjeve dhe daljeve përcaktohen kur konvertohet modeli TensorFlow në model TensorFlowLite me Toco, siç janë format e paracaktuara të hyrjeve.

Kur hyrjet ofrohen si vargje (shumë-dimensionale), tensori(t) përkatëse hyrëse do të ndryshohet në mënyrë implicite sipas formës së atij grupi. Kur inputet ofrohen si lloje Buffer , nuk bëhet asnjë ndryshim i nënkuptuar i madhësisë; thirrësi duhet të sigurojë që madhësia e bajtit Buffer ose të përputhet me atë të tensorit përkatës, ose që së pari të ndryshojë madhësinë e tensorit nëpërmjet resizeInput(int, int[]) . Informacioni për formën dhe llojin e tensorit mund të merret nëpërmjet klasës Tensor , e disponueshme nëpërmjet getInputTensor(int) dhe getOutputTensor(int) .

PARALAJMËRIM: Instancat Interpreter nuk janë të sigurta për temat. Një Interpreter zotëron burime që duhet të lirohen në mënyrë eksplicite duke thirrur close()

Biblioteka TFLite është ndërtuar kundër NDK API 19. Mund të funksionojë për nivelet e API të Android nën 19, por nuk është e garantuar.

Klasat e mbivendosura

klasës Interpretuesi.Opsionet Një klasë opsionesh për kontrollin e sjelljes së interpretuesit në kohën e ekzekutimit.

Ndërtuesit Publikë

Interpretuesi ( Modeli i skedaritFile)
Inicializon një Interpreter .
Interpretuesi ( Modeli i skedaritFile , opsionet e Interpreter.Options )
Inicializon një Interpreter dhe specifikon opsionet për përshtatjen e sjelljes së përkthyesit.
Interpretuesi ( ByteBuffer byteBuffer)
Inicializon një Interpreter me një ByteBuffer të një skedari model.
Interpreter ( ByteBuffer byteBuffer, opsionet e Interpreter.Options )
Inicializon një Interpreter me një ByteBuffer të një skedari modeli dhe një grup Interpreter.Options të personalizuara.

Metodat publike

i pavlefshëm
allocateTensors ()
Përditëson në mënyrë të qartë alokimet për të gjithë tensorët, nëse është e nevojshme.
i pavlefshëm
mbyll ()
Lëshoni burime të lidhura me shembullin InterpreterApi .
ndër
getInputIndex (OpEmri i vargut )
Merr indeksin e një hyrjeje duke pasur parasysh emrin op të hyrjes.
Tensor
getInputTensor (int inputIndex)
Merr tensorin të lidhur me indeksin e dhënë të hyrjes.
ndër
getInputTensorCount ()
Merr numrin e tensorëve të hyrjes.
Tensor
getInputTensorFromSignature (Emri i hyrjes së vargut , çelësi i nënshkrimit të vargut )
Merr tensorin të lidhur me emrin e dhënë të hyrjes dhe emrin e metodës së nënshkrimit.
E gjatë
getLastNativeInferenceDurationNanosekonda ()
Rikthen kohën e konkluzionit origjinal.
ndër
getOutputIndex (Opname i vargut )
Merr indeksin e një prodhimi duke pasur parasysh emrin op të prodhimit.
Tensor
getOutputTensor (int outputIndex)
Merr tensorin të lidhur me indeksin e dhënë të daljes.
ndër
getOutputTensorCount ()
Merr numrin e tensorëve në dalje.
Tensor
getOutputTensorFromSignature (Emri i daljes së vargut , çelësi i nënshkrimit të vargut )
Merr tensorin të lidhur me emrin e dhënë të daljes në metodën specifike të nënshkrimit.
Vargu[]
getSignatureInputs ( String signature Key)
Merr listën e hyrjeve të SignatureDefs për metodën signatureKey .
Vargu[]
getSignature Keys ()
Merr listën e emrave të metodave të eksportuara SignatureDef të disponueshme në model.
Vargu[]
getSignatureOutputs ( String signature Key)
Merr listën e daljeve të SignatureDefs për metodën signatureKey .
i pavlefshëm
resetVariableTensors ()
Të avancuara: Rivendos të gjithë tensorët e variablave në vlerën e paracaktuar.
i pavlefshëm
resizeInput (int idx, int[] dims, boolean strikte)
Ndryshon madhësinë e hyrjes idx-të të modelit vendas në dims të dhëna.
i pavlefshëm
resizeInput (int idx, int[] dims)
Ndryshon madhësinë e hyrjes idx-të të modelit vendas në dims të dhëna.
i pavlefshëm
ekzekutim (Hyrja e objektit , dalja e objektit )
Ekzekuton konkluzionet e modelit nëse modeli merr vetëm një hyrje dhe siguron vetëm një dalje.
i pavlefshëm
runForMultipleInputsOutputs ( hyrjet e objektit[] , Harta < Integer , Object > daljet)
Ekzekuton konkluzionet e modelit nëse modeli merr hyrje të shumta, ose kthen dalje të shumta.
i pavlefshëm
runSignature ( Harta < String , Object > hyrjet, Harta < String , Object > daljet)
Njësoj si runSignature(Map, Map, String) por nuk kërkon kalimin e një SignatureKey, duke supozuar se modeli ka një SignatureDef.
i pavlefshëm
runSignature ( Harta < String , Object > hyrjet, Harta < String , Object > daljet, String signature Key)
Ekzekuton konkluzionet e modelit bazuar në SignatureDef të ofruar përmes signatureKey .
i pavlefshëm
setAnulo (anuluar boolean)
E avancuar: Ndërpret konkluzionet në mes të një thirrjeje për run(Object, Object) .

Metodat e trashëguara

Ndërtuesit Publikë

Interpretuesi publik ( Modeli i skedaritFile )

Inicializon një Interpreter .

Parametrat
modelFile një Skedar i një modeli TF Lite të trajnuar paraprakisht.
Hedhjet
IllegalArgumentPërjashtim nëse modelFile nuk kodon një model të vlefshëm TensorFlow Lite.

Interpretuesi publik ( Modeli i skedaritFile , Interpreter. Opsionet e opsioneve)

Inicializon një Interpreter dhe specifikon opsionet për përshtatjen e sjelljes së përkthyesit.

Parametrat
modelFile një skedar i një modeli TF Lite të trajnuar paraprakisht
opsionet një grup opsionesh për përshtatjen e sjelljes së përkthyesit
Hedhjet
IllegalArgumentPërjashtim nëse modelFile nuk kodon një model të vlefshëm TensorFlow Lite.

Interpretuesi publik ( ByteBuffer byteBuffer)

Inicializon një Interpreter me një ByteBuffer të një skedari model.

ByteBuffer nuk duhet të modifikohet pas ndërtimit të një Interpreter . ByteBuffer mund të jetë ose një MappedByteBuffer që memoria harton një skedar modeli, ose një ByteBuffer i drejtpërdrejtë i nativeOrder() që përmban përmbajtjen e bajteve të një modeli.

Parametrat
byteBuffer
Hedhjet
IllegalArgumentPërjashtim nëse byteBuffer nuk është një MappedByteBuffer dhe as një ByteBuffer i drejtpërdrejtë i nativeOrder.

Interpretuesi publik ( ByteBuffer byteBuffer, opsionet e Interpreter.Options )

Inicializon një Interpreter me një ByteBuffer të një skedari modeli dhe një grup Interpreter.Options të personalizuara.

ByteBuffer nuk duhet të modifikohet pas ndërtimit të një Interpreter . ByteBuffer mund të jetë ose një MappedByteBuffer që memoria harton një skedar modeli, ose një ByteBuffer i drejtpërdrejtë i nativeOrder() që përmban përmbajtjen e bajteve të një modeli.

Parametrat
byteBuffer
opsionet
Hedhjet
IllegalArgumentPërjashtim nëse byteBuffer nuk është një MappedByteBuffer dhe as një ByteBuffer i drejtpërdrejtë i nativeOrder.

Metodat publike

publik void allocateTensors ()

Përditëson në mënyrë të qartë alokimet për të gjithë tensorët, nëse është e nevojshme.

Kjo do të përhapë forma dhe alokime të memories për tensorët e varur duke përdorur formën(at) e tensorit hyrës siç është dhënë.

Shënim: Kjo thirrje është *thjesht fakultative*. Shpërndarja e tensorit do të ndodhë automatikisht gjatë ekzekutimit nëse ndonjë tensor hyrës është ndryshuar përmasat. Kjo thirrje është më e dobishme në përcaktimin e formave për çdo tensorë dalës përpara ekzekutimit të grafikut, p.sh.

 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...

Shënim: Disa grafikë kanë rezultate në formë dinamike, në të cilin rast forma e daljes mund të mos përhapet plotësisht derisa të ekzekutohet përfundimi.

mbyllje boshllëku publik ()

Lëshoni burime të lidhura me shembullin InterpreterApi .

publik int getInputIndex ( OpEmri i vargut)

Merr indeksin e një hyrjeje duke pasur parasysh emrin op të hyrjes.

Parametrat
opEmri

Tensor publik getInputTensor (int inputIndex)

Merr tensorin të lidhur me indeksin e dhënë të hyrjes.

Parametrat
InputIndeksi

int publike getInputTensorCount ()

Merr numrin e tensorëve të hyrjes.

Tensor publik getInputTensorFromSignature (Emri i hyrjes së vargut , çelësi i nënshkrimit të vargut )

Merr tensorin të lidhur me emrin e dhënë të hyrjes dhe emrin e metodës së nënshkrimit.

PARALAJMËRIM: Ky është një API eksperimental dhe mund të ndryshojë.

Parametrat
emri i hyrjes Vendosni emrin në nënshkrim.
çelësi i nënshkrimit Çelësi i nënshkrimit që identifikon SignatureDef, mund të jetë i pavlefshëm nëse modeli ka një nënshkrim.
Hedhjet
IllegalArgumentPërjashtim nëse inputName ose signatureKey është i pavlefshëm ose bosh, ose jepet një emër i pavlefshëm.

publike Long GetLastNativeInferenceDurationNanosekonda ()

Rikthen kohën e konkluzionit origjinal.

publike int getOutputIndex ( Vendosja e vargut)

Merr indeksin e një prodhimi duke pasur parasysh emrin op të prodhimit.

Parametrat
opEmri

Tensor publik getOutputTensor (int outputIndex)

Merr tensorin të lidhur me indeksin e dhënë të daljes.

Shënim: Detajet e tensorit të daljes (p.sh. forma) mund të mos plotësohen plotësisht derisa të ekzekutohet përfundimi. Nëse keni nevojë për detaje të përditësuara *para* ekzekutimit të konkluzionit (p.sh., pas ndryshimit të madhësisë së një tensori hyrës, i cili mund të zhvleftësojë format e tensoreve dalëse), përdorni allocateTensors() për të aktivizuar në mënyrë eksplicite alokimin dhe përhapjen e formës. Vini re se, për grafikët me forma dalëse që varen nga *vlerat* e hyrjes, forma dalëse mund të mos përcaktohet plotësisht derisa të ekzekutohet përfundimi.

Parametrat
Indeksi i daljes

int publike getOutputTensorCount ()

Merr numrin e tensorëve në dalje.

Tensor publik getOutputTensorFromSignature ( Emri i daljes së vargut , çelësi i nënshkrimit të vargut )

Merr tensorin të lidhur me emrin e dhënë të daljes në metodën specifike të nënshkrimit.

Shënim: Detajet e tensorit të daljes (p.sh. forma) mund të mos plotësohen plotësisht derisa të ekzekutohet përfundimi. Nëse keni nevojë për detaje të përditësuara *para* ekzekutimit të konkluzionit (p.sh., pas ndryshimit të madhësisë së një tensori hyrës, i cili mund të zhvleftësojë format e tensoreve dalëse), përdorni allocateTensors() për të aktivizuar në mënyrë eksplicite alokimin dhe përhapjen e formës. Vini re se, për grafikët me forma dalëse që varen nga *vlerat* e hyrjes, forma dalëse mund të mos përcaktohet plotësisht derisa të ekzekutohet përfundimi.

PARALAJMËRIM: Ky është një API eksperimental dhe mund të ndryshojë.

Parametrat
emri i daljes Vendosni emrin në nënshkrim.
çelësi i nënshkrimit Çelësi i nënshkrimit që identifikon SignatureDef, mund të jetë i pavlefshëm nëse modeli ka një nënshkrim.
Hedhjet
IllegalArgumentPërjashtim nëse outputName ose signatureKey është i pavlefshëm ose bosh, ose jepet një emër i pavlefshëm.

String publik[] getSignatureInputs ( String signature Key)

Merr listën e hyrjeve të SignatureDefs për metodën signatureKey .

PARALAJMËRIM: Ky është një API eksperimental dhe mund të ndryshojë.

Parametrat
çelësi i nënshkrimit

String publik[] getSignature Keys ()

Merr listën e emrave të metodave të eksportuara SignatureDef të disponueshme në model.

PARALAJMËRIM: Ky është një API eksperimental dhe mund të ndryshojë.

String publik[] getSignatureOutputs ( String signature Key)

Merr listën e daljeve të SignatureDefs për metodën signatureKey .

PARALAJMËRIM: Ky është një API eksperimental dhe mund të ndryshojë.

Parametrat
çelësi i nënshkrimit

rivendosja e zbrazëtisë publikeVariableTensors ()

Të avancuara: Rivendos të gjithë tensorët e variablave në vlerën e paracaktuar.

Nëse një tensor i ndryshueshëm nuk ka një buffer të lidhur, ai do të rivendoset në zero.

PARALAJMËRIM: Ky është një API eksperimental dhe mund të ndryshojë.

public void resizeInput (int idx, int[] dims, boolean strikte)

Ndryshon madhësinë e hyrjes idx-të të modelit vendas në dims të dhëna.

Kur "strict" është e vërtetë, vetëm dimensionet e panjohura mund të ndryshohen. Dimensionet e panjohura tregohen si `-1` në grupin e kthyer nga `Tensor.shapeSignature()`.

Parametrat
idx
zbehet
i rreptë

public void resizeInput (int idx, int[] dims)

Ndryshon madhësinë e hyrjes idx-të të modelit vendas në dims të dhëna.

Parametrat
idx
zbehet

ekzekutimi publik i zbrazët (Hyrja e objektit , dalja e objektit )

Ekzekuton konkluzionet e modelit nëse modeli merr vetëm një hyrje dhe siguron vetëm një dalje.

Paralajmërim: API është më efikas nëse një Buffer (mundësisht i drejtpërdrejtë, por jo i nevojshëm) përdoret si lloji i të dhënave hyrëse/dalëse. Ju lutemi merrni parasysh përdorimin e Buffer për të ushqyer dhe marrë të dhëna primitive për performancë më të mirë. Llojet e mëposhtme të Buffer betonit mbështeten:

  • ByteBuffer - i pajtueshëm me çdo lloj themelor primitiv Tensor.
  • FloatBuffer - i pajtueshëm me tensorët float.
  • IntBuffer - i pajtueshëm me tensorët int32.
  • LongBuffer - i pajtueshëm me tensorët int64.
Vini re se llojet boolean mbështeten vetëm si vargje, jo si Buffer s, ose si hyrje skalare.

Parametrat
hyrje një grup ose një grup shumëdimensional, ose një Buffer i llojeve primitive duke përfshirë int, float, long dhe byte. Buffer është mënyra e preferuar për të kaluar të dhëna të mëdha hyrëse për llojet primitive, ndërsa llojet e vargjeve kërkojnë përdorimin e shtegut të hyrjes së grupit (shumë-dimensionale). Kur përdoret një Buffer , përmbajtja e tij duhet të mbetet e pandryshuar derisa të bëhet përfundimi i modelit dhe thirrësi duhet të sigurojë që Buffer është në pozicionin e duhur të leximit. Një vlerë null lejohet vetëm nëse thirrësi përdor një Delegate që lejon ndërveprimin e trajtimit të tamponit dhe një buffer i tillë është lidhur me Tensor e hyrjes.
prodhimit një grup shumëdimensional i të dhënave dalëse, ose një Buffer i llojeve primitive duke përfshirë int, float, long dhe byte. Kur përdoret një Buffer , thirrësi duhet të sigurojë që i është caktuar pozicioni i duhur i shkrimit. Një vlerë null lejohet dhe është e dobishme për raste të caktuara, p.sh., nëse thirrësi po përdor një Delegate që lejon ndërveprimin e dorezës së tamponit, dhe një tampon i tillë është i lidhur me Tensor e daljes (shih gjithashtu Interpreter.Options#setAllowBufferHandleOutput(boolean) ), ose nëse grafiku ka dalë në mënyrë dinamike, pasi thirrja në formë duhet të jetë në formë Tensor dhe thirret, duke marrë të dhënat direkt nga tensori i daljes (nëpërmjet Tensor.asReadOnlyBuffer() ).

publik void runForMultipleInputsOutputs ( hyrjet e objektit[] , Harta < Integer , Object > daljet)

Ekzekuton konkluzionet e modelit nëse modeli merr hyrje të shumta, ose kthen dalje të shumta.

Paralajmërim: API është më efikas nëse Buffer -et (mundësisht të drejtpërdrejta, por jo të nevojshme) përdoren si llojet e të dhënave hyrëse/dalëse. Ju lutemi merrni parasysh përdorimin e Buffer për të ushqyer dhe marrë të dhëna primitive për performancë më të mirë. Llojet e mëposhtme të Buffer betonit mbështeten:

  • ByteBuffer - i pajtueshëm me çdo lloj themelor primitiv Tensor.
  • FloatBuffer - i pajtueshëm me tensorët float.
  • IntBuffer - i pajtueshëm me tensorët int32.
  • LongBuffer - i pajtueshëm me tensorët int64.
Vini re se llojet boolean mbështeten vetëm si vargje, jo si Buffer s, ose si hyrje skalare.

Shënim: vlerat null për elementet individuale të inputs dhe outputs lejohen vetëm nëse thirrësi përdor një Delegate që lejon ndërveprimin e menaxhimit të tamponit dhe një buffer i tillë është lidhur me Tensor (t) përkatëse hyrëse ose dalëse.

Parametrat
inputet një grup të dhënash hyrëse. Inputet duhet të jenë në të njëjtin rend si hyrjet e modelit. Çdo hyrje mund të jetë një grup ose një grup shumëdimensional, ose një Buffer i llojeve primitive duke përfshirë int, float, long dhe byte. Buffer është mënyra e preferuar për të kaluar të dhëna të mëdha hyrëse, ndërsa llojet e vargjeve kërkojnë përdorimin e shtegut të hyrjes së grupit (shumë-dimensionale). Kur përdoret Buffer , përmbajtja e tij duhet të mbetet e pandryshuar derisa të bëhet përfundimi i modelit dhe thirrësi duhet të sigurojë që Buffer është në pozicionin e duhur të leximit.
daljet një hartë duke hartuar indekset e daljes në grupe shumëdimensionale të të dhënave dalëse ose Buffer s të llojeve primitive duke përfshirë int, float, long dhe byte. Duhet vetëm të mbajë shënime që rezultatet të përdoren. Kur përdoret një Buffer , thirrësi duhet të sigurojë që i është caktuar pozicioni i duhur i shkrimit. Harta mund të jetë bosh për rastet kur ose dorezat e tamponit përdoren për të dhënat tensore dalëse, ose rastet kur daljet kanë formë dinamike dhe thirrësi duhet të kërkojë formën e Tensor të daljes pasi të jetë thirrur konkluzioni, duke marrë të dhënat direkt nga tensori i daljes (nëpërmjet Tensor.asReadOnlyBuffer() ) .

publik void runSignature ( Harta < String , Object > hyrjet, Harta < String , Object > daljet)

Njësoj si runSignature(Map, Map, String) por nuk kërkon kalimin e një SignatureKey, duke supozuar se modeli ka një SignatureDef. Nëse modeli ka më shumë se një SignatureDef, ai do të bëjë një përjashtim.

PARALAJMËRIM: Ky është një API eksperimental dhe mund të ndryshojë.

Parametrat
inputet
daljet

publik void runSignature ( Harta < String , Object > hyrjet, Harta < String , Object > daljet, String signature Key)

Ekzekuton konkluzionet e modelit bazuar në SignatureDef të ofruar përmes signatureKey .

Shihni run(Object, Object) për më shumë detaje mbi llojet e lejuara të të dhënave hyrëse dhe dalëse.

PARALAJMËRIM: Ky është një API eksperimental dhe mund të ndryshojë.

Parametrat
inputet Një hartë nga emri i hyrjes në SignatureDef në një objekt hyrës.
daljet Një hartë nga emri i daljes në SignatureDef për të nxjerrë të dhëna. Kjo mund të jetë bosh nëse thirrësi dëshiron të kërkojë të dhënat Tensor direkt pas përfundimit (p.sh., nëse forma e daljes është dinamike, ose nëse përdoren dorezat e tamponit të daljes).
çelësi i nënshkrimit Çelësi i nënshkrimit që identifikon SignatureDef.
Hedhjet
IllegalArgumentPërjashtim nëse inputs janë të pavlefshme ose të zbrazëta, nëse outputs ose signatureKey është i pavlefshëm, ose nëse ndodh një gabim gjatë ekzekutimit të konkluzionit.

set publik bosh i anuluar (boolean anuluar)

E avancuar: Ndërpret konkluzionet në mes të një thirrjeje për run(Object, Object) .

Një flamur anulimi do të vendoset në true kur ky funksion të thirret. Përkthyesi do të kontrollojë flamurin midis thirrjeve të Op, dhe nëse është true , përkthyesi do të ndalojë ekzekutimin. Përkthyesi do të mbetet një gjendje e anuluar derisa të "anulohet" në mënyrë të qartë nga setCancelled(false) .

PARALAJMËRIM: Ky është një API eksperimental dhe mund të ndryshojë.

Parametrat
anuluar true për të anuluar përfundimin në mënyrën më të mirë; false për të rifilluar.
Hedhjet
IllegalStateException nëse përkthyesi nuk është inicializuar me opsionin e anulueshëm, i cili është si parazgjedhje i fikur.