如何在R的keras包中设置class_weight?

sko*_*maz 4 r deep-learning keras tensorflow

keras在R中使用包来训练深度学习模型.我的数据集非常不平衡.因此,我想class_weightfit函数中设置参数.这是我用于模型的fit函数及其参数

history <- model %>% fit(
  trainData, trainClass, 
  epochs = 5, batch_size = 1000, 
  class_weight = ????,
  validation_split = 0.2
)
Run Code Online (Sandbox Code Playgroud)

在python我可以设置class_weight如下:

class_weight={0:1, 1:30}
Run Code Online (Sandbox Code Playgroud)

但我不知道如何在R中执行此操作.在R的帮助菜单中,它描述class_weight如下:

可选的命名列表映射索引(整数)到权重(浮点数),以在训练期间应用于此类的样本的模型损失.这可以用来告诉模型"更多地关注"来自代表性不足的类的样本.

有什么想法或建议吗?

Bri*_*tte 9

Class_weight需要是一个列表,所以

    history <- model %>% fit(
        trainData, trainClass, 
        epochs = 5, batch_size = 1000, 
        class_weight = list("0"=1,"1"=30),
        validation_split = 0.2
    )
Run Code Online (Sandbox Code Playgroud)

似乎工作.Keras在内部使用一个名为as_class_weights的函数将列表更改为python-dictionary(请参阅https://rdrr.io/cran/keras/src/R/model.R).

     class_weight <- dict(list('0'=1,'1'=10))
     class_weight
     >>> {0: 1.0, 1: 10.0}
Run Code Online (Sandbox Code Playgroud)

看起来就像你上面提到的python字典.