代码之家  ›  专栏  ›  技术社区  ›  user3452134

加载ONX CNTK C++引发异常

  •  0
  • user3452134  · 技术社区  · 6 年前

    我有一个在matlab中创建的文件。我用得很好 python加载:

    import cntk as C
    z = C.Function.load("Net.onnx", format=C.ModelFormat.ONNX)
    

    在C++中我有例外 Selected CPU as the process wide default device.

    将引发异常:

    'gemm:无效的形状,输入a和b应为rank=2 矩阵

    我用的是进口的Nuget: CNTK.CPUOnly CNTK.Deps.MKL CNTK.Deps.OpenCV.Zip

     #include <stdio.h>
     #include "CNTKLibrary.h"
    
     void main(){
    
         std::wstring modelFile(L"Net.onnx");
    
         //line crash
         CNTK::FunctionPtr modelFunc = CNTK::Function::Load(modelFile, CNTK::DeviceDescriptor::CPUDevice(), CNTK::ModelFormat::ONNX);
    }
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   user3452134    6 年前

    最后我在Python中保存了其他的解决方案来模拟CNTK,而不是从C++加载它。 以cntk格式(其中原始模型从matlab导出到onnx long way)

    python代码

    import cntk as C
    z = C.Function.load("Net.onnx", format=C.ModelFormat.ONNX)
    z.save(os.path.join("folder", "net" + ".dnn"))
    

    C++加载

    #include "CNTKLibrary.h"
    std::wstring modelFile(L"net.dnn");
    
    CNTK::FunctionPtr modelFunc = CNTK::Function::Load(modelFile, CNTK::DeviceDescriptor::CPUDevice());