参考ncnn的example,该代码关闭了默认half计算,需要注意的是,在extract之前必须设置input,否则在匹配输入blob时会出现匹配不上的err,计算结果与caffe对比,误差很小。具体代码如下:
#include "net.h"
#include <stdio.h>
#if 1
int main()
{
ncnn::Net TestNet;
TestNet.opt.use_vulkan_compute = true;
TestNet.opt.use_fp16_storage = false;
TestNet.opt.use_fp16_arithmetic = false;
TestNet.opt.use_bf16_storage = false;
TestNet.opt.use_fp16_packed = false;
TestNet.opt.use_weight_fp16_storage = false;
TestNet.load_param("test.proto");
TestNet.load_model("test.bin");
ncnn::Mat in, out;
in.create(8,8,8,sizeof(float));
FILE*fp = fopen("input1x8x8x8.bin","rb");
fread(in.data,sizeof(float),8*8*8,fp);
fclose(fp);
ncnn::Extractor ex = TestNet.create_extractor();
ex.input("data",in);
ex.extract("conv3", out);
fp = fopen("out.data","wb");
fwrite(out.data,sizeof(float), out.c * out.h * out.w,fp);
fclose(fp);
fp = fopen("1.txt", "wb");
float* out_data = (float*)out.data;
for (int i = 0; i < out.c * out.h * out.w; i++)
{
fprintf(fp,"%f\n",out_data[i]);
}
fclose(fp);
printf("hello\n");
}