список пустых массивов вместо одного горячего вектора - PullRequest
0 голосов
/ 13 января 2019

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

labels = ["Synonym", "Antonym", "Not relevant", "Synonym", "Antonym"]

Есть 3 разных метки, и я хочу сначала отнести их к номерам 1,2 и 3, а затем построить из них один горячий вектор, как, например, для метки 3 -> 0 0 1 Функция, которую я имею, составляет список массивов, и это не работает, чем для обучения.

def label_to_onehot(labels):
    mapping = {label: i for i, label in enumerate(set(labels))}

one_hot = []
for label in labels:
    entry = [0] * len(mapping)
    entry[mapping[label]] = 1
    one_hot.append(entry)
return one_hot

Вот что я получаю:

ValueError: Ошибка при проверке целевого объекта модели: список массивов Numpy, передаваемых вашей модели, не соответствует размеру модели ожидается. Ожидается увидеть 1 массив (ов), но вместо этого получил следующее список из 165757 массивов: [массив ([[0], [0], [1]]), массив ([[1], [0], [0]]), массив ([[0], [1],

1 Ответ

0 голосов
/ 14 января 2019

Керас ожидал массивный массив формы (batch_size, classes). Но вы дали входные данные в виде списка Python, который не имеет атрибута shape для получения размера пакета и классов. Следовательно, даже если размер правильный, а тип неправильный.

Одним из возможных решений является: Где a - ваши сопоставленные индексы, а c - общее количество классов.

def one(a, c):
     out = []
     for i in a:
             entry = [0 for i in range(c)]
             entry[i] = 1
             out.append(entry)
     return np.array(out)

В качестве альтернативы вы также можете использовать to_categorical в keras.utils

from keras.utils import to_categorical
a = to_categorical(a, c)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...