ValueError: Ошибка при проверке входных данных: ожидалось, что dens_1_input имеет shape (13,), но получил массив с shape (3,)? - PullRequest
0 голосов
/ 21 мая 2019

Я просто создаю нейронную сеть для данных вина, просматривая видео с YouTube, и я получил ошибку в model.fit

Я новичок в машинном обучении, поэтому я не знаю никаких решений, поэтому я ничего не пробовал.

from sklearn.model_selection import train_test_split
import keras
from keras.models import Sequential
from keras.layers import Dense, Dropout
import pandas as pd
import numpy as np
from google.colab import files

np.random.seed(3)

# Number of Wine Classes
classifications = 3

#load dataset
uploaded = files.upload() 


for fn in uploaded.keys():
  print('User uploaded file "{name}" with length {length} bytes'.format(
      name=fn, length=len(uploaded[fn])))

import io

dataset = pd.read_csv(io.StringIO(uploaded['wine.csv'].decode('utf-8')))

X = dataset[['Wine','Alcohol','Malic.acid','Ash','Acl','Mg','Phenols','Flavanoids','Nonflavanoid.phenols','Proanth','Color.int','Hue','OD','Proline']]

y = dataset[['Wine']]

# convert output values to one-hot
x_train = keras.utils.to_categorical(y_train-1, classifications)
x_test = keras.utils.to_categorical(y_test-1, classifications)

# creating model
model = Sequential()
model.add(Dense(10, input_dim=13, activation='relu'))
model.add(Dense(8, activation='relu'))
model.add(Dense(6, activation='relu'))
model.add(Dense(6, activation='relu'))
model.add(Dense(4, activation='relu'))
model.add(Dense(2, activation='relu'))
model.add(Dense(classifications, activation='softmax'))

# compile 
model.compile(loss="categorical_crossentropy", optimizer="adam", metrics=['accuracy'])

# fit model
model.fit(x_train, y_train, batch_size=15, epochs=2500, validation_data=(x_test, y_test))

Ошибка

ValueError: Ошибка при проверке ввода: ожидалось, что dens_1_input будет иметь форму (13,), но получил массив с формой (3,)

1 Ответ

0 голосов
/ 21 мая 2019

Здесь вы one_hot кодируете входные значения, а не выходы

# convert output values to one-hot
x_train = keras.utils.to_categorical(y_train-1, classifications)
x_test = keras.utils.to_categorical(y_test-1, classifications)

Это должно быть:

# convert output values to one-hot
y_train = keras.utils.to_categorical(y_train-1, classifications)
y_test = keras.utils.to_categorical(y_test-1, classifications)

Тогда вам нужно сохранить в X только функции, а нецель, так что ваш новый X:

X = dataset[['Alcohol','Malic.acid','Ash','Acl','Mg','Phenols','Flavanoids','Nonflavanoid.phenols','Proanth','Color.int','Hue','OD','Proline']]

И последнее, не забудьте изменить переменную в вашем методе подгонки:

model.fit(X_train, y_train, batch_size=25, epochs=5000, validation_data=(X_test, y_test))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...