二元交叉熵和分类交叉熵的不同结果

我进行了一项实验,比较了binary_crossentropycategorical_crossentropy的使用情况。我尝试理解这两个损失函数在同一问题上的行为表现。

我使用此数据处理二分类问题。

在第一次实验中,我在最后一层使用了1个神经元,并使用sigmoid激活函数和binary_crossentropy。我训练了这个模型10次,并计算了平均准确率。平均准确率为74.12760416666666。

我用于第一次实验的代码如下:

total_acc = 0for each_iter in range(0, 10):    print each_iter    X = dataset[:,0:8]    y = dataset[:,8]    # define the keras model    model = Sequential()    model.add(Dense(12, input_dim=8, activation='relu'))    model.add(Dense(8, activation='relu'))    model.add(Dense(1, activation='sigmoid'))    # compile the keras model    model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])    # fit the keras model on the dataset    model.fit(X, y, epochs=150, batch_size=32)    # evaluate the keras model    _, accuracy = model.evaluate(X, y)    print('Accuracy: %.2f' % (accuracy*100))    temp_acc = accuracy*100    total_acc += temp_acc    del model

在第二次实验中,我在最后一层使用了2个神经元,并使用softmax激活函数和categorical_crossentropy。我将目标y转换为分类数据,再次训练了这个模型10次,并计算了平均准确率。平均准确率为66.92708333333334。

我用于第二次设置的代码如下:

total_acc_v2 = 0for each_iter in range(0, 10):    print each_iter    X = dataset[:,0:8]    y = dataset[:,8]    y = np_utils.to_categorical(y)    # define the keras model    model = Sequential()    model.add(Dense(12, input_dim=8, activation='relu'))    model.add(Dense(8, activation='relu'))    model.add(Dense(2, activation='softmax'))    # compile the keras model    model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])    # fit the keras model on the dataset    model.fit(X, y, epochs=150, batch_size=32)    # evaluate the keras model    _, accuracy = model.evaluate(X, y)    print('Accuracy: %.2f' % (accuracy*100))    temp_acc = accuracy*100    total_acc_v2 += temp_acc    del model

我认为这两个实验是相同的,应该会得到非常相似的结果。为什么准确率之间会有这么大的差异?


回答:

这种行为的原因似乎是随机性。我运行了你的代码,sigmoid模型的平均准确率约为74,而softmax模型的平均准确率也约为74。

Related Posts

多维度Top-k评分

例如,在机器学习中的自然语言处理中,通常使用波束搜索来…

R – Caret train() “错误:停止” 与 “在newdata中未找到对象中使用的所有变量名”

我正在尝试为蘑菇数据构建一个简单的朴素贝叶斯分类器。我…

创建训练和测试数据集分割,数据嵌套在多个文件夹中

我正在准备数据以训练一个图像识别模型。目前我有一个文件…

我的神经网络预测出现错误:IndexError: list index out of range

我正在进行一个简单的垃圾邮件/非垃圾邮件文本分类。我的…

python 给出数组是一维的,但索引了两个维度错误

我已经为 miniBatchGradientDesce…

TensorFlow自定义训练步骤使用不同的损失函数

背景 根据TensorFlow文档,可以使用以下方式执…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注