TensorBuffer

Öffentliche abstrakte Klasse TensorBuffer
Bekannte direkte Unterklassen

Stellt den Datenpuffer für die Eingabe oder die Ausgabe eines Modells dar.

Public Methods

Statischer TensorBuffer
createDynamic(DataType-Datentyp)
Erstellt ein leeres dynamisches TensorBuffer mit der angegebenen DataType.
Statischer TensorBuffer
createFixedSize(int[] form, DataType-Datentyp)
Erstellt eine TensorBuffer mit der angegebenen shape und DataType.
Statischer TensorBuffer
createFrom(TensorBuffer-Zwischenspeicher, DataType-Datentyp)
Erstellt eine TensorBuffer, die Daten aus einer anderen mit der angegebenen DataType tief kopiert.
ByteBuffer
getBuffer()
Gibt den Datenpuffer zurück.
Zusammenfassung DataType
getDataType()
Gibt den Datentyp dieses Puffers zurück.
int
getFlatSize()
Ruft die "flatSize" des Zwischenspeichers ab.
Abstrakt Gleitkommazahl[]
getFloatArray()
Gibt ein Float-Array der in diesem Puffer gespeicherten Werte zurück.
Abstrakte Gleitkommazahl
getFloatValue(int absIndex)
Gibt einen Gleitkommawert bei einem bestimmten Index zurück.
abstrakt int[]
getIntArray()
Gibt ein Ganzzahl-Array der in diesem Puffer gespeicherten Werte zurück.
Abstrakt Int
getIntValue(int absIndex)
Gibt einen Ganzzahlwert bei einem bestimmten Index zurück.
int[]
getShape()
Ruft die aktuelle Form ab.
Abstrakt Int
getTypeSize()
Gibt die Anzahl der Byte eines einzelnen Elements im Array zurück.
boolean
isDynamic()
Gibt zurück, wenn TensorBuffer eine dynamische Größe hat (die Größe kann beliebig angepasst werden).
Abstrakt void
loadArray(int[] src, int[] Form)
Lädt ein Ganzzahl-Array mit einer bestimmten Form in diesen Puffer.
Abstrakt void
loadArray(Gleitkommazahl[] src, int[] Form)
Lädt ein Float-Array mit einer bestimmten Form in diesen Puffer.
void
loadArray(Gleitkommazahl[] src)
Lädt ein Float-Array in diesen Puffer.
void
loadArray(int[] src)
Lädt ein Ganzzahl-Array in diesen Puffer.
void
loadBuffer(ByteBuffer-Zwischenspeicher)
Lädt einen Byte-Zwischenspeicher in diesen TensorBuffer.
void
loadBuffer(ByteBuffer-Puffer, int[]-Form)
Lädt einen Byte-Zwischenspeicher in TensorBuffer mit einer bestimmten Form.

Übernommene Methoden

Public Methods

public static TensorBuffer createDynamic (DataType dataType)

Erstellt ein leeres dynamisches TensorBuffer mit der angegebenen DataType. Die Form der erstellten TensorBuffer ist {0}.

Dynamic TensorBuffers weist Arbeitsspeicher neu zu, wenn Arrays oder Datenpuffer unterschiedlicher Puffergröße geladen werden. Hier einige Beispiele:

 // Creating a float dynamic TensorBuffer:
 TensorBuffer tensorBuffer = TensorBuffer.createDynamic(DataType.FLOAT32);
 // Loading a float array:
 float[] arr1 = new float[] {1, 2, 3};
 tensorBuffer.loadArray(arr, new int[] {arr1.length});
 // loading another float array:
 float[] arr2 = new float[] {1, 2, 3, 4, 5};
 tensorBuffer.loadArray(arr, new int[] {arr2.length});
 // loading a third float array with the same size as arr2, assuming shape doesn't change:
 float[] arr3 = new float[] {5, 4, 3, 2, 1};
 tensorBuffer.loadArray(arr);
 // loading a forth float array with different size as arr3 and omitting the shape will result
 // in error:
 float[] arr4 = new float[] {3, 2, 1};
 tensorBuffer.loadArray(arr); // Error: The size of byte buffer and the shape do not match.
 

