微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在多标签问题中为张量流模型设置类权重?

如何解决如何在多标签问题中为张量流模型设置类权重?

我尝试训练一个模型来通过图像预测多个标签输出一个包含五个二进制值的列表,像这样 [0,1,1]

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

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])

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

我试试

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

但它不起作用。

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

在第一个标签中,类0的权重为0.5,类1的权重为1

在第二个标签中,类0的权重为0.1,类1的权重为1

...

更新:

我认为我应该将我的模型分成五个小模型,因为我想要的是最小化每个标签而不是标签列表的损失。因此,将其转换为多个单一的二元分类模型是更好的选择。

解决方法

您在拟合模型时传递每个类的权重。 Tensorflow 中的 documentation 指定在调用 .fit() 时,您可以传递包含类权重的字典。请务必检查该字典的外观,因为它只接受整数(键)和浮点(权重)格式。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。