文档首页> Atlas 300应用(型号 3000)> TE自定义算子开发指导> caffe.proto文件算子定义(可选)
更新时间:2021-03-18 GMT+08:00
分享

caffe.proto文件算子定义(可选)

如果使用的是Caffe开源框架的模型,请参考本章节进行caffe.proto文件的定义;如果使用的Tensorflow开源框架的模型,此章节跳过。

算子开发完成后,需要在DDK内置的caffe.proto文件中增加自定义算子的相关定义(如果内置的caffe.proto文件中已存在此算子的定义则此章节跳过)。

若同一模型中存在多个不支持的自定义算子,请参考本章节一次性将相关算子定义进行添加。算子插件实现时会根据算子名称从caffe.proto文件读取相关的算子参数进行解析,进而将算子数据结构转换为适配昇腾AI处理器的离线模型支持的数据结构。

DDK中内置的caffe.proto文件的路径为:“$HOME/tools/che/ddk/ddk/include/inc/custom/proto/caffe/caffe.proto”,用户可基于此文件进行修改,添加自定义算子的定义。

此处以添加Reduction算子的定义为例(DDK中内置的caffe.proto已经添加了Reduction算子的定义,此处以此样例进行说明)。

  1. 在LayerParameter中添加Reduction算子的定义。

    如下所示,在LayerParameter中加入Reduction层的定义,并设置其ID。

    message LayerParameter {
    ……
    optional ReductionParameter reduction_param = 136;   //此ID需要保持唯一
    ……
    }

  2. 在caffe.proto文件中增加Reduction层的参数定义。

    message ReductionParameter {
      enum ReductionOp {          //算子支持的操作类型
        SUM = 1;                           //对被reduce的所有轴求和
        ASUM = 2;                        //对被reduce的所有轴求绝对值后求和
        SUMSQ = 3;                      //对被reduce的所有轴求平方后再求和
        MEAN = 4;                        //对被reduce的所有轴求均值
      }
      optional ReductionOp operation = 1 [default = SUM];   // 定义算子的操作
      optional int32 axis = 2 [default = 0];                                //定义reduce的轴
      optional float coeff = 3 [default = 1.0]; // coefficient for output  //标量,对结果进行缩放的倍数
    }

分享:

    相关文档

    相关产品