Parameter
dataType Der Datentyp der zu erstellenden TensorBuffer.

public static TensorBuffer createFixedSize (int[] shape, DataType dataType)

Erstellt eine TensorBuffer mit der angegebenen shape und DataType. Hier einige Beispiele:

 // Creating a float TensorBuffer with shape {2, 3}:
 int[] shape = new int[] {2, 3};
 TensorBuffer tensorBuffer = TensorBuffer.createFixedSize(shape, DataType.FLOAT32);
 
 // Creating an uint8 TensorBuffer of a scalar:
 int[] shape = new int[] {};
 TensorBuffer tensorBuffer = TensorBuffer.createFixedSize(shape, DataType.UINT8);
 
 // Creating an empty uint8 TensorBuffer:
 int[] shape = new int[] {0};
 TensorBuffer tensorBuffer = TensorBuffer.createFixedSize(shape, DataType.UINT8);
 

Die Größe eines TensorBuffers mit fester Größe kann nach seiner Erstellung nicht mehr geändert werden.

Parameter
shape Die Form des zu erstellenden TensorBuffers.
dataType Der Datentyp der zu erstellenden TensorBuffer.
Löst aus
NullPointerException wenn shape null ist.
IllegalArgumentException shape hat nicht positive Elemente.

public static TensorBuffer createFrom (TensorBuffer-Zwischenspeicher, DataType-Datentyp)

Erstellt eine TensorBuffer, die Daten aus einer anderen mit der angegebenen DataType tief kopiert.

Parameter
Puffer Die Quelle TensorBuffer, aus der kopiert werden soll.
dataType die erwartete DataType von neu erstellten TensorBuffer.
Löst aus
NullPointerException wenn buffer null ist.

public ByteBuffer getBuffer ()

Gibt den Datenpuffer zurück.

public abstrakt DataType getDataType ()

Gibt den Datentyp dieses Puffers zurück.

public int getFlatSize ()

Ruft die "flatSize" des Zwischenspeichers ab.

Löst aus
IllegalStateException Die zugrunde liegenden Daten sind beschädigt.

public abstrakt float[] getFloatArray ()

Gibt ein Float-Array der in diesem Puffer gespeicherten Werte zurück. Hat der Zwischenspeicher andere Typen als „Gleitkommazahl“, werden die Werte in eine Gleitkommazahl (Gleitkommazahl) umgewandelt. Beispielsweise werden Werte in TensorBufferUint8 von „uint8“ in „Gleitkommazahl“ umgewandelt.

public abstrakt float getFloatValue (int absIndex)

Gibt einen Gleitkommawert bei einem bestimmten Index zurück. Wenn der Zwischenspeicher andere Typen hat als Gleitkommazahl, wird der Wert in Gleitkommazahl umgewandelt. Beim Lesen eines Werts aus TensorBufferUint8 wird der Wert beispielsweise zuerst als „uint8“ ausgelesen und dann von „uint8“ in „Gleitkommazahl“ konvertiert.

 For example, a TensorBuffer with shape {2, 3} that represents the following array,
 [[0.0f, 1.0f, 2.0f], [3.0f, 4.0f, 5.0f]].

 The fourth element (whose value is 3.0f) in the TensorBuffer can be retrieved by:
 float v = tensorBuffer.getFloatValue(3);
 

Parameter
absIndex Der absolute Index des zu lesenden Werts.

public abstrakt int[] getIntArray ()

Gibt ein Ganzzahl-Array der in diesem Puffer gespeicherten Werte zurück. Wenn der Zwischenspeicher einen anderen Typ als „int“ hat, werden die Werte in „int“ konvertiert, was zu einem Genauigkeitsverlust führen kann. Wenn Sie beispielsweise ein Ganzzahl-Array aus einem TensorBufferFloat mit den Werten {400.32f, 23.04f} abrufen, lautet die Ausgabe {400, 23}.

