Ошибка при проверке ввода в первый слой Keras Conv1D - PullRequest
0 голосов
/ 04 июня 2019

Я пытаюсь присвоить аудио одному из двух классов (положительный / отрицательный), используя CNN с Keras. Моя модель должна принимать различные длины ввода (кадры), в которых каждый кадр содержит 41 объект, но я борюсь с размером ввода. Имейте в виду, что я не получил полный набор данных, поэтому я просто высмеял некоторые бессмысленные данные, просто чтобы проверить, работает ли сеть вообще.

Согласно документации https://keras.io/layers/convolutional/ и, насколько я понимаю, Conv1D может работать с различными длинами, если первый элемент кортежа input_shape равен None. Форма переменной, содержащей входные данные X_train.shape, равна (4, 497, 41).

 data = pd.read_csv('output_file.csv', sep=';')
    featureCount = data.values.shape[1]


    #mocks because full data is not available yet
    Y_train = np.asarray([1, 0, 1, 0])

    X_train = np.asarray(
        [np.array(data.values, copy=True), np.array(data.values, copy=True), np.array(data.values, copy=True),
         np.array(data.values, copy=True)])

    # variable length with 41 features
    model = keras.models.Sequential()
    model.add(keras.layers.Conv1D(100, 5, activation='relu', input_shape=(None, featureCount)))

    model.add(keras.layers.GlobalMaxPooling1D())
    model.add(keras.layers.Dense(10, activation='relu'))
    model.add(keras.layers.Dense(1, activation='sigmoid'))
    model.compile(optimizer='adam',
                  loss='binary_crossentropy',
                  metrics=['accuracy'])
    model.summary()

    model.fit(X_train, Y_train, epochs=10, verbose=False, validation_data=(np.array(data.values, copy=True), [1]))

Этот код выдает ошибку ValueError: Error when checking input: expected conv1d_input to have 3 dimensions, but got array with shape (497, 41). Таким образом, кажется, что первое измерение было вырезано, так как оно содержит обучающие образцы (мне кажется, это правильно), что беспокоило меня - требуемая размерность, почему это 3?

После поиска ответа я наткнулся на Измерение формы в conv1D и последовал за ним, добавив последнее измерение (используя X_train = np.expand_dims(X_train, axis=3)), которое содержит только одну цифру, но я закончил с другой, похожей ошибкой:

ValueError: Error when checking input: expected conv1d_input to have 3 dimensions, but got array with shape (4, 497, 41, 1) теперь кажется, что первое измерение, которое ранее рассматривалось как примерный «список», теперь является частью фактических данных.

Я также пытался поиграться с параметром input_shape, но безрезультатно и использовал слой Reshape, но в итоге боролся с размером

Что я должен сделать, чтобы удовлетворить требуемую форму? Как подготовить данные для обработки?

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