You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于HAM10000数据集的深度学习模型双多分类输出及肤色偏差分析问询

解决方案:多输出深度学习模型实现肤色与癌症分类的独立预测

核心思路

直接使用多输出模型,让模型同时学习两个独立任务:癌症分类(7类多分类或恶性/良性二分类)和肤色分类(亮/暗二分类),彻底避免合并标签的歧义问题。训练完成后,通过对预测结果分组,就能生成按肤色拆分的癌症分类报告,或按癌症类型拆分的肤色预测表现。


1. 模型架构搭建(以Keras函数式API为例)

基于共享的特征提取 backbone(比如预训练的ResNet、EfficientNet),分叉出两个独立的输出分支:

  • 分支1:负责癌症分类(7类用softmax激活,二分类用sigmoid)
  • 分支2:负责肤色分类(二分类用sigmoid激活)
from tensorflow.keras import layers, Model
from tensorflow.keras.applications import ResNet50

# 共享特征提取 backbone(可根据需求冻结或微调)
base_model = ResNet50(weights='imagenet', include_top=False, input_shape=(224, 224, 3))
x = base_model.output
x = layers.GlobalAveragePooling2D()(x)

# 癌症分类分支(示例为7类多分类,若用恶性/良性二分类则改为Dense(1, activation='sigmoid'))
cancer_output = layers.Dense(7, activation='softmax', name='cancer_class')(x)

# 肤色分类分支(亮/暗二分类)
skin_tone_output = layers.Dense(1, activation='sigmoid', name='skin_tone')(x)

# 定义多输出模型
model = Model(inputs=base_model.input, outputs=[cancer_output, skin_tone_output])

2. 模型编译与训练

为两个输出分支分别指定损失函数,编译后用包含双标签的数据集训练:

from tensorflow.keras.losses import CategoricalCrossentropy, BinaryCrossentropy

# 编译模型,为每个输出指定损失和评估指标
model.compile(optimizer='adam',
              loss={'cancer_class': CategoricalCrossentropy(),
                    'skin_tone': BinaryCrossentropy()},
              metrics={'cancer_class': 'accuracy',
                       'skin_tone': 'accuracy'})

# 训练模型,假设训练数据的标签为元组形式:(癌症标签数组, 肤色标签数组)
# model.fit(train_images, (y_cancer_train, y_skin_tone_train),
#           validation_data=(val_images, (y_cancer_val, y_skin_tone_val)),
#           epochs=20, batch_size=32)

3. 生成按肤色拆分的分类报告

训练完成后,分别获取两个任务的预测结果,然后按肤色分组统计癌症分类的表现:

from sklearn.metrics import classification_report
import numpy as np

# 获取预测结果
y_cancer_pred, y_skin_tone_pred = model.predict(test_images)

# 转换预测结果为类别
y_cancer_pred_class = np.argmax(y_cancer_pred, axis=1)  # 7类多分类
y_skin_tone_pred_class = (y_skin_tone_pred > 0.5).astype(int).flatten()  # 肤色二分类

# 生成浅色肤色样本的癌症分类报告(假设0代表浅色)
light_mask = (y_skin_tone_test == 0)
print("=== 浅色肤色样本的癌症分类报告 ===")
print(classification_report(y_cancer_test[light_mask], y_cancer_pred_class[light_mask]))

# 生成深色肤色样本的癌症分类报告(假设1代表深色)
dark_mask = (y_skin_tone_test == 1)
print("\n=== 深色肤色样本的癌症分类报告 ===")
print(classification_report(y_cancer_test[dark_mask], y_cancer_pred_class[dark_mask]))

# 针对特定癌症(如黑色素瘤)分析肤色分布的预测表现
# 假设黑色素瘤对应癌症标签的索引为0
melanoma_mask = (y_cancer_test == 0)
print("\n=== 黑色素瘤样本的肤色分类报告 ===")
print(classification_report(y_skin_tone_test[melanoma_mask], y_skin_tone_pred_class[melanoma_mask]))

关键优势

  1. 两个任务独立学习特征,完全避免合并标签导致的歧义(如0+1与1+0混淆)
  2. 可分别监控两个任务的训练精度,方便调试优化
  3. 灵活生成各类拆分报告,直接满足“分析肤色偏差对癌症预测影响”的需求

内容的提问来源于stack exchange,提问作者Dhruv Marwha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 11:40:28