我用R在Keras中使用class_weights。代码运行良好,但我发现了一件奇怪的事情。我可以给出任意数量的class_weights而不会出错。
我的模型对 9 个类进行了分类,所以最初我以这种方式拟合模型
model$fit( x= input_im, y= input_lab, batch_size = batch_size, epochs = 1L , class_weight = c('0' = 1,'1' = 1,'2' = 1,'3' = 1,'4' = 1,'5' = 1,'6' = 1,'7' = 1, '8' = 1))
但我发现,如果我删除或添加类权重,我的代码也可以运行。
model$fit( x= input_im, y= input_lab, batch_size = batch_size, epochs = 1L , class_weight = c('0' = 1,'1' = 1,'2' = 1,'3' = 1,'4' = 1,'5' = 1,'6' = 1,'7' = 1)
model$fit( x= input_im, y= input_lab, batch_size = batch_size, epochs = 1L , class_weight = c('0' = 1,'1' = 1,'2' = 1,'3' = 1,'4' = 1,'5' = 1,'6' = 1,'7' = 1, '8' = 1, '9' = 1))
两者都工作正常。
> class_weights只是为了告诉模型哪个类是"最重要的" 如果排除其中之一,则它仅具有默认权重。
看到所有权重都是 1,您可以删除 class_weight 参数,因为它不执行任何操作。
从文档中:
可选的命名列表将索引(整数(映射到权重(浮点(值,用于对损失函数进行加权(仅在训练期间(。这对于告诉模型"更加关注"来自代表性不足的类的样本非常有用。