2

由于 C 语言没有半浮点实现,如何将数据发送到 ONNXRuntime C API?

4

2 回答 2

1

C语言没有半浮点实现

是的,但是有语言扩展,您可以编写自己的库来处理数据。

因此,例如, gcc在某些架构上_Float16支持 ISO/IEC TS 18661-3:2015 定义的类型。

您可以编写或找到一个库来处理半浮点运算。

于 2020-04-28T12:51:16.350 回答
1

可能有一个您可以从此处链接的示例:https ://github.com/microsoft/onnxruntime/issues/1173#issuecomment-501088662

您可以使用 CreateTensorAsOrtValue 创建缓冲区以将输入数据写入其中,并使用 GetTensorMutableData 访问 OrtValue 中的缓冲区。

ONNXRuntime 使用 Eigen 将浮点数转换为可以写入该缓冲区的 16 位值。

uint16_t floatToHalf(float f) {
  return Eigen::half_impl::float_to_half_rtne(f).x;
}

或者,您可以编辑模型以将 Cast 节点从 float32 添加到 float16,以便模型将 float32 作为输入。

于 2020-06-03T01:10:40.553 回答