ValueError: Ошибка при проверке ввода: ожидалось, что dens_26_input имеет форму (45781,), но получил массив с формой (2,) - PullRequest
0 голосов
/ 30 марта 2019

Мой ввод - это просто CSV-файл с 45781 строками и двумя столбцами. Я пытаюсь обучить свои данные в нейронной сети, но когда я пытаюсь соответствовать модели, это выдает мне ошибку.

ValueError: Error when checking input: expected dense_26_input to have shape (45781,) but got array with shape (2,)

Я пытался реализовать решение, как показано по этой ссылке:

Ошибка при проверке ввода модели: ожидалось, что lstm_1_input будет иметь 3 измерения, но получит массив с формой (339732, 29)

но я все еще не могу запустить код. Вот мой код:

X = df.iloc[:, 0:2].values
y = df.iloc[:, 2].values

df_sklearn = df.copy()

lb_make = LabelEncoder()
df_sklearn['Type'] = lb_make.fit_transform(df['Type'])
df_sklearn.head() #Results in appending a new column to df

df_onehot = df.copy()
df_onehot = pd.get_dummies(df_onehot, columns=['Type'], prefix = ['Type'])

df_onehot_sklearn = df.copy()

lb = LabelBinarizer()
lb_results = lb.fit_transform(df_onehot_sklearn['Type'])
lb_results_df = pd.DataFrame(lb_results, columns=lb.classes_)

result_df = pd.concat([df_onehot_sklearn, lb_results_df], axis=1)


X_train, X_test, y_train, y_test = train_test_split(X, lb_results_df, test_size = 0.4)

classifier = Sequential()
classifier.add(Dense(output_dim = 6, init = 'uniform', activation = 'relu', input_dim = 45781))
classifier.add(Dense(output_dim = 6, init = 'uniform', activation = 'relu'))
classifier.add(Dense(output_dim = 1, init = 'uniform', activation = 'sigmoid'))
classifier.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy'])

classifier.fit(X_train, y_train, batch_size = 10, nb_epoch = 100)

1 Ответ

1 голос
/ 30 марта 2019

Строки обычно являются вашими примерами обучения, и модель ожидает, что вы пропустите это измерение.Поэтому, если имеется 45781 пример, каждый с 2 ​​столбцами, input_dim должен быть равен 2. Кроме того, вы можете опустить аргумент output_dim, если вы укладываете слои, но вам нужно указать единицы измерения (количество нейронов).

последний плотный слой должен иметь то же число нейронов, что и размерность y (20 в вашем случае).

Ниже приведен пример с фиктивными данными:

X_train = np.random.random((300,2))
y_train = np.random.random((300,20))

classifier = Sequential()
classifier.add(Dense(units = 6, init = 'uniform', activation = 'relu', input_dim = 2))
classifier.add(Dense(units = 6, init = 'uniform', activation = 'relu'))
classifier.add(Dense(units = 20, init = 'uniform', activation = 'sigmoid'))
classifier.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy'])
classifier.summary()

classifier.fit(X_train, y_train, batch_size=10, nb_epoch=100)

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