【问题标题】:How can I calculate cross-entropy on a sigmoid neural network binary outcome?如何计算 sigmoid 神经网络二元结果的交叉熵?
【发布时间】:2021-03-26 12:20:38
【问题描述】:

我目前正在从头开始构建一个神经网络,我们希望根据两个输入变量(X_1 和 X_2)来识别它们的输出(0 或 1)。我有 2 个隐藏层,所有神经元上都有 sigmoid 激活,但是在计算交叉熵时我卡住了。假设在输出层我有预测 [0.50, 0.57] 但是真正的输出是 0,所以 [1, 0]。如何计算此二进制输出示例的交叉熵?有没有人有任何建议/提示?

【问题讨论】:

    标签: python neural-network cross-entropy sigmoid


    【解决方案1】:

    这是我编写的一个函数,用于计算给定预测列表和真实标签列表的交叉熵。

    from math import log
    # calculate the cross-entropy of predictions and true labels
    def cross_entropy(y, p):
        # y[i] is list of real labels
        # p[i] is the probability of predicting 1
        m = len(y)
        sum_vals = 0
        for i in range(m):
            # first term is for label=1, second term is for label=0
            sum_vals += float(y[i]) * log(p[i]) + (1 - float(y[i])) * log(1 - p[i])
        R = -1/m * sum_vals
        return R
    

    这里标签列表y中的值都是0或1,来自网络的概率预测在p列表中。

    【讨论】:

    • 首先非常感谢您!但是您知道我是否可以将 NN 的输出值解释为概率吗?因为我只在神经元中使用了 sigmoid 激活
    • 所以,我的函数假设 NN 输出一个表示预测 1 的概率的变量。如果我理解正确,您的实现会输出预测 0 的概率和预测 1 的概率。所以,我建议做的是标准化你的预测。即,在您的[0.50,0.57] 示例中,当您创建要通过我包含的函数发送的列表时设置y=0p=0.57/(0.50 + 0.57)
    猜你喜欢
    • 2021-11-25
    • 1970-01-01
    • 2021-10-07
    • 1970-01-01
    • 2017-07-28
    • 2017-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多