caffe 源码的解读(2)lossFunction
2017-02-27 10:38
246 查看
我们在loss层经常看到的函数:
在caffe实现新增加一个loss层的时候,往往会用到caffe_cpu_scale()函数来缩放一个向量。
这其中有个问题需要注意:假设我想将向量 X 的所有元素乘以-1。结果存放到 Y 中。调用方式:
【X】caffe_cpu_scale(channels,-1,X.cpu_data(),Y.mutable_cpu_data());
【X】caffe_cpu_scale(channels,-1.0,X.cpu_data(),Y.mutable_cpu_data());
【V】caffe_cpu_scale(channels,Dtype(-1.0),X.cpu_data(),Y.mutable_cpu_data());
channels 代表X向量的长度。这种写法时错误的。因为这时候编译器认为-1是int型。我们知道caffe的Dtype实际上只支持两种类型(float,double)。当写-1.0的时候编译器认为时double型。这都是错误的。因为没有编译之前,不可以确定类型。这也是为什么我们看到caffe对参数的初始化的方式都是Dtype(number)的写法。
caffe中自己添加一个新的loss层,编译的时候出现:“Class×× is not a template type”
首先查看自己编写的类模板是不是有问题,我的代码是照着别的loss层写的。自己检查了一遍,没有问题。然后还是编译不通过。
然后尝试着屏蔽代码,最后屏蔽的只剩下一行,还是有问题!!
最后发现:是我定义的层的类名,与caffe.proto中定义的message同名了。改掉好了。
caffe_cpu_axpby(const int N, const float alpha, const float* X, const folat beta, float* Y) //这个函数在caffe的util下面的match-functions.cpp里面 //Y=alpha * X +beta*Y //也就是blob里面的data部分减去diff部分 /* example of caffe_cpu_axpby */ 68 ┊ caffe_cpu_axpby( 69 ┊ ┊ channels, 70 ┊ ┊ alpha, 71 ┊ ┊ diff_.cpu_data(), 72 ┊ ┊ Dtype(1.0), 73 ┊ ┊ bout + (j*channels)); Dtype* bout = bottom[0]->mutable_cpu_diff();
在caffe实现新增加一个loss层的时候,往往会用到caffe_cpu_scale()函数来缩放一个向量。
这其中有个问题需要注意:假设我想将向量 X 的所有元素乘以-1。结果存放到 Y 中。调用方式:
【X】caffe_cpu_scale(channels,-1,X.cpu_data(),Y.mutable_cpu_data());
【X】caffe_cpu_scale(channels,-1.0,X.cpu_data(),Y.mutable_cpu_data());
【V】caffe_cpu_scale(channels,Dtype(-1.0),X.cpu_data(),Y.mutable_cpu_data());
channels 代表X向量的长度。这种写法时错误的。因为这时候编译器认为-1是int型。我们知道caffe的Dtype实际上只支持两种类型(float,double)。当写-1.0的时候编译器认为时double型。这都是错误的。因为没有编译之前,不可以确定类型。这也是为什么我们看到caffe对参数的初始化的方式都是Dtype(number)的写法。
caffe中自己添加一个新的loss层,编译的时候出现:“Class×× is not a template type”
首先查看自己编写的类模板是不是有问题,我的代码是照着别的loss层写的。自己检查了一遍,没有问题。然后还是编译不通过。
然后尝试着屏蔽代码,最后屏蔽的只剩下一行,还是有问题!!
最后发现:是我定义的层的类名,与caffe.proto中定义的message同名了。改掉好了。
相关文章推荐
- caffe源码解读(2)-center_loss_layer.cpp
- caffe源码解读(1)-softmax_loss_layer.cpp
- caffe源码解读(9)-euclidean_loss_layer.cpp
- Caffe源码解读: Softmax_loss_Layer的前向与反向传播
- caffe源码解读(11)-triplet_loss_layer.cpp
- caffe源码解读(3)-contrastive_loss_layer.cpp
- caffe源码解读(10)-hinge_loss_layer.cpp
- caffe源码阅读-插曲-math_function.cpp
- Caffe源码解读(十):Caffe五种层的实现和参数配置
- Caffe源码解读1--blob.hpp
- Caffe源码解读(一):caffe.proto(上)
- Caffe源码解读:relu_layer前向传播和反向传播
- Caffe源码解读:lrn_layer层原理
- Caffe 源码(九):euclidean_loss_layer 分析
- caffe源码阅读9-loss_layer.hpp+各cpp
- caffe源码解读(5)-image_data_layer.cpp
- Caffe源码解读2 —— SyncedMemory
- Caffe源码解读(十三):caffe.proto中Layer参数与源代码中Layer的相互关系
- Caffe源码解读:防止梯度爆炸的措施-梯度裁剪
- Caffe源码解读:pooling_layer的前向传播与反向传播