caffe深度学习网络relu层代码注释

// Copyright 2014 BVLC and contributors.

#include <algorithm>
#include <vector>

#include "caffe/layer.hpp"
#include "caffe/vision_layers.hpp"

using std::max;

namespace caffe {

template <typename Dtype>
Dtype ReLULayer<Dtype>::Forward_cpu(const vector<Blob<Dtype>*>& bottom,
									vector<Blob<Dtype>*>* top) 
{
	const Dtype* bottom_data = bottom[0]->cpu_data(); //获得指向输入的指针
	Dtype* top_data = (*top)[0]->mutable_cpu_data();  //获得指向输出的指针
	const int count = bottom[0]->count();
  
	//对bottom中的每一个数据进行relu函数映射
	for (int i = 0; i < count; ++i) 
	{
		top_data[i] = max(bottom_data[i], Dtype(0));
	}
	
	return Dtype(0);
}

template <typename Dtype>
void ReLULayer<Dtype>::Backward_cpu(const vector<Blob<Dtype>*>& top,
									const bool propagate_down,
									vector<Blob<Dtype>*>* bottom) 
{
	if (propagate_down) 
	{
		const Dtype* bottom_data = (*bottom)[0]->cpu_data();
		const Dtype* top_diff = top[0]->cpu_diff();
		Dtype* bottom_diff = (*bottom)[0]->mutable_cpu_diff();
		const int count = (*bottom)[0]->count();
		for (int i = 0; i < count; ++i) 
		{
			bottom_diff[i] = top_diff[i] * (bottom_data[i] > 0);
		}
	}
}


INSTANTIATE_CLASS(ReLULayer);


}  // namespace caffe

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值