相关疑难解决方法(0)

如何在Keras的多个班级计算总损失?

假设我有以下参数的网络:

  1. 用于语义分割的完全卷积网络
  2. 损失=加权二元交叉熵(但它可能是任何损失函数,无所谓)
  3. 5类 - 输入是图像,地面实例是二元掩模
  4. 批量大小= 16

现在,我知道损失是按以下方式计算的:二进制交叉熵应用于图像中关于每个类的每个像素.基本上,每个像素将有5个损耗值

这一步后会发生什么?

当我训练我的网络时,它只为一个纪元打印一个损失值.在生成单个值时需要进行多种级别的损失累积,以及在文档/代码中它的发生方式根本不明确.

  1. 首先结合的是 - (1)类的损失值(例如5个值(每个类一个)得到每个像素组合)然后是图像中的所有像素或(2)图像中的每个像素个别班级,然后所有班级损失合并?
  2. 这些不同的像素组合究竟是如何发生的 - 它在何处被求和/在哪里被平均?
  3. Keras的binary_crossentropy平均值超过axis=-1.那么这是所有类的所有像素的平均值还是所有类的平均值,还是两者都是?

以不同的方式说明:不同类别的损失如何组合以产生图像的单一损失值?

这完全没有在文档中解释,对于对keras进行多类预测的人来说非常有用,无论网络类型如何.这是keras代码开始的链接,其中一个首先通过了损失函数.

我能找到最接近解释的是

loss:String(目标函数的名称)或目标函数.看到损失.如果模型具有多个输出,则可以通过传递字典或损失列表在每个输出上使用不同的损失.然后,模型将最小化的损失值将是所有单个损失的总和

来自keras.那么这是否意味着图像中每个类的损失只是总和?

此处的示例代码供有人试用.这是从Kaggle借来的基本实现,并针对多标签预测进行了修改:

# Build U-Net model
num_classes = 5
IMG_DIM = 256
IMG_CHAN = 3
weights = {0: 1, 1: 1, 2: 1, 3: 1, 4: 1000} #chose an extreme value just to check for any reaction
inputs = Input((IMG_DIM, IMG_DIM, IMG_CHAN))
s = Lambda(lambda x: …
Run Code Online (Sandbox Code Playgroud)

python machine-learning deep-learning keras tensorflow

11
推荐指数
1
解决办法
1471
查看次数