觉得caffe中 softmax_layer.cpp代码有点问题,请教

template <typename Dtype>
void SoftmaxLayer<Dtype>::Forward_cpu(const vector<Blob<Dtype>*>& bottom,
const vector<Blob<Dtype>*>& top) {
const Dtype* bottom_data = bottom[0]->cpu_data();
Dtype* top_data = top[0]->mutable_cpu_data();
Dtype* scale_data = scale_.mutable_cpu_data();
int channels = bottom[0]->shape(softmax_axis_);
int dim = bottom[0]->count() / outer_num_;
caffe_copy(bottom[0]->count(), bottom_data, top_data);
// We need to subtract the max to avoid numerical issues, compute the exp,
// and then normalize.
for (int i = 0; i < outer_num_; ++i) {
// initialize scale_data to the first plane
caffe_copy(inner_num_, bottom_data + i * dim, scale_data);
for (int j = 0; j < channels; j++) {
for (int k = 0; k < inner_num_; k++) {
scale_data[k] = std::max(scale_data[k],
bottom_data[i * dim + j * inner_num_ + k]);
}
}
// subtraction
caffe_cpu_gemm<Dtype>(CblasNoTrans, CblasNoTrans, channels, inner_num_,
1, -1., sum_multiplier_.cpu_data(), scale_data, 1., top_data);
// exponentiation
caffe_exp<Dtype>(dim, top_data, top_data);
// sum after exp
caffe_cpu_gemv<Dtype>(CblasTrans, channels, inner_num_, 1.,
top_data, sum_multiplier_.cpu_data(), 0., scale_data);
// division
for (int j = 0; j < channels; j++) {
caffe_div(inner_num_, top_data, scale_data, top_data);
top_data += inner_num_;
}
}
}
个人觉得,上述代码中的
caffe_cpu_gemm<Dtype>(CblasNoTrans, CblasNoTrans, channels, inner_num_, 1, -1., sum_multiplier_.cpu_data(), scale_data, 1., top_data)有点问题,不应该写成caffe_cpu_gemm<Dtype>(CblasNoTrans, CblasNoTrans, channels, inner_num_, 1, -1., sum_multiplier_.cpu_data(), scale_data, 1., top_data+ i*dim)吗?

caffe_exp<Dtype>(dim, top_data, top_data);也应该是top_data + i*dim
 
不知道是不是哪想错了,求赐教!
已邀请:

刘昕_ICT

赞同来自: OutLaws xjtuljy longhuo2009

你们啊,不要总想着搞个大新闻,把caffe批判一番,这里有个博文,解释了caffe_gemm:http://blog.csdn.net/visionhack/article/details/46606051
 
另外,你说的top_data+ i*dim的问题,看这行加粗的代码
for (int j = 0; j < channels; j++) { 
caffe_div(inner_num_, top_data, scale_data, top_data); 
top_data += inner_num_; }
 

xmyqsh

赞同来自:

哈哈  我之前也在这儿坑了老半天
@刘昕_ICT 帮我看看我这帖子的问题  也是softmax相关的  
http://www.caffecn.cn/?/question/606
http://www.caffecn.cn/?/question/605
http://www.caffecn.cn/?/question/604

要回复问题请先登录注册