Проблема с входными размерами сети Conv1D - PullRequest
0 голосов
/ 11 июля 2020

Поскольку я новичок в области глубокого обучения, я столкнулся со странной проблемой, касающейся формы ввода моей сверточной сети (1D). Входные данные - это нормализованные значения 13 функций, всего доступно 7866 образцов.

x_train_shape (7866, 13)

Целевое значение 0 или 1 для каждой функции.

y_train.shape (7866, 13)

Я использую следующую простую сеть 1D conv, чтобы посмотреть, как она работает.

from keras.models import Sequential
model = Sequential()
model.add(Conv1D(filters=64, kernel_size=1,
                 activation='relu', input_shape=(13,1)))

model.add(Conv1D(filters=64, kernel_size=1, activation='relu'))
model.add(Dropout(0.5))
model.add(MaxPooling1D(pool_size=2))
model.add(Flatten())
model.add(Dense(100, activation='relu'))
model.add(Dense(13, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
model.summary()
history = model.fit(x_train, y_train, epochs=20, verbose=0)

Это показывает сводка сети, но также вызывает эту ошибку:

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

Пытался реализовать разные решения из здесь и здесь . Поэтому, когда используется

input_shape = (13,)

, возникает другая ошибка, например:

Вход 0 несовместим со слоем conv1d_1: ожидалось ndim = 3, найдено ndim = 2

Кто-нибудь, пожалуйста, просветите меня, какова правильная input_shape для этой сети и почему? NB x_train и y_train находятся в формате кадра данных pandas. Это вызывает какие-то проблемы, нужно ли мне конвертировать его в другой формат?

Ответы [ 2 ]

0 голосов
/ 24 июля 2020

Измените форму тренировочных данных следующим образом: Затем запустите свою модель

x_train.reshape(7866, 13,1)
0 голосов
/ 11 июля 2020

Сохраняя тот же аргумент input_shape, вы должны добавить размер к вашему вводу или « разжать ».

x_train = np.expand_dims(x_train, 0)

Теперь его форма будет:

(7866, 13, 1)
...