Как указать input_shape для последовательной модели Keras - PullRequest
0 голосов
/ 26 декабря 2018

Как вы справляетесь с этой ошибкой?

Ошибка при проверке цели: ожидается, что плотность_3 будет иметь форму (1,), но получен массив с формой (398,)

I Попытка измененияinput_shape = (14,) это количество столбцов в train_samples, но я все еще получаю ошибку.

set = pd.read_csv('NHL_DATA.csv')
set.head()

train_labels = [set['Won/Lost']] 
train_samples = [set['team'], set['blocked'],set['faceOffWinPercentage'],set['giveaways'],set['goals'],set['hits'],
            set['pim'], set['powerPlayGoals'], set['powerPlayOpportunities'], set['powerPlayPercentage'],
           set['shots'], set['takeaways'], set['homeaway_away'],set['homeaway_home']]

train_labels = np.array(train_labels)
train_samples = np.array(train_samples)

scaler = MinMaxScaler(feature_range=(0,1))
scaled_train_samples = scaler.fit_transform(train_samples).reshape(-1,1)

model = Sequential()

model.add(Dense(16, input_shape=(14,), activation='relu'))
model.add(Dense(32, activation='relu'))
model.add(Dense(2, activation='softmax'))

model.compile(Adam(lr=.0001), loss='sparse_categorical_crossentropy', metrics=['accuracy'])
model.fit(scaled_train_samples, train_labels, batch_size=1, epochs=20, shuffle=True, verbose=2)

1 Ответ

0 голосов
/ 26 декабря 2018

1) Вы изменили свой пример обучения с помощью .reshape(-1,1), что означает, что все образцы обучения имеют 1 измерение.Тем не менее, вы определяете входную форму сети как input_shape=(14,), что говорит о том, что входное измерение равно 14. Я думаю, это одна проблема с вашей моделью.

2) Вы использовали sparse_categorical_crossentropy это означает, что основные метки истинности редки (train_labels должно быть разреженным), но я предполагаю, что это не так.

Вот пример того, каким должен быть ваш ввод:

import numpy as np
from tensorflow.python.keras.engine.sequential import Sequential
from tensorflow.python.keras.layers import Dense

x = np.zeros([1000, 14])
y = np.zeros([1000, 2])

model = Sequential()

model.add(Dense(16, input_shape=(14,), activation='relu'))
model.add(Dense(32, activation='relu'))
model.add(Dense(2, activation='softmax'))

model.compile('adam', 'categorical_crossentropy')
model.fit(x, y, batch_size=1, epochs=1)
...