caffe 运行过程中如何显示更新梯度信息 solver.cpp
2015-03-09 20:36
459 查看
在solver.cpp中。。。
包含文件变动如下:
#include <cstdio>
#include <algorithm>
#include <string>
#include <vector>
#include <iomanip>
#include "caffe/net.hpp"
#include "caffe/proto/caffe.pb.h"
#include "caffe/solver.hpp"
#include "caffe/util/io.hpp"
#include "caffe/util/math_functions.hpp"
#include "caffe/util/upgrade_proto.hpp"
using std::max;
using std::min;
using std::setw;
using std::scientific;
using std::left;
正文cpp文件中,void Solver<Dtype>::Solve(const char* resume_file) {
中变动如下:
if (display) {
LOG(INFO) << "Iteration " << iter_ << ", loss = " << loss;
const vector<Blob<Dtype>*>& result = net_->output_blobs();
int score_index = 0;
for (int j = 0; j < result.size(); ++j) {
const Dtype* result_vec = result[j]->cpu_data();
const string& output_name =
net_->blob_names()[net_->output_blob_indices()[j]];
const Dtype loss_weight =
net_->blob_loss_weights()[net_->output_blob_indices()[j]];
for (int k = 0; k < result[j]->count(); ++k) {
ostringstream loss_msg_stream;
if (loss_weight) {
loss_msg_stream << " (* " << loss_weight
<< " = " << loss_weight * result_vec[k] << " loss)";
}
LOG(INFO) << " Train net output #"
<< score_index++ << ": " << output_name << " = "
<< result_vec[k] << loss_msg_stream.str();
}
}
//add by me
int max_len = 0;
for (int l = 0; l < net_->layers().size(); ++l) {
Layer<Dtype>& layer = *net_->layers()[l].get();
if (layer.blobs().size() > 0 && layer.layer_param().name().length()
> max_len)
max_len = layer.layer_param().name().length();
}
for (int l = 0; l < net_->layers().size(); ++l) {
Layer<Dtype>& layer = *net_->layers()[l].get();
for (int b = 0; b < layer.blobs().size(); ++b) {
Blob<Dtype>& blob = *layer.blobs()[b].get();
const Dtype* blob_cpu_data = blob.cpu_data();
const Dtype* blob_cpu_diff = blob.cpu_diff();
Dtype data_sum = 0;
Dtype diff_sum = 0;
for (int i = 0; i < blob.count(); ++i) {
data_sum += (blob_cpu_data[i] > Dtype(0.)) ? blob_cpu_data[i]
: - blob_cpu_data[i];
diff_sum += (blob_cpu_diff[i] > Dtype(0.)) ? blob_cpu_diff[i]
: - blob_cpu_diff[i];
}
data_sum /= blob.count();
diff_sum /= blob.count();
LOG(INFO) << std::left << std::setw(max_len + 1) << std::setfill(' ')
<< layer.layer_param().name()
<< " blob" << b << ": " << std::scientific
<< data_sum << " [" << diff_sum << "]";
}
}
//end revised by me
}
包含文件变动如下:
#include <cstdio>
#include <algorithm>
#include <string>
#include <vector>
#include <iomanip>
#include "caffe/net.hpp"
#include "caffe/proto/caffe.pb.h"
#include "caffe/solver.hpp"
#include "caffe/util/io.hpp"
#include "caffe/util/math_functions.hpp"
#include "caffe/util/upgrade_proto.hpp"
using std::max;
using std::min;
using std::setw;
using std::scientific;
using std::left;
正文cpp文件中,void Solver<Dtype>::Solve(const char* resume_file) {
中变动如下:
if (display) {
LOG(INFO) << "Iteration " << iter_ << ", loss = " << loss;
const vector<Blob<Dtype>*>& result = net_->output_blobs();
int score_index = 0;
for (int j = 0; j < result.size(); ++j) {
const Dtype* result_vec = result[j]->cpu_data();
const string& output_name =
net_->blob_names()[net_->output_blob_indices()[j]];
const Dtype loss_weight =
net_->blob_loss_weights()[net_->output_blob_indices()[j]];
for (int k = 0; k < result[j]->count(); ++k) {
ostringstream loss_msg_stream;
if (loss_weight) {
loss_msg_stream << " (* " << loss_weight
<< " = " << loss_weight * result_vec[k] << " loss)";
}
LOG(INFO) << " Train net output #"
<< score_index++ << ": " << output_name << " = "
<< result_vec[k] << loss_msg_stream.str();
}
}
//add by me
int max_len = 0;
for (int l = 0; l < net_->layers().size(); ++l) {
Layer<Dtype>& layer = *net_->layers()[l].get();
if (layer.blobs().size() > 0 && layer.layer_param().name().length()
> max_len)
max_len = layer.layer_param().name().length();
}
for (int l = 0; l < net_->layers().size(); ++l) {
Layer<Dtype>& layer = *net_->layers()[l].get();
for (int b = 0; b < layer.blobs().size(); ++b) {
Blob<Dtype>& blob = *layer.blobs()[b].get();
const Dtype* blob_cpu_data = blob.cpu_data();
const Dtype* blob_cpu_diff = blob.cpu_diff();
Dtype data_sum = 0;
Dtype diff_sum = 0;
for (int i = 0; i < blob.count(); ++i) {
data_sum += (blob_cpu_data[i] > Dtype(0.)) ? blob_cpu_data[i]
: - blob_cpu_data[i];
diff_sum += (blob_cpu_diff[i] > Dtype(0.)) ? blob_cpu_diff[i]
: - blob_cpu_diff[i];
}
data_sum /= blob.count();
diff_sum /= blob.count();
LOG(INFO) << std::left << std::setw(max_len + 1) << std::setfill(' ')
<< layer.layer_param().name()
<< " blob" << b << ": " << std::scientific
<< data_sum << " [" << diff_sum << "]";
}
}
//end revised by me
}
相关文章推荐
- caffe运行中显示梯度信息
- domino代理运行过程中,在WEB页面上显示信息
- 如何解决更新证书、或者创建SSL证书的时候显示“无法生成证书请求,拒绝访问”等提示信息
- 如何让php运行时显示/不显示出错信息
- 如何将Ubuntu系统下编译过程中的警告信息输出成英文显示
- Documentum常见问题5—如何查看工作流运行过程中用户的note备注信息
- 如何在编译过程中或者程序运行过程中修改程序版本信息
- Documentum常见问题5—如何查看工作流运行过程中用户的note备注信息【转】
- 怎样才可以得到PHP的出错信息?php运行时不显示错误信息。如何屏蔽php出错信息?
- 请问:软件运行前的设置界面显示'第一次运行软件,正在设置...'等信息的东东叫什么?如何做出这种东东呢?
- 如何显示一个表的字段信息(ACCESS)
- 如何让GridView过长数据缩写,当鼠标停留时显示详细信息...
- fc6 添加/删除软件软,显示“另一个程序正在运行并在访问软件信息”
- 一个页面在运行时,如何在页面上显示“正在运行页面,请稍候”
- 一场讨论引起的问题——如何保存和即时更新用户信息?
- C++--如何在Dialog和View中显示梯度背景颜色
- GridView更新和删除显示提示信息
- ASP.NET 如何:显示安全错误信息
- YetAnotherForum.Net+ScrewTurn Wiki中文完美汉化增强版(07-16更新:升级到v1.2.3 新增显示论坛版主信息,修复Wiki中文搜索)(GPL协议源码发布)
- Intersge无法启动--原因是Message Queues的资源不足,共享内存不足 RedHat如何在系统运行过程中修改内核参数