public abstrakt int getIntValue (int absIndex)

Gibt einen Ganzzahlwert bei einem bestimmten Index zurück. Wenn der Puffer andere Typen hat als „int“, wird der Wert in „int“ konvertiert. Beim Lesen eines Werts aus TensorBufferFloat wird der Wert beispielsweise zuerst als Gleitkommazahl ausgelesen und dann von „Gleitkommazahl“ in „int“ konvertiert. Es kann zu Genauigkeitsverlusten kommen.

 For example, a TensorBuffer with shape {2, 3} that represents the following array,
 [[0.0f, 1.0f, 2.0f], [3.0f, 4.0f, 5.0f]].

 The fourth element (whose value is 3.0f) in the TensorBuffer can be retrieved by:
 int v = tensorBuffer.getIntValue(3);
 Note that v is converted from 3.0f to 3 as a result of type conversion.
 

Parameter
absIndex Der absolute Index des zu lesenden Werts.

public int[] getShape ()

Ruft die aktuelle Form ab. (Hier wird eine Kopie zurückgegeben, um unerwartete Änderungen zu vermeiden.)

Löst aus
IllegalStateException Die zugrunde liegenden Daten sind beschädigt.

public abstrakt int getTypeSize ()

Gibt die Anzahl der Byte eines einzelnen Elements im Array zurück. Ein Float-Zwischenspeicher gibt beispielsweise 4 und ein Byte-Zwischenspeicher 1 zurück.

public boolesch isDynamic ()

Gibt zurück, wenn TensorBuffer eine dynamische Größe hat (die Größe kann beliebig angepasst werden).

public abstrakt void loadArray (int[] src, int[] shape)

Lädt ein Ganzzahl-Array mit einer bestimmten Form in diesen Puffer. Wenn der Zwischenspeicher andere Typen hat als „int“, werden die Werte in den Typ des Zwischenspeichers konvertiert, bevor sie in den Zwischenspeicher geladen werden. Dabei kann es zu Genauigkeitsverlusten kommen. Wenn Sie beispielsweise ein Ganzzahl-Array mit den Werten {400, -23} in eine TensorBufferUint8 laden, werden die Werte auf [0, 255] gesetzt und dann durch {255, 0} in uint8 umgewandelt.

Parameter
src Das zu ladende Quellarray.
shape Form des Tensors, den src darstellt.
Löst aus
NullPointerException wenn src null ist.
NullPointerException wenn shape null ist.
IllegalArgumentException die Größe des zu ladenden Arrays nicht mit der angegebenen Form übereinstimmt.

public abstrakt void loadArray (float[] src, int[] shape)

Lädt ein Float-Array mit einer bestimmten Form in diesen Puffer. Wenn der Zwischenspeicher andere Typen hat als die Gleitkommazahl, werden die Werte in den Typ des Zwischenspeichers konvertiert, bevor sie in den Zwischenspeicher geladen werden. Dabei kann es zu Genauigkeitsverlusten kommen. Wenn Sie beispielsweise ein Float-Array in eine TensorBufferUint8 mit den Werten {400.32f, -23.04f} laden, werden die Werte auf [0, 255] gesetzt und dann durch {255, 0} in uint8 umgewandelt.

Parameter
src Das zu ladende Quellarray.
shape Form des Tensors, den src darstellt.
Löst aus
NullPointerException wenn src null ist.
NullPointerException wenn shape null ist.
IllegalArgumentException die Größe des zu ladenden Arrays nicht mit der angegebenen Form übereinstimmt.

public void loadArray (float[] src)

