Модель нейронной сети - PullRequest
0 голосов
/ 18 января 2019

У меня есть пример данных с 6 столбцами и 100 строками (все значения целые). Есть 20 классов, в которые входные данные классифицированы. Это модель, которую я пытался построить:

model = Sequential()
model.add(Dense(50,input_shape=X.shape[1:],activation='relu'))

model.add(Dense(20,activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='rmsprop', 
              metrics=['accuracy'])
model.summary()
model.fit(X, Y, epochs=1000, verbose=0)
predictions=model.predict(test_data)

Однако я получаю сообщение об ошибке:

Error when checking target: expected dense_2 to have shape (20,) but got array with shape (1,)

У меня два вопроса:

  1. Что я делаю не так?
  2. Можете ли вы дать мне правильную архитектуру для этого?

1 Ответ

0 голосов
/ 18 января 2019

Вам необходимо преобразовать Y в матрицу двоичного класса, используя to_categorical ( docs ).

import sklearn.datasets
X,Y = sklearn.datasets.make_classification(n_samples=100, n_features=6, n_redundant=0,n_informative=6, n_classes=20)

import numpy as np
from keras import Sequential
from keras.layers import Dense
from keras.utils import to_categorical
from keras import backend as K
K.clear_session()

model = Sequential()
model.add(Dense(50,input_dim=X.shape[1],activation='softmax'))
model.add(Dense(20,activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='rmsprop', 
              metrics=['accuracy'])
model.summary()
model.fit(X, to_categorical(Y), epochs=1000, verbose=1) # <---

Также вы можете использовать sklearn для этого тоже.

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