BCELoss

paddle.fluid.dygraph.BCELoss(input, label, weight=None, reduction=’mean’)[源代码]

该接口用于创建一个BCELoss的可调用类,用于计算输入和标签之间的二值交叉熵损失值。二值交叉熵损失函数公式如下:

当 weight 不为空时,公式为:

BCELoss - 图1

当 weight 为空时,公式为:

BCELoss - 图2

当 reduction 为 none 时,最终的输出结果为:

BCELoss - 图3

当 reduction 为 sum 时,最终的输出结果为:

BCELoss - 图4

当 reduction 为 sum 时,最终的输出结果为:

BCELoss - 图5

**注意:输入数据一般是 fluid.layers.sigmoid 的输出。因为是二分类,所以标签值应该是0或者1。

输入input和标签label的维度是[N, *], 其中N是batch_size, * 是任意其他维度。 如果 reduction'none', 则输出的维度为 [N, *], 与输入input的形状相同。 如果 reduction'mean''sum', 则输出的维度为 [1]。

参数

  • weight(Variable, optional):- 手动指定每个batch二值交叉熵的权重,如果指定的话,维度必须是一个batch的数据的维度。数据类型是float32, float64。默认是:None。
  • reduction(str, optional):- 指定应用于输出结果的计算方式,可选值有: 'none', 'mean', 'sum' 。默认为 'mean',计算 BCELoss 的均值;设置为 'sum' 时,计算 BCELoss 的总和;设置为 'none' 时,则返回BCELoss。

返回

返回计算BCELoss的可调用对象。

代码示例

  1. # declarative mode
  2. import paddle.fluid as fluid
  3. import numpy as np
  4. import paddle
  5. input = fluid.data(name="input", shape=[3, 1], dtype='float32')
  6. label = fluid.data(name="label", shape=[3, 1], dtype='float32')
  7. bce_loss = fluid.dygraph.BCELoss()
  8. output = bce_loss(input, label)
  9. place = fluid.CPUPlace()
  10. exe = fluid.Executor(place)
  11. exe.run(fluid.default_startup_program())
  12. input_data = np.array([0.5, 0.6, 0.7]).astype("float32")
  13. label_data = np.array([1.0, 0.0, 1.0]).astype("float32")
  14. output_data = exe.run(fluid.default_main_program(),
  15. feed={"input":input_data, "label":label_data},
  16. fetch_list=[output],
  17. return_numpy=True)
  18. print(output_data) # [array([0.65537095], dtype=float32)]
  19. # imperative mode
  20. import paddle.fluid.dygraph as dg
  21. with dg.guard(place) as g:
  22. input = dg.to_variable(input_data)
  23. label = dg.to_variable(label_data)
  24. output = bce_loss(input, label)
  25. print(output.numpy()) # [0.65537095]