Numpy / Keras: ValueError: не удалось передать входной массив из shape (7,5) в shape (7) - PullRequest
0 голосов
/ 06 сентября 2018

Я пытаюсь преобразовать некоторые категориальные функции в одну горячую кодировку для использования в Керасе. Однако, когда я пытаюсь отобразить эти объекты, я получаю сообщение об ошибке, указывающее, что фигуры несовместимы. Вот мой код:

import numpy
import pandas
from keras.models import Sequential
from keras.layers import Dense
from sklearn.preprocessing import LabelEncoder
from keras.utils import np_utils

# load dataset
dataframe = pandas.read_csv("data/development.csv")
dataset = dataframe.values

X = dataset[:,0:7].astype(int)

encoder = LabelEncoder()

for i in [3,4,5,6]:
    col = X[i]
    encoder.fit(col)
    encoded_col = encoder.transform(col)
    X[i] = np_utils.to_categorical(encoded_col) # Error is here

Y = dataset[:,7].astype(int)

И вот ошибка, которую я получаю:

ValueError: could not broadcast input array from shape (7,5) into shape (7)

Есть ли что-нибудь, что я должен делать здесь по-другому? Я использую Python 3.6, с Keras 2.2.2.

1 Ответ

0 голосов
/ 07 сентября 2018

В соответствии с вашим вопросом в комментарии выше, я нашел рабочее решение. Тем не менее, я все еще не уверен, чего вы пытаетесь достичь, потому что мне не хватает контекста, в котором вы используете эту операцию. Но позвольте мне в любом случае сделать удар.

Таким образом, каждая итерация строки X имеет собственную матрицу меток, заданную операцией to_categorical. Поэтому я разработал Y (что, я думаю, то, что вы хотите) в виде списка. Затем во время итерации я назначаю вновь созданную матрицу соответствующему элементу списка Y.

# load dataset
dataframe = pandas.read_csv("data/development.csv")
dataset = dataframe.values

X = dataset[:,0:7].astype(int)
num_classes = np.max(X)

# Y is a list of matrices, one matrix for each row of X iterated below
Y = [None for _ in range(X.shape[0])]
encoder = LabelEncoder()

for i in [3,4,5,6]:
    col = X[i]
    # Get the number of classes present in that vector
    num_classes = np.max(X[i])

    encoder.fit(col)
    encoded_col = encoder.transform(col)
    # Set Y[i] to the new one-hot-encoded matrix
    Y[i] = np_utils.to_categorical(encoded_col) # Error is here

print([y.shape for y in Y if y is not None])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...