Lädt ein Float-Array in diesen Puffer. Wenn der Zwischenspeicher andere Typen hat als der Puffer "Float", werden die Werte in den Typ des Zwischenspeichers konvertiert, bevor sie in den Zwischenspeicher geladen werden. Dabei kann es zu Genauigkeitsverlusten kommen. Wenn Sie beispielsweise ein Gleitkommazahl-Array in eine TensorBufferUint8 mit den Werten {400.32f, -23.04f} laden, werden die Werte auf [0, 255] gesetzt und dann durch {255, 0} in uint8 umgewandelt.

Bei dieser Methode wird davon ausgegangen, dass die Form von src mit der Form dieses TensorBuffer übereinstimmt. Daher sollte die Größe von buffer (src.length) immer der flachen Größe von TensorBuffer entsprechen, sowohl für feste Größe als auch für dynamische TensorBuffer. Verwende loadArray(float[], int[]), wenn src eine andere Form hat.

Parameter
src Das zu ladende Quellarray.

public void loadArray (int[] src)

Lädt ein Ganzzahl-Array in diesen Puffer. Wenn der Zwischenspeicher andere Typen hat als „int“, werden die Werte in den Typ des Zwischenspeichers konvertiert, bevor sie in den Zwischenspeicher geladen werden. Dadurch kann es zu Genauigkeitsverlusten kommen. Wenn Sie beispielsweise ein Ganzzahlarray mit den Werten {400, -23} in ein TensorBufferUint8 laden, werden die Werte auf [0, 255] gesetzt und dann durch {255, 0} in uint8 umgewandelt.

Bei dieser Methode wird davon ausgegangen, dass die Form von src mit der Form dieses TensorBuffer übereinstimmt. Daher sollte die Größe von buffer (src.length) immer der flachen Größe von TensorBuffer entsprechen, sowohl für feste Größe als auch für dynamische TensorBuffer. Verwende loadArray(int[], int[]), wenn src eine andere Form hat.

Parameter
src Das zu ladende Quellarray.

public void loadBuffer (ByteBuffer-Zwischenspeicher)

Lädt einen Byte-Zwischenspeicher in diesen TensorBuffer. Die Puffergröße muss der flachen Größe dieser TensorBuffer entsprechen.

Bei dieser Methode wird davon ausgegangen, dass die Form von buffer mit der Form dieses TensorBuffer übereinstimmt. Daher sollte die Größe von buffer (buffer.limit()) immer der flachen Größe dieser TensorBuffer entsprechen, sowohl für feste als auch für dynamische TensorBuffers. Verwende loadBuffer(ByteBuffer, int[]), wenn buffer eine andere Form hat.

Wichtig: Der geladene Zwischenspeicher ist ein Verweis. NICHT ÄNDERN. Wir erstellen hier keine Kopie, um die Leistung zu beeinträchtigen. Falls Änderungen erforderlich sind, erstellen Sie eine Kopie.

Die beste Leistung erzielen Sie, wenn Sie immer einen direkten ByteBuffer oder einen ByteBuffer laden, der von einem Array unterstützt wird.

Wenn buffer schreibgeschützt ist, verwenden wir eine Copy-on-Write-Strategie, um die Leistung zu verbessern.

Parameter
Puffer Der zu ladende Byte-Zwischenspeicher.

public void loadBuffer (ByteBuffer-Zwischenspeicher, int[]-Form)

Lädt einen Byte-Zwischenspeicher in TensorBuffer mit einer bestimmten Form.

Wichtig: Der geladene Zwischenspeicher ist ein Verweis. NICHT ÄNDERN. Wir erstellen hier keine Kopie, um die Leistung zu beeinträchtigen. Falls Änderungen erforderlich sind, erstellen Sie eine Kopie.

Die beste Leistung erzielen Sie, wenn Sie immer einen direkten ByteBuffer oder einen ByteBuffer laden, der von einem Array unterstützt wird.

Parameter
Puffer Der zu ladende Byte-Zwischenspeicher.
shape
Löst aus
NullPointerException wenn buffer null ist.
IllegalArgumentException Die Größen von buffer und typeSize oder die von buffer und flatSize stimmen nicht überein.