Почему последний полностью связанный / плотный слой в нейронной сети keras должен иметь 2 тусклых изображения, даже если его входные данные имеют больше измерений?

Я впервые пробую нейронные сети с keras, и меня немного смущают ожидаемые размеры. Я уверен, что мои данные X_train и y_train имеют одинаковое измерение, и что данные X_test и y_test также имеют одинаковое измерение, но я получаю эту ошибку от keras:

Ошибка при проверке ввода: ожидалось, что плотный_38_input будет иметь 2 измерения, но получил массив с формой (1, 512, 512, 186, 1)

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

Вот модель обучения, которую я пробую

num_classes = 2

input_shape = (512, 512, 186, 1)

model = Sequential()
model.add(Conv3D(32, kernel_size=(5, 5, 5), strides=(1, 1, 1),
                 activation='relu',
                 input_shape=input_shape))
model.add(MaxPooling3D(pool_size=(2, 2, 2), strides=(2, 2, 2)))
model.add(Conv3D(64, (5, 5, 5), 
                 activation='relu'))
model.add(MaxPooling3D(pool_size=(2, 2, 2)))
model.add(Flatten())
model.add(Dense(1000, activation='relu'))
model.add(Dense(num_classes, activation='softmax'))

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


person r c    schedule 17.05.2019    source источник


Ответы (2)


Я уверен, что мои данные X_train и y_train имеют одинаковое измерение

Если ваш y размерно изометричен вашим X данным, тогда ваша выходная форма должна быть такой же, как и ваша входная форма. Я предполагаю, что вам нужна форма вывода, которую вы указали в своем (последнем) слое прогнозирования: прогнозирование вывода между двумя классами. В этом случае ваша y форма должна иметь размеры (num_samples, 2).

Для ясности:

+---+------------------+------------------+-------------------------+
|   |  Dataframe shape | Data-point shape | Shape to assign network |
+---+------------------+------------------+-------------------------+
| X | (1000,244,244,3) |   (1,244,244,3)  |    input: (244,244,3)   |
+---+------------------+------------------+-------------------------+
| y |     (1000,2)     |       (1,2)      |       output: (2)       |
+---+------------------+------------------+-------------------------+
person TheLoneDeranger    schedule 17.05.2019

Вместо того:

model.add(Flatten())

использовать этот:

model.add(GlobalAveragePooling3D())

В основном model.add(Desnse()), ожидалось бы 2 затемнения, то есть (размер_пакета, каналы), что совпадает с выводом GlobalAveragePooling3D().

person Ashwin Geet D'Sa    schedule 17.05.2019