Проблема с входным слоем с Keras: ожидал, что dens_1_input будет иметь форму (11,), но получил массив с формой (15,) - PullRequest
0 голосов
/ 01 июля 2019

Кажется, есть ряд похожих вопросов , но я не смог решить свою проблему.

Существует набор данных с 15 объектами (столбцами) и одним зависимым двоичным объектом, который я хочу предсказать.

Я делаю всю подготовительную работу:

features = df.iloc[:,:-1]
result = df.iloc[:,-1]

# Splitting the dataset into the Training set and Test set
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(features, result, test_size = 0.2, random_state = 0)

# Feature Scaling
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)

Проверка размеров X_train и y_train:

X_train.shape

возврат (3392, 15) И

Y_train.shape

возвращает (3392)

Y_train - это массив: массив ([0, 1, 0, ..., 0, 0, 0])

Затем я строю сеть:

from keras.models import Sequential
from keras.layers import Dense

classifier = Sequential()

classifier.add(Dense(units = 8, kernel_initializer = 'uniform', activation = 'relu', input_dim= X_train[0].shape)) # 8 units because (15 features + 1 to forecast) / 2 
# Adding the second hidden layer
classifier.add(Dense(units = 8, kernel_initializer = 'uniform', activation = 'relu'))
# Adding the output layer
classifier.add(Dense(units = 1, kernel_initializer = 'uniform', activation = 'sigmoid'))
# Compiling the ANN
classifier.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy'])
# Fitting the ANN to the Training set
classifier.fit(X_train, y_train, batch_size = 10, epochs = 100)

И получил сообщение об ошибке: ValueError: Ошибка при проверке ввода: ожидалось, что dens_1_input имеет shape (11,), но получил массив с shape (15,)

Я не могу понять, почему он ожидает форму 11 (это число нигде не используется в моем коде). В похожих вопросах, размещенных здесь, проблемы обычно возникают из-за неправильного указания размера обучающего набора (например, ноль вместо любого количества функций). Но я ясно передаю правильное число первому слою, написав

input_dim= X_train[0].shape

который я тоже могу написать как

input_dim= 15

с тем же результатом.

Что я делаю не так?

P.S. Я также думал, что проблема была с y_train и сделал это:

y_train = y_train.reshape(3392,1)

но без эффекта.

1 Ответ

0 голосов
/ 01 июля 2019

Изменить это

X_train[0].shape

к этому

X_train.shape[1]

чтобы получить количество столбцов в вашей матрице.

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