我有一个在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.
Selected CPU as the process wide default device.
将引发异常:
'gemm:无效的形状,输入a和b应为rank=2 矩阵
我用的是进口的Nuget: CNTK.CPUOnly CNTK.Deps.MKL CNTK.Deps.OpenCV.Zip
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); }
最后我在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());