0

I'm trying to assign one of two classes (positive/nagative) to audio using CNN with Keras. My model should accept varied lengths of input (frames) in which each frame contains 41 features but I struggle with the input size. Bear in mind that I haven't acquired full dataset so I just mocked some meaningless data just to check if network works at all.

According to documentation https://keras.io/layers/convolutional/ and my best understanding Conv1D can tackle varied lengths if first element of input_shape tuple is None. Shape of variable containing input data X_train.shape is (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]))

This code produces error ValueError: Error when checking input: expected conv1d_input to have 3 dimensions, but got array with shape (497, 41). So it appears like the first dimension was cut out as it contains training samples (it seems correct to me) what bothered me is the required dimensionality, why is it 3?

After searching for the answer I stumbled onto Dimension of shape in conv1D and followed it by adding last dimension (using X_train = np.expand_dims(X_train, axis=3)) that contains only single digit but I ended up with another, similar error:

ValueError: Error when checking input: expected conv1d_input to have 3 dimensions, but got array with shape (4, 497, 41, 1) now it seems that first dimension that previously was treated as sample "list" is now part of actual data.

I also tried fiddling with input_shape parameter but to no avail and using Reshape layer but ended up fighting with size the

What should I do to satisfy required shape? How to prepare data for processing?

Herioz
  • 81
  • 7

0 Answers0