成果nncu user guide主要致谢_第1页
成果nncu user guide主要致谢_第2页
成果nncu user guide主要致谢_第3页
成果nncu user guide主要致谢_第4页
成果nncu user guide主要致谢_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

NNCU(NNtoolkitforMCU)主要致谢:,,,NNCU(NNtoolkitforMCU)提供了的工具,使您可以方便地在NXPCortex-MMCU上运行神经网络,包括i.MXRT,LPC,Kinetis。NNCU有以下主要功能: 如您所见,我们已经提供了一些转换好的模型。咱们先选 我们也预制了一些测试文件。确保您选择了与模型相对应的测试文件。这里,我们选现在我们选好了转换后的模型文件和测试向量文件,可以点击”干活!”按钮了,这会把它们MCU测试工程下,并重命名为”model.nncu.c”和”tv.nctv.c”,它们将会被编译并到测试用的固件中。点击“干活!”按钮后,一个命令窗口一闪而过即已完成。Testoni.MXRT1050/60i.MXRT1050/60EVK板为例。按下图配置EVK:打开一个终端仿真软件,例如putty, 于.\test_mcu\boards\evkmimxrt1060\demo_apps\nncie_stub\mdk\nncie_stub.uvprojx的KEIL工程,生成并代码(默认是到SDRAM。进入调试会话后,按”F5”按钮来运试程序,下图是一个:MCU测试工程(.nncu,MCU测试工程(.nncu,制作测试向量文件(.nctv,制作测试向量文件(.nctv,获取预训练的模型(.h5,获取预训练的模型(.h5,测试当发现更好在当前最好模型(.nncu,更新MCU测试工程测试当发现更好在当前最好模型(.nncu,更新MCU测试工程 主要使用卷积层并且有30%的随机丢弃率。频变换后得到的时域信号的频谱图,亦或是任何以图像方式处理的多笔时域数据。NNCU已经支持了几种常但只支持某段的估算,如18岁至39岁。Logistic/阳性判别:根据“分界线概率”使用Logistic回归的方式判定还是阳性,其实是127表达为[0,1-1/128]步幅为1/128。 通常在1分钟内即可转换完毕并且这个窗口自动,您也可以在nncuGUI 制上面生成令行再粘贴进来手动执行,以完整观察命令行上都跑了些啥。 会调用另一个pythonscript:test_file_gen.py,我在它退出前截下了图: 式定义的二进制内容以便应用在C工程中,共同链入固件并烧到Flash中直接使用。提到了。这个工作其实就是把.nncu.c和.nctv.c到MCU测试工程下并按以下方式改名:xxx.nncu.c->model.nncu.cxxx.nctv.c-> NNCUGUI(.\nncu_pc\nncuguiset.ini),下次启动时此外,您也可以把设置到指定的配置文件中,通过点击“另存为…”即可,NNCU自动以数据集的名称若要“来真的”,您需要用实时的数据来替换.nctv.c测试文件中的离线数据(虽然也可以是真分用满宝贵的256等级分辨能力。量化后表达范围与分辨粒度的关系如下:表达范围128/2shift_index分辨粒度(步长)1适的移位指数是3。修改.\nncu_pc\loaddata.py“<datasetname>_load_data”函数,返回部分数据样本. 。如果您查看loaddata.py,会看到已经写好的cifar10_load_data函数。表示测试样本上的精度为81.78%。集,这是另一种“过拟合”呢!因此,最好使测试向量不要过少,例如500个以上,层数越多,有个经验是需要“300+需要量化的层数*10”个。凡是数学上会输出无限值域的层,都算是“需层时,移位指数不需要小于7。Tanh也是如出一辙。考“附录A:模型量化专题注:以下内容需要您有少量的Python基础即可理解并照猫画虎,实在没有的话不妨花大半天一下5.25.2.1。。对接到NNCU的测试向量制作,建议提取的数据制作成2个numpy数组文件(“.npy”),例如x.npy和y.npy,分别对应输入数据和。importnumpyasfromkeras.importnumpyasfromkeras.datasetsimportdefifnot#ifminidatasetisnotyetexistthendownloadwholesetandmakemini(1,2),(xtest,ytest)=cifar10.loaddata()a=make_shuffle_int_array(len(y_test))x2=xtest[:5000];y2=yforiinx2[i]=xtest[a[i]];y2[i]=ytest[a[i]]np.save('../datasets/cifar10/c10x.npy',x2)np.save('../datasets/cifar10/c10y.npy',y2)num_classes=x_test=np_load('../datasets/cifar10/c10x.npy').astype('int32')y_test=np_load('../datasets/cifar10/c10y.npy').astype('int32')#Normalizedatato(-1,1)asmodelexpectedx_test=x_test.astype('float32')/128-#Convertclassvectorstobinaryclassmatrices.y_test=to_categorical(y_test,num_classes)returnxtest,ytest这个先是判断有没有已经存在的迷你数据集(“datasets/cifar10/c10x.npy”),若没有则使用值得注意的是,为了便于训练模型,尤其是输入图像的时候,常常把原始数据归一化到(-1,1)之间。以不做归一化。例如,另一个电机控制异常检测的迷你数据集mcad就没有:defdefmcadloadx_test=np_load('../datasets/mcad/x_test.npy').astype('int32')ytest=npload('../datasets/mcad/ytest.npy')returnx_test,在test_file_gen.py中添加测试样本制作函数并在主程序test_file_gen.py-ds迷你数据集名称 t测试向量数目[-c](生成C数组形式的源代defdefcifar10_gen_test(cnt=20,tvGen:NNTestGen=None,isWrCArray=False):num_classes=10x_test=np_load('../datasets/cifar10/c10x.npy').astype('int32')ytest=npload('../datasets/cifar10/c10y.npy').astype('int32')xLen=len(x_test)#substractmeanvaluewithamplificaitonof2power7:[0,256)->[128,127):[-1,1]*2**727次方倍:[0256128,12711*2**7xtest=xtest.astype('int32')-128#shuffletheorder打乱数据顺序, a=settestvectorsize.ForCIFAR10itis32x32RGB:32x32x3=3072bytes#设置测试向量长度。对于CIFAR10,是32x32RGB:32x32x3=3072字节tvGen.SetTestDataSize(xtest[0].shape[0]*xtest[0].shape[1]*xforiinx=x_test[a[i]];y=#invokeAddTestVecmethodoftvGen,withwidth,height,channels,vector,anditslabeltvGen.AddTestVec(x.shape[0],x.shape[1],x.shape[2],x,#tvGen.WriteFilewith'.'(currentpath)writes<datasetname>.nctv#tvGen.WriteFile可以在'.'(当前 )下写入<迷你数据集名>.nctv和<迷你数据集名>.nctv.ctvGen.WriteFile('.',isWrCArray)printprint('Generating%dtestsamplesfor%s'%(cnt,tvGen=NNTestGen('%s.nctv'%sDS,cnt,0,0,1,i tTV=False)ifsDS=='cifar10':tvGen.SetOutType(tvGen.OUTTYPECLS,10)cifar10_gen_test(cnt,tvGen=tvGen,isWrCArray=args.c_ary)elifsDS=='cifar100':tvGen.SetOutType(tvGen.OUTTYPECLS,100)tdefsDS=args.dataset;cntelifelifsDS=='age': gentest(cnt,w=96,sType='age',age0=18,numclasses=22,tvGen=tvGen,isWrCArray=args.cary)elifsDS=='agefull':tvGen.SetOutType(tvGen.OUTTYPERGRCLS,1) _gen_test(cnt,w=96,sType='agefull',age0=15,num_classes=40,tvGen=tvGen,elifsDS==' gentest(cnt,w=96, ',numclasses=2,tvGen=tvGen,isWrCArray=args.celifsDS=='mfn':mfngentest(cnt,tvGen=tvGen,isWrCArray=args.cary)tvGen.SetOutType(tvGen.OUTTYPE_ANG,128)elifsDS=='pqkws':tvGen.SetOutType(tvGen.OUTTYPECLS,10)elifsDS=='gesture':tvGen.SetOutType(tvGen.OUTTYPECLS,3)elifsDS=='malaria':elifsDS=='lenet':elifsDS=='fraud':fraudgentest(cnt,tvGen=tvGen,isWrCArray=args.celifsDS=='mcad':mcadgentest(cnt,tvGen=tvGen,isWrCArray=args.cprint('unsupported%s'%Logistic回归(基于概率判定/阳此需要2倍的样本数量。的API通过nncie.h提供。只要集成了解释器和命令列表数据,就具备了解算模型的基本条件了。 RT10x0上使用。它有配套的头文件”nncie.h”#include#include"nncie.h"#includeWEAKvoid*CIPort_Malloc(size_t{void*pv=malloc(size);if(pv)while(1){}}WEAKvoid (void*{}bytes,void*pvBuf){return}intintprimask=get_PRIMASK();if(nest==0){s_primask=}return}WEAKintreturn-1L;if(0==nest){}return}这里的”CIPort_DefaultReadData”用于从文件系统中一层一层地模型。如果您的确把模型放在文 对于使用单个.nncu.c的情况,调用NNCU 条API:intintCIRunModelXIP(constvoid*pcvModel,constvoid*pcvIn,void是”model1”。在nncie.h中已为您了对应的extern常量,所以对于单个模型您无需。intintCI_RunModelXIP_MTSafe(constvoid*pvModel,constvoid*pcvIn,void并发调用,将会存在多个模型解算上下文对象,每个约320字节。如要改动模型的名字,请打开对应的.nncu.c文件,把”model1”改为其它的即可。齐导致的hardfault。

下2条API:intintCI_zzCreateContextNonXIP(uint32_tmodelHandle,CI_UserContext*pUserCtx,“zzAPI无NNCU为测试样本同样提供类似的API来使用。这些API以源代码的方式放置于测试工程的”o_world.c”中。intintTestVecCreateCtxXIP(constvoid*pcvTestData,TestCtx_t*pcvTestData:指向一个数据块,表示测试向量集合,也就是在.nctv.c中定义的数组名,默认是“test1intTestVecCreateCtx(constchar*intT

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论