Классификация с использованием нейронных сетей - PullRequest
2 голосов
/ 30 января 2020

Я создал NN для классификации, но при попытке компилирования у меня возникают проблемы с размерами ввода и вывода:

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

# data splited into input (X) and output (y) variables
model = Sequential()
model.add(Dense(12, input_dim=456, activation='relu'))
model.add(Dense(8, activation='relu'))
model.add(Dense(8, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

Вот размеры моих y и X

print(y.shape, X.shape)
(8000, 1) (8000, 456, 3)

У меня есть 8000 подмножеств, которые содержат 456 частиц (x, y, z); и у меня есть метки в диапазоне от 0 до 7; это также, почему мой выходной слой имеет 8 узлов.

Но когда я подхожу с

model.fit(X, y, epochs=15, batch_size=10)

Я не понимаю, почему возникает эта ошибка:

ValueError : Ошибка при проверке входных данных: ожидается, что dens_26_input имеет 2 измерения, но получил массив с формой (8000, 456, 3)

Есть предложения?

1 Ответ

1 голос
/ 30 января 2020

Чтобы ответить на ваш вопрос, вы можете достичь того, что вы хотите, выполнив:

from tensorflow.keras import Sequential
from tensorflow.keras.layers import Dense

model = Sequential()
model.add(Dense(12, input_shape=(456,3), activation='relu'))

model.add(Dense(8, activation='relu'))
model.add(Dense(8, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

model.summary()

Редактировать:

Я думаю, что вы ищете, это тип архитектуры:

from tensorflow.keras import Sequential
from tensorflow.keras.layers import Dense, Flatten

model = Sequential()
model.add(Dense(12, input_shape=(456,3), activation='relu'))
model.add(Flatten())
model.add(Dense(8, activation='relu'))
model.add(Dense(8, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

model.summary()

чтобы выводить только 8 меток

...