Как передать один горячий кодированный векторный фрейм данных в поток керат из фрейма данных - PullRequest
1 голос
/ 13 марта 2020

У меня проблема multi_class вместо задачи multi_label, и у меня есть следующий фрейм данных.
Datafrmae

, и я хочу использовать его в flow_from_dataframe

train_generator=train_data_gen.flow_from_dataframe(train_df,directory='directory',
                                                      target_size=(img_shape,img_shape),
                                                      x_col="image_id",
                                                      y_col=['healthy','multiple_diseases','rust','scab'],
                                                      class_mode='categorical',
                                                      shuffle=False,
                                                       subset='training',
                                                      batch_size=batch_size)

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

TypeError: If class_mode="categorical", y_col="['healthy', 'multiple_diseases', 'rust', 'scab']" column values must be type string, list or tuple.

Ответы [ 2 ]

2 голосов
/ 13 марта 2020

Используйте class_mode = "raw", чтобы все 4 класса были загружены двоичными метками.

Для получения информации о том, как изменить метки и различные способы использования class_mode для классификации нескольких классов, я рекомендую эту статью.

0 голосов
/ 13 марта 2020

Используя class_mode = 'категорический', насколько я знаю, вы можете иметь только один столбец с заданным набором классов (скажем, 0,1,2, ... N)

Теперь, если я правильно понял вопрос, вы хотели бы иметь возможность предсказать комбинацию меток y, скажем, y_col = "['healthy', 'multiple_diseases', 'rust', 'scab']".

Существует два подхода к решению вашей проблемы:

  1. Построение прогнозной модели для каждого столбца y. Это означает, что вы сначала обучите модель, которая может предсказать «здоровый». Затем вторая модель, которая может предсказать «множественные заболевания» ... И т. Д.
  2. Вы строите прогностическую модель, которая может классифицировать все из них одновременно. Для этого вам нужно создать новый столбец метки (глобальная метка). Вы можете использовать условие if / elif l oop или лямбда-функцию. Новый столбец будет соответствовать y_col = ['Global_Label']. Для этого я бы рекомендовал заглянуть в эту статью: https://machinelearningmastery.com/how-to-prepare-categorical-data-for-deep-learning-in-python/

В частности это

def prepare_targets(y_train, y_test):
le = LabelEncoder()
le.fit(y_train)
y_train_enc = le.transform(y_train)
y_test_enc = le.transform(y_test)
return y_train_enc, y_test_enc
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...