如何为包含未知维度的ONNX模型输入创建并绑定TensorFloat?
动态维度ONNX输入在WinML中的绑定方法
Netron中显示的unk__518是ONNX模型定义动态维度时的占位标记,不是需要传入的实际维度值,你只需在绑定时填入推理时实际使用的首维度大小即可,无需传入字符串。
两种常用场景的实现方式
- 单样本推理(每次输入1张图片)
// 首维度设为1,对应单张224*224分辨率的3通道图片 std::vector<int64_t> shape({ 1, 224, 224, 3 }); binding.Bind(L"Image:0", TensorFloat::Create(shape));
- 批量推理(一次输入多张图片)
// 首维度设为实际批量大小,例如一次输入8张图片就填8 std::vector<int64_t> shape({ 8, 224, 224, 3 }); binding.Bind(L"Image:0", TensorFloat::Create(shape));
注意事项
- WinML原生支持动态维度推理,只要绑定的tensor维度和你实际喂入的数据维度一致,即可自动匹配模型的动态维度约束,不需要额外调用特殊API。
- 若需要确认模型对动态维度的取值限制,可以通过
LearningModel.InputFeatures获取对应输入的特征描述,查看维度约束字段。
内容的提问来源于stack exchange,提问作者lq_msu
相关产品推荐
相关产品推荐

