程序包 ai.onnxruntime

类 OnnxTensor

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

    public class OnnxTensor
    extends OnnxTensorLike
    封装 OnnxTensor 的 Java 对象。张量(Tensor)是该库的主要输入,也可以作为输出返回。
    • 方法概要

      所有方法 静态方法 实例方法 具体方法 
      限定符和类型 方法 描述
      void close()
      关闭张量,释放其底层内存(如果它不是由 NIO 缓冲区支持的)。
      static OnnxTensor createTensor​(OrtEnvironment env, java.lang.Object data)
      从 Java 基本类型、基本类型多维数组或字符串多维数组创建张量。
      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(即 float、fp16 或 bf16),则将其作为 FloatBuffer 返回副本,否则返回 null。
      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 中,这可用于重复更新单个张量以进行多次不同的推理,而无需分配新的张量,但输入内容必须保持相同的大小和形状。

        注意:张量可能指向此缓冲区中的连续元素范围,而非整个缓冲区。用户需负责通过遵守位置(position)和界限(limit)来管理此信息。因此,当多个线程持有缓冲区引用时,访问此引用应被视为存在潜在问题。

        返回值
        缓冲区的引用。
      • getValue

        public java.lang.Object getValue()
                                  throws OrtException
        如果张量是标量,则返回装箱后的基本类型;如果具有多个维度,则返回基本类型的多维数组。

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

        返回值
        Java 值。
        抛出
        OrtException - 如果因为张量无效而无法提取值,或者原生代码遇到错误。
      • toString

        public java.lang.String toString()
        重写
        toString in class java.lang.Object
      • close

        public void close()
        关闭张量,释放其底层内存(如果它不是由 NIO 缓冲区支持的)。如果它由缓冲区支持,则内存将在缓冲区被 GC(垃圾回收)时释放。
      • 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 基本类型、基本类型多维数组或字符串多维数组创建张量。形状通过反射从对象中推断出来。使用默认分配器。

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

        参数
        env - 当前的 OrtEnvironment。
        data - 要存储在张量中的数据。
        返回值
        存储数据的 OnnxTensor。
        抛出
        OrtException - 如果 onnx 运行时抛出错误。
      • 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.INT16OnnxJavaType.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 错误,或者数据和形状不匹配,则抛出此异常。