onnxruntime推理,sesstion.run()的经验贴

onnxruntime进行推理的步骤及经验

首先,进行推理时要打开模型获取信息。

  1. 输入名称和输出名称:
    下载一个Netron软件,可以可视化模型,点击任意输入,然后右边会出来输入名称和类型:
    模型输入信息
    模型输出信息
    代码里要写对应,C++版本里面代码就是:
// 输入名称
        std::vector<const char*> inputNames = { "x", "x_lengths", "t", "language", "bert_0", "emo", "g" };
        // 输出名称
        std::vector<const char*> outputNames = { "xout", "m_p", "logs_p", "x_mask","_"};
  1. 传进数据,要根据输入维度,输入数据的data和size数据,例如第一个输入是int64数据类型,构建的代码应该是:
std::vector<Value> inputTensors_enc_p;
inputTensors_enc_p.push_back(Ort::Value::CreateTensor<int64_t>(memory_info, x.data(), x.size(), XShape.data(), XShape.size()));

注意,如果输入是float64的,在C++里面要使用double类型代替Ort::Value::CreateTensor<int64_t>里面的int64_t,

Ort::Value::CreateTensor<double>
  1. 构建session
env = Ort::Env(ORT_LOGGING_LEVEL_WARNING, "test");
session_options.SetIntraOpNumThreads(1);
        session_options.SetGraphOptimizationLevel(GraphOptimizationLevel::ORT_ENABLE_EXTENDED);
enc_p = Ort::Session(env, "your_path", session_options);
  1. 推理
 auto enc_rtn = enc_p.Run(Ort::RunOptions{ nullptr }, inputNames.data(), inputTensors_enc_p.data(), inputTensors_enc_p.size(), outputNames.data(), outputNames.size());
     
  1. 想要获得输出,例如第一个,可以通过下面方式获得,要注意类型
const float* xout_f = enc_rtn[0].GetTensorData<float>();
        //const float* encrawOutput2 = enc_rtn[1].GetTensorData<float>();
        size_t xout_f_floatacounts = enc_rtn[0].GetTensorTypeAndShapeInfo().GetElementCount();
        std::vector<float> xout(xout_f, xout_f + xout_f_floatacounts);
  • 18
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值