我正在使用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中执行。
只有当我们有两个输出(一个是回归,一个是分类)时,有人知道如何将类权重分配给二进制输出吗?非常感谢您的帮助!