python - 使用 softmax 作为输出函数,而使用 binary_crossentropy 作为损失函数?
问题描述
目前我正在训练一个二元分类模型。我喜欢有两个概率(每个现有类一个)加起来等于 1 的想法。所以我在输出层中使用了 softmax,并获得了非常高的准确度(高达 99.5%)和非常低的损失0,007。在进行一些研究时,我发现二元交叉熵是训练二维分类问题时唯一真正的选择。
现在,当我想使用 softmax 时,如果必须使用分类交叉熵作为损失函数,我会感到困惑。你能帮我理解在二元分类问题中应该使用什么作为损失函数和激活函数吗?为什么?
这是我的代码:
model = tf.keras.Sequential()
model.add(tf.keras.layers.Dense(10, input_dim=input_dim, activation='sigmoid'))
model.add(tf.keras.layers.Dense(10, activation='sigmoid'))
model.add(tf.keras.layers.Dense(2, activation='softmax'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
解决方案
因此,如果每个对象只能代表一个类,那么两者之间就没有区别
model.add(Dense(1, activation='sigmoid'))
loss = tf.keras.losses.BinaryCrossentropy()
和
model.add(Dense(2, activation='softmax'))
loss = tf.keras.losses.CategoricalCrossentropy()
正如这里提到的,二元交叉熵只是分类交叉熵的一种情况。
推荐阅读
- python - 如何使用 def 函数变量函数迭代 pandas df
- azure-devops - VSTS / AzureDevOps REST API 中的关系索引是什么?
- ionic-framework - 离子原生 HTTP 捕获为空
- django - 为什么我在分配之前收到错误局部变量“user_form”引用
- angular - 如何在单个组件中验证多个表单?(反应式表单验证)
- python - 如何配置 pylint / python 来检查 MicroPython 语法?
- java - RecyclerView 滚动缓慢,项目中有三个元素和 ImageViews
- javascript - '机器人:名称'在
tag 必须是 React Native 中的有效 Java 类名 - json - 以最佳方式存储数据库 json 文件以响应本机应用程序
- go - 从结构中删除元素,但仅针对这一功能