python - Keras 中二进制分类的输出层
问题描述
我需要将图像分类为癌性或非癌性。
为此,我构建了一个经典的 CNN,但我在用这样的两列向量标记我的数据集之间犹豫不决:
cancerous: [0, 1]
not cancerous: [1, 0]
并使用具有 2 个输出神经元的 softmax 激活函数。
model.add(Dense(2, activation='softmax'))
或者
cancerous: [1]
not cancerous: [0]
并使用带有一个输出神经元的 sigmoid 激活函数。
model.add(Dense(1, activation='sigmoid'))
鉴于我需要使用患癌症的概率作为患者的最终指标以及绘制 ROC 曲线,哪种模型更好?
解决方案
一般的趋势是使用具有 sigmoid 曲线的多个输出节点进行多标签分类。通常,softmax 用于多类分类,其中 softmax 预测每个输出的概率,我们选择概率最高的类。对于二元分类,我们可以选择单个神经元输出通过 sigmoid,然后设置一个阈值来选择类别,或者使用两个神经元输出然后执行 softmax。在任何一种情况下,阈值化都是可能的。绘制具有单个神经元输出的 ROC 曲线相当容易,因为您必须对一个值设置阈值。所以,你可以很容易地去model.add(Dense(1, activation='sigmoid'))
推荐阅读
- ios - 应用商店拒绝应用后如何再次上传应用
- python-3.x - Python gspread 获取 accessNotConfigured - 项目(编号)未找到,不能用于 API 调用
- php - 在表单中存储同一字段的多个值
- telegram - 带有输入的电报机器人警报
- python - 附加具有相同形状的 ndarray
- php - 如何在 php + json 中进行 POST 表单调用
- ios - 谷歌信标工具无法配置虚拟信标
- kubernetes - 如何在 Kubernetes 集群上最好地运行 Apache Airflow 任务?
- python - 对引用对象的元组进行排序
- r - 从日期和时间计算住院人数。