Параметр class_weight в keras :: fit () ошибка.Классы существуют в данных, но не в class_weight - PullRequest
2 голосов
/ 08 апреля 2019

У меня есть слегка несбалансированный набор данных, которому я пытаюсь присвоить веса.

Пример, приведенный в Как установить class_weight в пакете keras из R? не работаетдля меня.Когда я пытаюсь сделать то же самое, с моим кодом:

system.time ( 
  baseline_history <- fit (
    object           = model_baseline,            
    x                = as.matrix(x_train_tbl), 
    y                = y_train_vec,             
    batch_size       = 1024,    
    epochs           = 30,    
    class_weight = list("0" = 1, "1" = 1.67),
    validation_split = 0.2) )

я получаю следующую ошибку:

Error in py_call_impl(callable, dots$args, dots$keywords) : 
  ValueError: `class_weight` must contain all classes in the data. The classes {'0', '1'} exist in the data but not in `class_weight`.

Я немного растерялся, поскольку я явно заявляю в class_weightsчто это список.Я даже пытался

weights <- list("0" = 1, "1" = 1.67)
> weights
$`0`
[1] 1

$`1`
[1] 1.67

is.list(weights)
[1] TRUE

, чтобы убедиться, что это работает, но я все еще получаю ту же ошибку.Есть идеи?

1 Ответ

0 голосов
/ 20 мая 2019

Я предполагаю, что у вас есть y_train_vec как фактор, вот в чем проблема.

По какой-то причине class_weight, похоже, не работает с факторами, поэтому вы можете просто изменить его начисловой

y_train_vec = as.numeric(y_train_vec)

Это должно дать вам внутреннее представление ваших факторов (это даст вам список 1 и 2), а затем вы можете указать class_weight соответственно

system.time(
    baseline_history <- fit (
        object           = model_baseline,            
        x                = as.matrix(x_train_tbl), 
        y                = as.matrix(y_train_vec),             
        batch_size       = 1024,    
        epochs           = 30,    
        class_weight = list("1" = 1, "2" = 1.67),
        validation_split = 0.2)
    )
)

Обратите внимание, что классы в class_weight равны "1" и "2"

Надеюсь, это помогло.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...