【问题标题】:How to sum up and interpret epoch loss while using binary crossentropy?使用二元交叉熵时如何总结和解释 epoch loss?
【发布时间】:2020-07-23 08:12:08
【问题描述】:

出于教育目的,我创建深度学习库已有一段时间了。前几天接到一个任务 实习生职位使用 numpy 从头开始​​创建模型,该模型会将 MNIST 数据集子集的数字分类为 2 类(0 - 奇数,1 - 素数)。一切都很顺利,直到 现在是创建损失函数的时候了。因为它是一个 二元分类问题,我选择了二元交叉熵。 有一个实现:

def loss(self, target: np.ndarray, predicted: np.ndarray, epsilon=1e-7) -> np.ndarray:
        predicted = np.clip(predicted, epsilon, 1 - epsilon)
        predicted = np.log(predicted / (1 - predicted))
        return (target * -np.log(self.sigmoid(predicted)) +
                (1 - target) * -np.log(1 - self.sigmoid(predicted)))

基本上它与 keras 用于 numpy 后端的功能几乎相同。批量损失函数的输出 16号如下:

 [[1.61180957e+01]
 [1.00000005e-07]
 [1.00000005e-07]
 [1.61180957e+01]
 [1.00000005e-07]
 [1.61180957e+01]
 [1.61180957e+01]
 [1.00000005e-07]
 [1.61180957e+01]
 [1.61180957e+01]
 [1.00000005e-07]
 [1.61180957e+01]
 [1.61180957e+01]
 [1.00000005e-07]
 [1.61180957e+01]
 [1.00000005e-07]]

我非常怀疑它们不应该是这样的。 也许这是我们必须重构的数据集的问题 我们自己。为了澄清典型样本只是一个 28x28 像素值矩阵,标签只是一个数字 0 或 1。 当我尝试总结整个时期的损失并将其保存到 Keras 历史对象之类的东西时,就会出现下一个问题。 我是否应该总结每批迭代的损失,然后 将其除以采样数(这对我来说听起来不对)还是必须正确计算 epoch loss?

提前感谢您的帮助,并保持安全和健康!

【问题讨论】:

    标签: numpy deep-learning mnist loss cross-entropy


    【解决方案1】:

    我相信您当前的输出是针对小批量的,否则您的“预测”应该是单个值而不是 ndarray。

    还有你所说的时代损失是什么意思?您应该计算每个小批量的损失,即所述的平均损失。

    【讨论】:

    • 我的错,我说的是小批量,我只是不认为我得到的损失是正确的。我的平均损失约为 2,当我使用 keras 模型执行相同任务时,我得到了大约 200,所以我想我的计算在某些时候是错误的
    猜你喜欢
    • 1970-01-01
    • 2019-07-13
    • 1970-01-01
    • 2018-11-03
    • 2020-01-03
    • 2020-09-10
    • 2018-03-12
    • 2020-12-08
    • 1970-01-01
    相关资源
    最近更新 更多