有多个输出时,在R的Keras中设置班级权重

时间:2018-11-13 14:54:02

标签: r tensorflow keras deep-learning

我正在使用keras中的R软件包来拟合神经网络模型。我正在处理的模型有两个输出:output1是连续的(用于回归),output2是二进制的(用于分类)。

由于我们有一个非常不平衡的数据集来解决分类问题(output2),我想分配不同的类权重来处理不平衡问题,但是显然我们不需要为{{1} }(回归)。

这是我正在使用的NN模型的示例代码:

output1

如果只有一个二进制输出,我知道可以通过以下方式分配类权重:

input <- layer_input(shape = c(32,24))
output <- input %>%
  layer_lstm(units = 64, dropout = 0.2, recurrent_dropout = 0.2) 
pred1 <- output %>%
  layer_dense(units = 1, name = "output1")
pred2 <- output %>%
  layer_dense(units = 1, activation = "sigmoid", name = "output2")
model <- keras_model(
  input,
  list(pred1, pred2)
)  
summary(model)

model %>% compile(
  optimizer = "rmsprop",
  loss = list(
    output1 = "mse",
    output2 = "binary_crossentropy"
  ),
  loss_weights = list(
    output1 = 0.25,
    output2 = 10
  )
)

history <- model %>% fit(
  train_x, list(output1 = train_y1,output2 = train_y2),
  epochs = 10, 
  batch_size = 5000,
  class_weight = ???,
  validation_data = list(valid_x, list(output1 = valid_y1,output2 = valid_y2))
)

,但是当我们有两个输出并且只想将权重分配给其中之一时,它就不再起作用。我想我可能需要在“ class_weight”中指定二进制输出的名称,以便它知道权重仅适用于output2,但我不知道如何在R中执行。

只有当我们有两个输出(一个是回归,一个是分类)时,有人知道如何将类权重分配给二进制输出吗?非常感谢您的帮助!

0 个答案:

没有答案