类 OnnxTensor

  • 所有已实现的接口
    OnnxValue, java.lang.AutoCloseable

    public class OnnxTensor
    extends OnnxTensorLike
    一个包装 OnnxTensor 的 Java 对象。张量是库的主要输入,也可以作为输出返回。
    • 方法摘要

      所有方法 静态方法 实例方法 具体方法 
      修饰符及类型 方法 描述
      void close()
      关闭张量,释放其底层内存(如果不是由 NIO 缓冲区支持)。
      static OnnxTensor createTensor​(OrtEnvironment env, java.lang.Object data)
      从 Java 原语、原语多维数组或 String 多维数组创建张量。
      static OnnxTensor createTensor​(OrtEnvironment env, java.lang.String[] data, long[] shape)
      从扁平化的字符串数组创建张量。
      static OnnxTensor createTensor​(OrtEnvironment env, java.nio.ByteBuffer data, long[] shape)
      创建由直接 ByteBuffer 支持的 OnnxTensor。
      static OnnxTensor createTensor​(OrtEnvironment env, java.nio.ByteBuffer data, long[] shape, OnnxJavaType type)
      创建由直接 ByteBuffer 支持的 OnnxTensor。
      static OnnxTensor createTensor​(OrtEnvironment env, java.nio.DoubleBuffer data, long[] shape)
      创建由直接 DoubleBuffer 支持的 OnnxTensor。
      static OnnxTensor createTensor​(OrtEnvironment env, java.nio.FloatBuffer data, long[] shape)
      创建由直接 FloatBuffer 支持的 OnnxTensor。
      static OnnxTensor createTensor​(OrtEnvironment env, java.nio.IntBuffer data, long[] shape)
      创建由直接 IntBuffer 支持的 OnnxTensor。
      static OnnxTensor createTensor​(OrtEnvironment env, java.nio.LongBuffer data, long[] shape)
      创建由直接 LongBuffer 支持的 OnnxTensor。
      static OnnxTensor createTensor​(OrtEnvironment env, java.nio.ShortBuffer data, long[] shape)
      创建由直接 ShortBuffer 支持的 OnnxTensor。
      static OnnxTensor createTensor​(OrtEnvironment env, java.nio.ShortBuffer data, long[] shape, OnnxJavaType type)
      创建由直接 ShortBuffer 支持的 OnnxTensor。
      java.util.Optional<java.nio.Buffer> getBufferRef()
      返回支持此 OnnxTensor 的缓冲区的引用。
      java.nio.ByteBuffer getByteBuffer()
      返回底层 OnnxTensor 作为 ByteBuffer 的副本。
      java.nio.DoubleBuffer getDoubleBuffer()
      如果底层类型是 double,则返回底层 OnnxTensor 作为 DoubleBuffer 的副本,否则返回 null。
      java.nio.FloatBuffer getFloatBuffer()
      如果底层 OnnxTensor 可以无损地转换为 float(即...
      java.nio.IntBuffer getIntBuffer()
      如果底层类型是 int32 或 uint32,则返回底层 OnnxTensor 作为 IntBuffer 的副本,否则返回 null。
      java.nio.LongBuffer getLongBuffer()
      如果底层类型是 int64 或 uint64,则返回底层 OnnxTensor 作为 LongBuffer 的副本,否则返回 null。
      java.nio.ShortBuffer getShortBuffer()
      如果底层类型是 int16, uint16, fp16 或 bf16,则返回底层 OnnxTensor 作为 ShortBuffer 的副本,否则返回 null。
      OnnxValue.OnnxValueType getType()
      获取此 OnnxValue 的类型。
      java.lang.Object getValue()
      如果张量是标量,则返回装箱的原语;如果张量是多维的,则返回原语的多维数组。
      boolean ownsBuffer()
      如果此 OnnxTensor 中的缓冲区是在构建此张量时创建的(即,它是用户提供的缓冲区或数组的副本,并且可能持有该缓冲区的唯一引用),则返回 true。
      java.lang.String toString()  
      • 从类 java.lang.Object 继承的方法

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    • 方法详细信息

      • ownsBuffer

        public boolean ownsBuffer()
        如果此 OnnxTensor 中的缓冲区是在构建此张量时创建的(即,它是用户提供的缓冲区或数组的副本,并且可能持有该缓冲区的唯一引用),则返回 true。

        当此值为 true 时,底层缓冲区是从用户输入复制的,因此用户无法在首先通过 getBufferRef() 获取引用之前修改此缓冲区的状态。

        返回
        如果此 OnnxTensor 中的缓冲区是在构建时由它分配的(即,它是用户缓冲区或数组的副本),则返回 true。
      • getBufferRef

        public java.util.Optional<java.nio.Buffer> getBufferRef()
        返回支持此 OnnxTensor 的缓冲区的引用。如果张量不受缓冲区支持(即,它由 ORT 分配的内存支持),此方法返回一个空的 Optional

        对缓冲区元素的更改将反映在本地 OrtValue 中,这可用于重复更新单个张量以进行多次不同的推理,而无需分配新的张量,尽管输入 必须 保持相同的大小和形状。

        注意:张量可能引用此缓冲区中的一个连续元素范围,而不是整个缓冲区。用户有责任通过尊重位置和限制来管理此信息。因此,当多个线程持有缓冲区的引用时,访问此引用应被视为有问题。

        返回
        缓冲区的引用。
      • getValue

        public java.lang.Object getValue()
                                  throws OrtException
        如果张量是标量,则返回装箱的原语;如果张量是多维的,则返回原语的多维数组。

        Java 多维数组在超过 2 维时非常慢,在这种情况下,建议您使用下面的 Buffer 提取器(例如,getFloatBuffer())。

        返回
        一个 Java 值。
        抛出
        OrtException - 如果由于张量无效而无法提取值,或者如果本地代码遇到错误。
      • toString

        public java.lang.String toString()
        覆盖
        在类 java.lang.Object 中的 toString
      • close

        public void close()
        关闭张量,释放其底层内存(如果不是由 NIO 缓冲区支持)。如果它是由缓冲区支持的,则在缓冲区被垃圾回收时释放内存。
      • getByteBuffer

        public java.nio.ByteBuffer getByteBuffer()
        返回底层 OnnxTensor 作为 ByteBuffer 的副本。

        如果 OnnxTensor 包含字符串,此方法返回 null,因为它们存储在 OnnxTensor 之外。

        返回
        OnnxTensor 的 ByteBuffer 副本。
      • getFloatBuffer

        public java.nio.FloatBuffer getFloatBuffer()
        如果底层 OnnxTensor 可以无损地转换为 float(即它是 float、fp16 或 bf16),则返回其作为 FloatBuffer 的副本,否则返回 null。
        返回
        OnnxTensor 的 FloatBuffer 副本。
      • getDoubleBuffer

        public java.nio.DoubleBuffer getDoubleBuffer()
        如果底层类型是 double,则返回底层 OnnxTensor 作为 DoubleBuffer 的副本,否则返回 null。
        返回
        OnnxTensor 的 DoubleBuffer 副本。
      • getShortBuffer

        public java.nio.ShortBuffer getShortBuffer()
        如果底层类型是 int16, uint16, fp16 或 bf16,则返回底层 OnnxTensor 作为 ShortBuffer 的副本,否则返回 null。
        返回
        OnnxTensor 的 ShortBuffer 副本。
      • getIntBuffer

        public java.nio.IntBuffer getIntBuffer()
        如果底层类型是 int32 或 uint32,则返回底层 OnnxTensor 作为 IntBuffer 的副本,否则返回 null。
        返回
        OnnxTensor 的 IntBuffer 副本。
      • getLongBuffer

        public java.nio.LongBuffer getLongBuffer()
        如果底层类型是 int64 或 uint64,则返回底层 OnnxTensor 作为 LongBuffer 的副本,否则返回 null。
        返回
        OnnxTensor 的 LongBuffer 副本。
      • createTensor

        public static OnnxTensor createTensor​(OrtEnvironment env,
                                              java.lang.Object data)
                                       throws OrtException
        从 Java 原语、原语多维数组或 String 多维数组创建张量。形状使用反射从对象中推断。使用默认分配器。

        注意:Java 多维数组不是密集型的,此方法需要为高维数组遍历大量指针。对于非 String 类型,建议使用接受 BuffercreateTensor 方法之一,例如 createTensor(OrtEnvironment, FloatBuffer, long[]),因为这些方法在使用直接缓冲区时可以将数据零拷贝传输到 ORT。

        参数
        env - 当前的 OrtEnvironment。
        data - 要存储在张量中的数据。
        返回
        存储数据的 OnnxTensor。
        抛出
        OrtException - 如果 onnx runtime 抛出错误。
      • createTensor

        public static OnnxTensor createTensor​(OrtEnvironment env,
                                              java.lang.String[] data,
                                              long[] shape)
                                       throws OrtException
        从扁平化的字符串数组创建张量。

        要求数组按行主序展平。使用默认分配器。

        参数
        env - 当前的 OrtEnvironment。
        data - 张量数据
        shape - 张量的形状
        返回
        所需形状的 OnnxTensor。
        抛出
        OrtException - 如果发生 onnx 错误或数据和形状不匹配,则抛出。
      • createTensor

        public static OnnxTensor createTensor​(OrtEnvironment env,
                                              java.nio.FloatBuffer data,
                                              long[] shape)
                                       throws OrtException
        创建由直接 FloatBuffer 支持的 OnnxTensor。缓冲区应采用 nativeOrder。

        如果提供的缓冲区不是直接缓冲区,则会创建一个直接副本,其生命周期与张量绑定。使用默认分配器。

        参数
        env - 当前的 OrtEnvironment。
        data - 张量数据。
        shape - 张量的形状。
        返回
        所需形状的 OnnxTensor。
        抛出
        OrtException - 如果发生 onnx 错误或数据和形状不匹配,则抛出。
      • createTensor

        public static OnnxTensor createTensor​(OrtEnvironment env,
                                              java.nio.DoubleBuffer data,
                                              long[] shape)
                                       throws OrtException
        创建由直接 DoubleBuffer 支持的 OnnxTensor。缓冲区应采用 nativeOrder。

        如果提供的缓冲区不是直接缓冲区,则会创建一个直接副本,其生命周期与张量绑定。使用默认分配器。

        参数
        env - 当前的 OrtEnvironment。
        data - 张量数据。
        shape - 张量的形状。
        返回
        所需形状的 OnnxTensor。
        抛出
        OrtException - 如果发生 onnx 错误或数据和形状不匹配,则抛出。
      • createTensor

        public static OnnxTensor createTensor​(OrtEnvironment env,
                                              java.nio.ByteBuffer data,
                                              long[] shape)
                                       throws OrtException
        创建由直接 ByteBuffer 支持的 OnnxTensor。缓冲区应采用 nativeOrder。

        如果提供的缓冲区不是直接缓冲区,则会创建一个直接副本,其生命周期与张量绑定。使用默认分配器。告诉运行时它是 OnnxJavaType.INT8

        参数
        env - 当前的 OrtEnvironment。
        data - 张量数据。
        shape - 张量的形状。
        返回
        所需形状的 OnnxTensor。
        抛出
        OrtException - 如果发生 onnx 错误或数据和形状不匹配,则抛出。
      • createTensor

        public static OnnxTensor createTensor​(OrtEnvironment env,
                                              java.nio.ByteBuffer data,
                                              long[] shape,
                                              OnnxJavaType type)
                                       throws OrtException
        创建由直接 ByteBuffer 支持的 OnnxTensor。缓冲区应采用 nativeOrder。

        如果提供的缓冲区不是直接缓冲区,则会创建一个直接副本,其生命周期与张量绑定。使用默认分配器。告诉运行时它是指定的类型。

        参数
        env - 当前的 OrtEnvironment。
        data - 张量数据。
        shape - 张量的形状。
        type - 用于字节缓冲区元素的类型。
        返回
        所需形状的 OnnxTensor。
        抛出
        OrtException - 如果发生 onnx 错误或数据和形状不匹配,则抛出。
      • createTensor

        public static OnnxTensor createTensor​(OrtEnvironment env,
                                              java.nio.ShortBuffer data,
                                              long[] shape)
                                       throws OrtException
        创建由直接 ShortBuffer 支持的 OnnxTensor。缓冲区应采用 nativeOrder。

        如果提供的缓冲区不是直接缓冲区,则会创建一个直接副本,其生命周期与张量绑定。使用默认分配器。

        参数
        env - 当前的 OrtEnvironment。
        data - 张量数据。
        shape - 张量的形状。
        返回
        所需形状的 OnnxTensor。
        抛出
        OrtException - 如果发生 onnx 错误或数据和形状不匹配,则抛出。
      • createTensor

        public static OnnxTensor createTensor​(OrtEnvironment env,
                                              java.nio.ShortBuffer data,
                                              long[] shape,
                                              OnnxJavaType type)
                                       throws OrtException
        创建由直接 ShortBuffer 支持的 OnnxTensor。缓冲区应采用 nativeOrder。

        如果提供的缓冲区不是直接缓冲区,则会创建一个直接副本,其生命周期与张量绑定。使用默认分配器。

        参数
        env - 当前的 OrtEnvironment。
        data - 张量数据。
        shape - 张量的形状。
        type - 缓冲区中数据的类型,可以是 OnnxJavaType.INT16, OnnxJavaType.FLOAT16OnnxJavaType.BFLOAT16
        返回
        所需形状的 OnnxTensor。
        抛出
        OrtException - 如果发生 onnx 错误或数据和形状不匹配,则抛出。
      • createTensor

        public static OnnxTensor createTensor​(OrtEnvironment env,
                                              java.nio.IntBuffer data,
                                              long[] shape)
                                       throws OrtException
        创建由直接 IntBuffer 支持的 OnnxTensor。缓冲区应采用 nativeOrder。

        如果提供的缓冲区不是直接缓冲区,则会创建一个直接副本,其生命周期与张量绑定。使用默认分配器。

        参数
        env - 当前的 OrtEnvironment。
        data - 张量数据。
        shape - 张量的形状。
        返回
        所需形状的 OnnxTensor。
        抛出
        OrtException - 如果发生 onnx 错误或数据和形状不匹配,则抛出。
      • createTensor

        public static OnnxTensor createTensor​(OrtEnvironment env,
                                              java.nio.LongBuffer data,
                                              long[] shape)
                                       throws OrtException
        创建由直接 LongBuffer 支持的 OnnxTensor。缓冲区应采用 nativeOrder。

        如果提供的缓冲区不是直接缓冲区,则会创建一个直接副本,其生命周期与张量绑定。使用默认分配器。

        参数
        env - 当前的 OrtEnvironment。
        data - 张量数据。
        shape - 张量的形状。
        返回
        所需形状的 OnnxTensor。
        抛出
        OrtException - 如果发生 onnx 错误或数据和形状不匹配,则抛出。