我希望InfogainLoss
在我的模型中使用类型的损失层.但我很难正确定义它.
关于INFOGAIN_LOSS
图层的使用是否有任何教程/示例?
这个层的输入,类概率,应该是SOFTMAX
层的输出,还是足以输入完全连接层的"顶部"?
INFOGAIN_LOSS
需要三个输入:类概率,标签和矩阵H
.矩阵H
可以作为层参数提供infogain_loss_param { source: "fiename" }
.
假设我有一个计算一个Python脚本H
的numpy.array
形状(L,L)
与dtype='f4'
(其中L
是标签在我的模型的数量).
如何将我转换numpy.array
为binproto
可以作为infogain_loss_param { source }
模型提供的文件?
假设我想H
作为损失层的第三个输入(底部)提供(而不是作为模型参数).我怎样才能做到这一点?
我是否定义了一个"顶部"的新数据层H
?如果是这样,那么每次训练迭代都不会增加该层的数据,就像训练数据增加一样?如何定义多个不相关的输入"数据"层,以及caffe如何知道从批处理批量读取训练/测试"数据"层,而从H
"数据"层知道只读一次所有的训练过程?
我知道图像分类问题的不平衡,例如猫与狗的分类,如果猫图像太多而狗图像太少.但我不知道如何解决分割问题的不平衡.
例如,我的任务是从卫星图像中掩盖云层,因此我将问题转换为两类分割,一类是云,另一类是背景.该数据集具有5800个4波段16位图像,大小为256*256.该体系结构是Segnet,损失函数是二进制交叉熵.
假设有两种情况:
所以,案例2是平衡的我猜,但案例1如何?
在现实和我的任务中,这两种情况在源卫星图像中是不可能的,因为云层总是相对较小的背景,但如果图像样本由于它们的大尺寸而从源图像中裁剪,则会出现一些新的情况.
因此,样本总是包含三种类型的图像:
我的问题:
样品是否不平衡,我该怎么办?
提前致谢.
machine-learning image-processing image-segmentation caffe keras
我想根据训练期间"当前预测"与"正确标签"的接近/远距离来缩放每个图像的损失值.例如,如果正确的标签是"猫"并且网络认为它是"狗",那么惩罚(损失)应该小于网络认为它是"汽车"的情况.
我正在做的方式如下:
1-我定义了标签之间距离的矩阵,
2-将该矩阵作为底层传递给"softmaxWithLoss"
图层,
3将每个log(prob)乘以该值以根据不良情况缩放损失forward_cpu
但是我不知道该怎么做backward_cpu
.我知道渐变(bottom_diff)必须改变但不太确定,如何在这里加入比例值.根据数学,我必须按比例缩放渐变(因为它只是一个比例),但不知道如何.
此外,似乎在caffe中有loosLayer被称为"InfoGainLoss"
非常相似的工作如果我没有弄错,但是这一层的后面部分有点令人困惑:
bottom_diff[i * dim + j] = scale * infogain_mat[label * dim + j] / prob;
Run Code Online (Sandbox Code Playgroud)
我不确定为什么infogain_mat[]
要分开prob
而不是乘以!如果我使用单位矩阵infogain_mat
是不是它应该像前向和后向的softmax损失一样?
如果有人能给我一些指示,我们将不胜感激.
我有一个有4个布尔输出的网络.这不是分类问题,而且每个问题都是有意义的.我期望每个人得到零或一个.现在我使用了欧几里德损失函数.
有1000000个样本.在输入文件中,每个都有144个功能,因此输入的大小为1000000*144.我使用批量大小为50,否则处理时间太长.输出文件的大小为1000000*4,即每个输入有四个输出.
当我使用精确度层时,它会抱怨输出的维度.它只需要一个布尔输出,而不是四个.我认为这是因为它将问题视为分类问题.我有两个问题.首先,考虑到精度层的误差,欧几里德损失函数是否适合这项任务?我如何才能获得网络的准确性?其次,我将获得四个变量中每个变量的预测输出的确切值.我的意思是我需要每个测试记录的确切预测值.现在,我只有每批的损失值.请指导我解决这些问题.
谢谢,Afshin
火车网络是:
{ state {
phase: TRAIN
}
layer {
name: "abbas"
type: "HDF5Data"
top: "data"
top: "label"
hdf5_data_param {
source: "/home/afo214/Research/hdf5/simulation/Train-1000-11- 1/Train-Sc-B-1000-11-1.txt"
batch_size: 50
}
}
layer {
name: "ip1"
type: "InnerProduct"
bottom: "data"
top: "ip1"
inner_product_param {
num_output: 350
weight_filler {
type: "xavier"
}
}
}
layer {
name: "sig1"
bottom: "ip1"
top: "sig1"
type: "Sigmoid"
}
layer {
name: "ip2"
type: "InnerProduct"
bottom: "sig1"
top: "ip2"
inner_product_param {
num_output: 150
weight_filler {
type: "xavier" …
Run Code Online (Sandbox Code Playgroud) 我正在对我的数据进行FCN32语义分段.我运行算法来微调我的数据(只有一个通道的灰度图像),直到80,000次迭代; 然而,损失和准确度是波动的,输出图像完全是黑色的.甚至,在80,000次迭代后损失如此之高.我认为分类器不能很好地训练我的数据.所以,我要从头开始训练.另一方面,我的数据有不平衡的类成员.背景像素多于其他四个类.一些研究人员建议使用加权损失.有谁有想法吗?我做得对吗?如何将此加权损失添加到train_val.prototxt?
如果您了解与加权损失培训相关的任何资源/示例,我将非常感激,请在此与我分享.
再次感谢