创建网络
在前面的讲述中主要对AscendIE的编程模型进行了分析,下面就以C++ API为例,是如何按照编程模型完成模型编译优化。
- 创建一个Builder工具类。
调用CreateInferBuilder接口,创建一个Builder。
Builder *builder = Builder::CreateInferBuilder("Ascend310P3"); // Ascend310P3为昇腾AI处理器类型,根据服务器设备类型配置
- 使用Builder创建一个空的Network。
Network *network = builder->CreateNetwork();
- 向Network中添加输入。
Dims inputShape({16, 3, 224, 224}); Tensor *inputTensor = network->AddInput("input1", DataType::FLOAT, inputShape);
- 向Network中添加卷积层ConvolutionLayer。
调用Network内置API,添加ConvolutionLayer。
int32_t numOutputMap = 64; Dims kernelHW({7, 7}); std::vector<float> weight_data(64 * 3 * 7 * 7); std::vector<float> bias_data(64); WeightsBuf weightBuf {DataType::FLOAT, weight_data.data(), weight_data.size()}; WeightsBuf biasBuf {DataType::FLOAT, bias_data.data(), bias_data.size()}; ConvolutionLayer *convLayer = network->AddConvolutionLayer(inputTensor, numOutputMap, kernelHW, weightBuf, biasBuf); Dims strides({ 1, 1 }); Dims paddings({2, 2}); convlayer->SetStrides(strides); convlayer->SetPaddings(paddings);
- 向Network中添加激活层ActivationLayer(ReLU类型)。
ActivationLayer *reluLayer = network->AddActivationLayer(convLayer->GetOutput(0), ActivationKind::RELU);
- 指定Network的输出Tensor。
network->SetAsOutput(reluLayer->GetOutput(0));
父主题: C++编程模型