python - 分类交叉熵和二元交叉熵的区别
问题描述
使用 keras 我必须训练一个模型来预测图像属于 0 类还是 1 类。我对二进制和 categorical_cross_entropy 感到困惑。我已经搜索过了,但我仍然很困惑。有人提到,当我们试图预测多类时,我们只使用分类交叉熵,我们应该为此使用 one-hot-encoder 向量。因此,这意味着当我们要使用 binary_cross_entrpoy 进行训练时,我们不需要任何 one-hot-encoded 矢量标签。有些人建议将 one_hot 向量表示为 [0. 1.](如果类为 1)或 [1. 0.](如果类为 0)对于 binary_cross_entropy。我正在使用一个具有分类交叉熵的热编码器 [0 1] 或 [1 0]。我的最后一层是
model.add(Dense(num_classes, activation='softmax'))
# Compile model
model.compile(loss='categorical_crossentropy', optimizer='adadelta', metrics=['accuracy'])
解决方案
对于2 个类,它们在数学上是相同的,因此是二进制的。换句话说,2 类分类交叉熵与单输出二进制交叉熵相同。举一个更具体的例子,这些是相同的:
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', ...)
# is the same as
model.add(Dense(2, activation='softmax'))
model.compile(loss='categorical_crossentropy', ...)
使用哪一个?为了避免一次性编码分类输出,如果您只有 2 个类,则从编码的角度来看,使用二进制交叉熵会更容易。根据实现,二进制情况可能在计算上更有效。
推荐阅读
- amazon-web-services - AWS VPC - 与其他虚拟网络的逻辑隔离
- java - 如何在 Java 中使用 Fico Xpress (Mosel)?
- amazon-web-services - 寻找可以在数据库表(或 S3 和 DB 之间)AWS RDS 和本地数据库实例之间复制数据的 AWS 服务
- reactjs - 在 React 中,如何在 package.json 中使用“主页”属性时部署到多个环境?
- swift - 使用加速器标准化视差图像
- docker - “docker push”在带有 windows runner 的 gitlabci 中需要 1 个参数
- excel - 无法获取 PivotTable 类的 PivotFields 属性 - 不确定我做错了什么
- css - 在测试环境中将测试数据属性设置为反应应用程序中的锚点
- odoo - 当我使用 studio odoo 13 创建一个新应用程序时,视图和主模块是在哪里生成的?
- javascript - 如何使用 javascript execCommand 创建富文本编辑器?