Darknet--layer结构体相关参数[cpu版]

Darknet--layer结构体相关参数[cpu版]

layer结构体-针对卷积池化全连接dropout层和cost层

struct layer{
LAYER_TYPE type; //网络层的类型名称,LAYER_TYPE是枚举类型
ACTIVATION activation; //激活函数类型,枚举类型
COST_TYPE cost_type; //损失函数类型,枚举类型,仅在使用cost层时使用

/*前向传播、后向传播、更新函数在此结构体定义时,均定义为函数指针
函数指针,其本质是一个指针变量,该指针指向这个函数。总结来说,函数指针就是指向函数的指针。
*/
void(*forward)   (struct layer, struct network_state);
void(*backward)  (struct layer, struct network_state);
void(*update)    (struct layer, int, float,float, float);

int train;//train阶段的标识符,如果进行训练,则值为1
int batch; // 一个batch中含有的图片张数,等于net.batch,其实是cfg中的batch/subdivisions
int steps;//迭代数
int index;//当前层所在网络中的层数

/*
该层输入相关参数,其中:
*w :输入的图片(或特征图)的宽
*h :输入的图片(或特征图)的高
*c :输入的图片(或特征图)的通道数
*inputs :输入的图片(或特征图)的元素个数
*/
int w, h, c;
int inputs;

/*
卷积核相关参数,其中:
*n :卷积核个数
*groups :组数(与分组卷积有关,普通卷积的组数为1)
*index :分组卷积时的组索引
*size :卷积核的长和宽,这里默认卷积核的长宽一样
*stride_x :x方向的步长
*stride_y :y方向的步长
*dilation :空洞卷积空洞率,通常卷积运算都有该参数,普通卷积时为1
*pad :补零的行数或列数,仅对一条边而言
*nweights :权值矩阵元素个数(n个多通道卷积核的所有元素个数)
*weights :权值矩阵(权值矩阵会被压成一个行向量,这里是权值矩阵的首地址,即整个权值矩阵)
*nbiases :偏置项元素个数,对于卷积层,偏置项个数==卷积核个数,对于全连接层,偏置项个数==神经元个数
*biases :偏置项矩阵(同样会被压成一个行向量)
*/
int n, groups, size, stride_x, stride_y, dilation, pad;
int nweights;
float *weights;
int nbiases;
float *biases;

/*
该层输出相关参数,其中:
*out_h :输出的图片(或特征图)的宽
*out_w :输出的图片(或特征图)的高
*out_c :输出的图片(或特征图)的通道数
*outputs :输出的图片(或特征图)的元素个数
*output :该层输出的图片(或特征图)
*/
int out_h, out_w, out_c, outputs;
float *output;

/*仅在softmax层使用, softmax的温度系数, 默认为1*/
float temperature;

/*
反向传播时相关参数:
*loss :损失函数,损失误差(损失函数是单个样本的)
*cost :代价函数(是多个样本的损失函数求和)
*delta :敏感度,即损失函数对当前层每个加权输入netj的偏导(梯度),-əE / ənetj
*weight_updatas :损失函数对权值的偏导,əE / əW
*bias_updates :损失函数对偏置项的偏导,əE / əb
*/
float *loss;
float *cost;
float *delta;
float *weight_updates;
float *bias_updates;

/*
dropout层相关参数:(这里用的是inverted_dropout)
proability :舍弃概率,则 1-proability为保留概率
scale :比例因子,是保留概率的倒数,用于缩放输入元素的值 
rand :每个输入元素对应的随机数概率,用于和舍弃概率进行比较,从而判断输入元素是否置零
*/
float probability;
float scale;
float *rand;

/*
一个卷积核生成一个特征图的计算量,根据该计算量其获取内存空间
*/
size_t workspace_size;

/*
一次卷积运算所进行的浮点运算,这里是以十亿次浮点运算进行统计
*/
float bflops;
};


  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
需要学习Windows系统YOLOv4的同学请前往《WindowsYOLOv4目标检测实战:原理与源码解析》,课程链接 https://edu.csdn.net/course/detail/29865【为什么要学习这门课】 Linux创始人Linus Torvalds有一句名言:Talk is cheap. Show me the code. 冗谈不够,放码过来!  代码阅读是从基础到提高的必由之路。尤其对深度学习,许多框架隐藏了神经网络底层的实现,只能在上层调包使用,对其内部原理很难认识清晰,不利于进一步优化和创新。YOLOv4是最近推出的基于深度学习的端到端实时目标检测方法。YOLOv4的实现darknet是使用C语言开发的轻型开源深度学习框架,依赖少,可移植性好,可以作为很好的代码阅读案例,让我们深入探究其实现原理。【课程内容与收获】 本课程将解析YOLOv4的实现原理和源码,具体内容包括:- YOLOv4目标检测原理- 神经网络及darknet的C语言实现,尤其是反向传播的梯度求解和误差计算- 代码阅读工具及方法- 深度学习计算的利器:BLAS和GEMM- GPU的CUDA编程方法及在darknet的应用- YOLOv4的程序流程- YOLOv4各层及关键技术的源码解析本课程将提供注释后的darknet的源码程序文件。【相关课程】 除本课程《YOLOv4目标检测:原理与源码解析》外,本人推出了有关YOLOv4目标检测的系列课程,包括:《YOLOv4目标检测实战:训练自己的数据集》《YOLOv4-tiny目标检测实战:训练自己的数据集》《YOLOv4目标检测实战:人脸口罩佩戴检测》《YOLOv4目标检测实战:中国交通标志识别》建议先学习一门YOLOv4实战课程,对YOLOv4的使用方法了解以后再学习本课程。【YOLOv4网络模型架构图】 下图由白勇老师绘制  

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值