相关疑难解决方法(0)

InfogainLoss层

我希望InfogainLoss在我的模型中使用类型的损失层.但我很难正确定义它.

  1. 关于INFOGAIN_LOSS图层的使用是否有任何教程/示例?

  2. 这个层的输入,类概率,应该是SOFTMAX层的输出,还是足以输入完全连接层的"顶部"?

INFOGAIN_LOSS需要三个输入:类概率,标签和矩阵H.矩阵H可以作为层参数提供infogain_loss_param { source: "fiename" }.
假设我有一个计算一个Python脚本Hnumpy.array形状(L,L)dtype='f4'(其中L是标签在我的模型的数量).

  1. 如何将我转换numpy.arraybinproto可以作为infogain_loss_param { source }模型提供的文件?

  2. 假设我想H作为损失层的第三个输入(底部)提供(而不是作为模型参数).我怎样才能做到这一点?
    我是否定义了一个"顶部"的新数据层H?如果是这样,那么每次训练迭代都不会增加该层的数据,就像训练数据增加一样?如何定义多个不相关的输入"数据"层,以及caffe如何知道从批处理批量读取训练/测试"数据"层,而从H"数据"层知道只读一次所有的训练过程?

numpy protocol-buffers neural-network deep-learning caffe

16
推荐指数
1
解决办法
5837
查看次数

什么是图像分割的不平衡?

我知道图像分类问题的不平衡,例如猫与狗的分类,如果猫图像太多而狗图像太少.但我不知道如何解决分割问题的不平衡.

例如,我的任务是从卫星图像中掩盖云层,因此我将问题转换为两类分割,一类是云,另一类是背景.该数据集具有5800个4波段16位图像,大小为256*256.该体系结构是Segnet,损失函数是二进制交叉熵.

假设有两种情况:

  1. 所有样本中有一半完全被云覆盖,一半没有任何云.
  2. 在每张图像中,一半被云覆盖,一半不被云覆盖.

所以,案例2是平衡的我猜,但案例1如何?

在现实和我的任务中,这两种情况在源卫星图像中是不可能的,因为云层总是相对较小的背景,但如果图像样本由于它们的大尺寸而从源图像中裁剪,则会出现一些新的情况.

因此,样本总是包含三种类型的图像:

  1. 完全被云层覆盖(5800个样本中有254个).
  2. 没有任何云(5800个样本中有1241个).
  3. 云覆盖的一些区域,有些区域没有.(5800中的4305,但我不知道云的百分比,某些样本可能非常高,其他样本可能很少)

我的问题:

样品是否不平衡,我该怎么办?

提前致谢.

machine-learning image-processing image-segmentation caffe keras

9
推荐指数
1
解决办法
2228
查看次数

根据caffe中的"badness"来计算损失值

我想根据训练期间"当前预测"与"正确标签"的接近/远距离来缩放每个图像的损失值.例如,如果正确的标签是"猫"并且网络认为它是"狗",那么惩罚(损失)应该小于网络认为它是"汽车"的情况.

我正在做的方式如下:

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损失一样?

如果有人能给我一些指示,我们将不胜感激.

neural-network deep-learning caffe conv-neural-network

7
推荐指数
1
解决办法
1736
查看次数

caffe中的准确性问题

我有一个有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)

machine-learning neural-network deep-learning caffe

5
推荐指数
1
解决办法
4234
查看次数

是否有任何使用加权损失进行像素分割/分类任务的例子?

我正在对我的数据进行FCN32语义分段.我运行算法来微调我的数据(只有一个通道的灰度图像),直到80,000次迭代; 然而,损失和准确度是波动的,输出图像完全是黑色的.甚至,在80,000次迭代后损失如此之高.我认为分类器不能很好地训练我的数据.所以,我要从头开始训练.另一方面,我的数据有不平衡的类成员.背景像素多于其他四个类.一些研究人员建议使用加权损失.有谁有想法吗?我做得对吗?如何将此加权损失添加到train_val.prototxt?

如果您了解与加权损失培训相关的任何资源/示例,我将非常感激,请在此与我分享.

再次感谢

neural-network deep-learning caffe pycaffe deeplearning4j

5
推荐指数
1
解决办法
606
查看次数