Есть ли способ установить общее количество файлов в функции Keras Conv2D () для матриц ввода аудиоданных? - PullRequest
1 голос
/ 14 июня 2019

Как мне установить общее количество аудиофайлов, у меня следующие размеры -

1440 Набор данных аудиофайлов, каждый из которых имеет 2D-матрицу с размерами (16 * 12), пожалуйста, объясните в этом случае, как я могу объявить слой Conv2D?

Я ищу альтернативные методы, аналогичные .flow_from_directory () из ImageDataGenerator в Керасе, но для аудиоданных (2D Matrix) для отправки batch_size в CNN.

Мой текущий подход заключается в следующем -

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.33, random_state = 50)

classifier = Sequential()

classifier.add(Convolution2D(32, (3, 3), input_shape = (16, 12, 1), activation = 'relu'))
classifier.add(MaxPooling2D(pool_size = (5, 5))) 
classifier.add(Flatten())

classifier.summary()

Но выдает следующий вывод -

Layer (type)                 Output Shape              Param #   
=================================================================
conv2d_33 (Conv2D)           (None, 16, 12, 32)        320       
_________________________________________________________________
max_pooling2d_23 (MaxPooling (None, 3, 2, 32)          0         
_________________________________________________________________
flatten_16 (Flatten)         (None, 192)               0         
=================================================================
Total params: 320
Trainable params: 320
Non-trainable params: 0

Error when checking input: expected conv2d_33_input to have 4 dimensions, but got an array with shape (1368, 16, 12)

Ответы [ 2 ]

0 голосов
/ 17 июня 2019

удалось решить эту проблему, используя

X_train= X_train.reshape(X_train.shape[0], 1, 1, 193)

, создав, таким образом, двумерный массив измерений 1 * 193, и этот двумерный массив был создан для всех 1440 файлов, таким образом, эффективные измерения1440 * 1 * 193.

(1, 1, 193) в приведенной выше команде изменения формы фактически означает 2D-массив, поскольку 3D-массив шириной 1 является просто 2D-массивом.

То же самое было сделано для X_test, и матрица y была оставлена ​​без изменений, как было предложено.

Прочтите эту статью для получения дополнительной информации

0 голосов
/ 15 июня 2019

Conv2D ожидает 4 измерения. В случае изображения это будет (batch_size, ширина, высота, каналы). Для RGB-изображения каналов будет 3. В вашем случае у вас есть только 1 «канал», но вам все равно нужен размер для него. Так что это должно работать, если вы добавите это в начало вашего кода

print(x.shape) #(1368, 16, 12)
x = np.expand_dims(x, axis=3)
print(x.shape) #(1368, 16, 12, 1)
...