1.如果您从当前复制,infogain_loss_layer.cpp
您可以轻松适应。对于向前传球更改线 59-66,如:
// assuming num = batch size, dim = label size, image_dim = image height * width
Dtype loss = 0;
for (int i = 0; i < num; ++i) {
for(int k = 0; k < image_dim; k++) {
int label = static_cast<int>(bottom_label[i*image_dim+k]);
for (int j = 0; j < dim; ++j) {
Dtype prob = std::max(bottom_data[i *image_dim *dim+ k * dim + j], Dtype(kLOG_THRESHOLD));
loss -= infogain_mat[label * dim + j] * log(prob);
}
}
}
同样,对于向后传递,您可以将第 95-101 行更改为:
for (int i = 0; i < num; ++i) {
for(int k = 0; k < image_dim; k++) {
const int label = static_cast<int>(bottom_label[i*image_dim+k]);
for (int j = 0; j < dim; ++j) {
Dtype prob = std::max(bottom_data[i *image_dim *dim+ k * dim + j], Dtype(kLOG_THRESHOLD));
bottom_diff[i *image_dim *dim+ k * dim + j] = scale * infogain_mat[label * dim + j] / prob;
}
}
}
这有点天真。我似乎没有找到任何优化选项。您还需要在 reshape 中更改一些设置代码。
2.在这个 PR建议中,对于H
putmin_count/|i|
中的对角线条目|i|
,样本数在哪里label i
。其他一切都为 0。另见此。至于加载权重矩阵H
对于所有输入都是固定的。您可以将其加载为 lmdb 文件或以其他方式。
3.是的,您需要重建。
更新:正如Shai指出的那样,这周的信息增益拉动已经获得批准。所以当前版本的 caffe 支持像素级信息增益损失。