| Nënklasa indirekte të njohura |
Ndërfaqja me interpretuesin e modelit TensorFlow Lite, duke përjashtuar metodat eksperimentale.
Një shembull InterpreterApi 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 (InterpreterApi interpreter =
new InterpreterApi.create(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 (InterpreterApi interpreter =
new InterpreterApi.create(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 (InterpreterApi interpreter =
new InterpreterApi.create(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 InterpreterApi nuk janë të sigurta për temat.
PARALAJMËRIM: Një shembull InterpreterApi 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 | InterpreterApi.Opsionet | Një klasë opsionesh për kontrollin e sjelljes së interpretuesit në kohën e ekzekutimit. | |
Metodat publike
| zbrazëti abstrakte | allocateTensors () Përditëson në mënyrë të qartë alokimet për të gjithë tensorët, nëse është e nevojshme. |
| zbrazëti abstrakte | mbyll () Lëshoni burime të lidhura me shembullin InterpreterApi . |
| InterpreterApi statike | krijo ( File modelFile, InterpreterApi.Options opsionet) Ndërton një shembull InterpreterApi , duke përdorur modelin dhe opsionet e specifikuara. |
| InterpreterApi statike | krijo (Opsionet e ByteBuffer byteBuffer, InterpreterApi.Options ) Ndërton një shembull InterpreterApi , duke përdorur modelin dhe opsionet e specifikuara. |
| abstrakte int | getInputIndex (OpEmri i vargut ) Merr indeksin e një hyrjeje duke pasur parasysh emrin op të hyrjes. |
| Tensor abstrakt | getInputTensor (int inputIndex) Merr tensorin të lidhur me indeksin e dhënë të hyrjes. |
| abstrakte int | getInputTensorCount () Merr numrin e tensorëve të hyrjes. |
| abstrakt i gjatë | getLastNativeInferenceDurationNanosekonda () Rikthen kohën e konkluzionit origjinal. |
| abstrakte int | getOutputIndex (Opname i vargut ) Merr indeksin e një prodhimi duke pasur parasysh emrin op të prodhimit. |
| Tensor abstrakt | getOutputTensor (int outputIndex) Merr tensorin të lidhur me indeksin e dhënë të daljes. |
| abstrakte int | getOutputTensorCount () Merr numrin e tensorëve në dalje. |
| zbrazëti abstrakte | resizeInput (int idx, int[] dims, boolean strikte) Ndryshon madhësinë e hyrjes idx-të të modelit vendas në dims të dhëna. |
| zbrazëti abstrakte | resizeInput (int idx, int[] dims) Ndryshon madhësinë e hyrjes idx-të të modelit vendas në dims të dhëna. |
| zbrazëti abstrakte | 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. |
| zbrazëti abstrakte | runForMultipleInputsOutputs ( hyrjet e objektit[] , Harta < Integer , Object > daljet) Ekzekuton konkluzionet e modelit nëse modeli merr hyrje të shumta, ose kthen dalje të shumta. |
Metodat e trashëguara
Metodat publike
abstrakt 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.
Hedhjet
| IllegalStateException | nëse tensorët e grafikut nuk mund të alokohen me sukses. |
|---|
mbyllje abstrakte publike zbrazëti ()
Lëshoni burime të lidhura me shembullin InterpreterApi .
Krijimi publik statik i InterpreterApi ( File modelFile, InterpreterApi.Options opsionet)
Ndërton një shembull InterpreterApi , duke përdorur modelin dhe opsionet e specifikuara. Modeli do të ngarkohet nga një skedar.
Parametrat
| modelFile | Një skedar që përmban një model 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. |
|---|
Krijimi publik statik i InterpreterApi (Opsionet e ByteBuffer byteBuffer, InterpreterApi.Options )
Ndërton një shembull InterpreterApi , duke përdorur modelin dhe opsionet e specifikuara. Modeli do të lexohet nga një ByteBuffer .
Parametrat
| byteBuffer | Një model TF Lite i trajnuar paraprakisht, në formë të serializuar binare. ByteBuffer nuk duhet të modifikohet pas ndërtimit të një shembulli InterpreterApi . 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. |
|---|---|
| opsionet | Një grup opsionesh për përshtatjen e sjelljes së përkthyesit. |
Hedhjet
| IllegalArgumentPërjashtim | nëse byteBuffer nuk është një MappedByteBuffer dhe as një ByteBuffer i drejtpërdrejtë i nativeOrder. |
|---|
abstrakt publik int getInputIndex ( OpEmri i vargut)
Merr indeksin e një hyrjeje duke pasur parasysh emrin op të hyrjes.
Parametrat
| opEmri |
|---|
Hedhjet
| IllegalArgumentPërjashtim | nëse opName nuk përputhet me asnjë hyrje në modelin e përdorur për të inicializuar interpretuesin. |
|---|
Tensor abstrakt publik getInputTensor (int inputIndex)
Merr tensorin të lidhur me indeksin e dhënë të hyrjes.
Parametrat
| InputIndeksi |
|---|
Hedhjet
| IllegalArgumentPërjashtim | nëse inputIndex është negativ ose nuk është më i vogël se numri i inputeve të modelit. |
|---|
abstrakt publik int getInputTensorCount ()
Merr numrin e tensorëve të hyrjes.
abstrakt publik Long getLastNativeInferenceDurationNanosekonda ()
Rikthen kohën e konkluzionit origjinal.
Hedhjet
| IllegalArgumentPërjashtim | nëse modeli nuk inicializohet nga interpretuesi. |
|---|
abstrakt publik int getOutputIndex ( OpEmri i vargut)
Merr indeksin e një prodhimi duke pasur parasysh emrin op të prodhimit.
Parametrat
| opEmri |
|---|
Hedhjet
| IllegalArgumentPërjashtim | nëse opName nuk përputhet me asnjë dalje në modelin e përdorur për të inicializuar interpretuesin. |
|---|
Tensor abstrakt 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 |
|---|
Hedhjet
| IllegalArgumentPërjashtim | nëse outputIndex është negativ ose nuk është më i vogël se numri i rezultateve të modelit. |
|---|
abstrakt publik int getOutputTensorCount ()
Merr numrin e tensorëve në dalje.
abstrakt publik 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ë |
Hedhjet
| IllegalArgumentPërjashtim | nëse idx është negativ ose nuk është më i vogël se numri i hyrjeve të modelit; ose nëse ndodh gabim gjatë ndryshimit të madhësisë së hyrjes idx-të. Për më tepër, gabimi ndodh kur përpiqeni të ndryshoni madhësinë e një tensori me dimensione fikse kur 'strict' është e vërtetë. |
|---|
abstrakt publik void resizeInput (int idx, int[] dims)
Ndryshon madhësinë e hyrjes idx-të të modelit vendas në dims të dhëna.
Parametrat
| idx | |
|---|---|
| zbehet |
Hedhjet
| IllegalArgumentPërjashtim | nëse idx është negativ ose nuk është më i vogël se numri i hyrjeve të modelit; ose nëse ndodh gabim gjatë ndryshimit të madhësisë së hyrjes idx-të. |
|---|
ekzekutim abstrakt 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.
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() ). |
Hedhjet
| IllegalArgumentPërjashtim | nëse input është e pavlefshme ose bosh, ose nëse ndodh një gabim gjatë ekzekutimit të konkluzionit. |
|---|---|
| IllegalArgumentPërjashtim | (EKSPERIMENTAL, subjekt ndryshimi) nëse përfundimi ndërpritet nga setCancelled(true) . |
abstrakt 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.
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() ) . |
Hedhjet
| IllegalArgumentPërjashtim | nëse inputs janë të pavlefshme ose bosh, nëse outputs janë të pavlefshme, ose nëse ndodh një gabim gjatë ekzekutimit të konkluzionit. |
|---|