# 概述

## layer_base分析

layer_base是最底层的基类，它包含了层中需要的数据，先看一下数据类型

``````protected:
cnn_size_t in_size_;//输入大小
cnn_size_t out_size_;//输出大小
bool parallelize_;//是否并行

layer_base* next_;//layer的前后关系由next和prev标明，都是裸指针
layer_base* prev_;
vec_t a_[CNN_TASK_SIZE];          // w * x，a_用来存放中间计算结果(w * x)，最终结果f(w * x)存放在output_
vec_t output_[CNN_TASK_SIZE];     // last output of current layer, set by fprop
vec_t prev_delta_[CNN_TASK_SIZE]; // last delta of previous layer, set by bprop
vec_t W_;          // weight vector，存储weight权重系数
vec_t b_;          // bias vector，存储bias

/** contribution to derivative of loss function with respect to weights of this layer,
indexed by worker / thread */
vec_t dW_[CNN_TASK_SIZE];//存储weight的导数

/** contribution to derivative of loss function with respect to bias terms of this layer,
indexed by worker / thread */
vec_t db_[CNN_TASK_SIZE];//存储bias的导数

vec_t Whessian_; // diagonal terms of hessian matrix，weight对应的hessian矩阵
vec_t bhessian_;//bias对应的hessian矩阵
vec_t prev_delta2_; // d^2E/da^2,
std::shared_ptr<weight_init::function> weight_init_;//weight初始化类，weight_init::function是个类
std::shared_ptr<weight_init::function> bias_init_;//bias初始化``````

CNN_TASK_SIZE是个宏定义的常数，用来并行计算的；`vec_t`是容器

``typedef std::vector<float_t, aligned_allocator<float_t, 64>> vec_t;//以64bit对齐的，存放float_t类型的容器``

`weight_init_``bias_init_`是函数指针，用来初始化权重和偏置的。layer_base中很多纯虚函数，都是留给派生类实现，不同的派生类有不同实现。比较典型的有

``````virtual const vec_t& forward_propagation(const vec_t& in, size_t worker_index) = 0;
virtual const vec_t& back_propagation(const vec_t& current_delta, size_t worker_index) = 0;
virtual const vec_t& back_propagation_2nd(const vec_t& current_delta2) = 0;``````

``````    void merge(cnn_size_t worker_size, cnn_size_t batch_size) {//不同线程计算的梯度进行合并
for (cnn_size_t i = 1; i < worker_size; i++)//注意这里是从1开始计算，结果保存到0
vectorize::reduce<float_t>(&dW_[i][0],
static_cast<cnn_size_t>(dW_[i].size()), &dW_[0][0]);
for (cnn_size_t i = 1; i < worker_size; i++)
vectorize::reduce<float_t>(&db_[i][0],
static_cast<cnn_size_t>(db_[i].size()), &db_[0][0]);
//合并后的梯度，除以batch_size进行归一化
std::transform(dW_[0].begin(), dW_[0].end(), dW_[0].begin(), [&](float_t x) { return x / batch_size; });
std::transform(db_[0].begin(), db_[0].end(), db_[0].begin(), [&](float_t x) { return x / batch_size; });

CNN_LOG_VECTOR(dW_[0], "[dW-merged]");
CNN_LOG_VECTOR(db_[0], "[db-merged]");
}``````

## layer分析

layer派生子layer_base，这个派生只是添加了激活函数。

``````template<typename Activation>
class layer : public layer_base {//layer_base变为layer，多了激活函数Activation
public:
layer(cnn_size_t in_dim, cnn_size_t out_dim, size_t weight_dim, size_t bias_dim)
: layer_base(in_dim, out_dim, weight_dim, bias_dim) {}

activation::function& activation_function() override { return h_; }
protected:
Activation h_;
};``````

• 本文已收录于以下专栏：

## C++,vector模板类的问题？ std::vector<PointT, Eigen::aligned_allocator<PointT> > points；

• qing101hua
• 2017年09月19日 10:42
• 335

## aligned_allocator 源码

aligned_allocator source code
• CQRuler
• 2016年12月11日 13:42
• 333

## Golang源码探索(三) GC的实现原理

http://www.cnblogs.com/zkweb/p/7880099.html Golang从1.5开始引入了三色GC, 经过多次改进, 当前的1.9版本的GC停顿时间已经可以做...
• zdy0_2004
• 2017年11月24日 14:05
• 406

## caffe源码阅读4-layer.hpp

An interface for the units of computation which can be composed into a Net. Layer&s must implement ...
• thy_2014
• 2016年07月18日 18:13
• 1629

## tiny_cnn源码阅读(4)-convolutional_layer

convolutional_layer是用来计算卷积的。 connection_table connecction_table是一个二维数组，(x,y)的值（true/false)表示x和y是否关...
• KangRoger
• 2016年06月02日 22:39
• 1048

## Caffe2源码理解系列之存储

Caffe2存储Caffe2中的存储结构层次从上到下依次是Workspace, Blob, Tensor。Workspace存储了运行时所有的Blob和实例化的Net。Blob可以视为对任意类型的一个...
• a_1937
• 2017年11月13日 18:20
• 378

## Linux内核中内存管理相关的数据结构

• u012946230
• 2017年10月16日 22:10
• 38

## tiny_cnn源码阅读(2)-激活函数

• KangRoger
• 2016年05月29日 14:46
• 1737

## tiny_cnn 在linux下的编译运行

1. 下载tiny-cnn-master  https://github.com/nyanp/tiny-cnn 2. 打开终端，进入tiny-cnn-master/examples/mnist 3....
• baidu_34540973
• 2016年04月05日 09:21
• 563

## CSAPP: Malloc Lab 7

csappmallocoptimizationlabics 本次Lab真是CSAPP系列Lab中最恶心的Lab了！ 这是《深入理解计算机系统》第二版配套Lab中的第7个Lab，对应本书...
• huang1024rui
• 2016年01月16日 10:47
• 7446

举报原因： 您举报文章：tiny_cnn源码阅读(3)-layer_base和layer 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)