繁体   English   中英

如何在多个标签问题中为 tensorflow model 设置 class 权重?

[英]How to set class weights for tensorflow model in multiple labels question?

我尝试训练 model 通过图像预测多个标签。 output 是一个包含五个二进制值的列表,例如 [0,0,0,1,1]

我使用 sigmoid 密集层来获取 output,这是我的代码:

inp = tf.keras.layers.Input(shape = (*IMAGE_SIZE, 3), name = 'inp')
x = tfka.ResNet50(weights = 'imagenet', include_top = False)(inp)
x = tf.keras.layers.GlobalAveragePooling2D()(x)
output = tf.keras.layers.Dense(label_dim, activation='sigmoid')(x)
model = tf.keras.models.Model(inputs = [inp], outputs = [output])

现在,我的问题是我的数据集不平衡。 并且很难使其平衡,因为每一行都有五个标签。 所以,我尝试为每个 label 设置不同的 class 权重,但我不知道该怎么做。

我试试

class_weight = {'label-1': 1:2, 'label-2': 1:5, 'label-3': 1:1, 'label-4': 2:1, 'label-5': 1:10}

但它不起作用。

我的目标是为所有类和标签分配不同的权重。 像这样

第一个label中,class 0的权重为0.5,1的权重为1

第二个label中,class 0的权重为0.1,1的权重为1

...

更新:

我想我应该把我的 model 分成五个小模型,因为我想要的是最小化每个 label 而不是 label 列表的损失。 所以将其转换为几个单一的二元分类模型是一个更好的选择。

在安装 model 时,您传递每个 class 的权重。 Tensorflow 的 文档指定当调用.fit() 时,您可以传递包含 class 权重的字典。 确保检查该字典的外观,因为它只接受 integer(键)和浮点(重量)格式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM