Обучение нейронной сети для локализации звука

Вопрос или проблема

Я пытаюсь обучить нейронную сеть, чтобы оценить местоположение (в градусах от 0 до 180), откуда исходит звук.

Я использую TensorFlow Keras в Python для обучения модели.

Входные данные представляют собой два бинауральных признака, а именно ILD (Интерауральная разница уровней) и ITD (Интерауральная временная разница), каждый вектор, состоящий из двух вышеописанных признаков, имеет размеры [1,71276]. У меня есть в общей сложности 2639 измерений, 10% из которых используются в качестве данных для валидации и еще 10% в качестве тестовых данных.

Выходное значение должно быть углом в диапазоне [0,180].

Я нормализовал данные в диапазоне [-1, 1], и лучшее значение потерь, которого я смог достичь, составляет MSE = 16.

Модель, достигшая наивысшего MSE, следующая:

model = tf.keras.Sequential(([
    tf.keras.layers.Input(shape=(71276,), name="input"),

    tf.keras.layers.Dense(units=900,activation='relu', name="dense_1"),
    tf.keras.layers.Dense(units=360,activation='relu', name="dense_2"),
    tf.keras.layers.Dense(units=180,activation='relu', name="dense_3"),

    tf.keras.layers.Dense(units=1,activation='linear', name="output")
]))

model.compile(loss="mse",
              optimizer=tf.keras.optimizers.Adam(lr=0.001),
              metrics=['mae'])

EPOCHS = 500
BATCH_SIZE = 32

callbacks = [
    tf.keras.callbacks.EarlyStopping(monitor="val_loss", mode="min", min_delta=0.5, patience=100, verbose=1),
    tf.keras.callbacks.ModelCheckpoint('best_model.h5', monitor="val_loss", mode="min", save_best_only=True),
    tf.keras.callbacks.ReduceLROnPlateau(monitor="val_loss", factor=0.1, patience=50, verbose=1, mode="min", min_delta=2, cooldown=0, min_lr=0.000001)
]

history = model.fit(X_train, y_train, validation_data=(X_val,y_val), shuffle=True,
                    batch_size=BATCH_SIZE, 
                    epochs=EPOCHS, verbose=1,
                    callbacks=callbacks)

Поскольку это первая нейронная сеть, которую я обучал, используя собственные данные, я задаюсь вопросом, есть ли что-то очевидное, что я упустил и что могло бы уменьшить функцию потерь. Если нет, любые предложения приветствуются!

Следует отметить, что я использую Google Collaboratory, и я уже пробовал добавить еще один скрытый слой, но получил ошибку нехватки памяти. Я также пробовал увеличивать/уменьшать количество нейронов в каждом слое, но не получил лучших результатов, также пробовал использовать архитектуру CNN, но без особого успеха, так как она даже не сошлась после 300 эпох.

Заранее спасибо!

Измените ваши активационные слои, используйте сигмоиду или Tanh для вашего последнего слоя.

Я бы попробовал CNN снова, но с другими шагами, размерами фильтров и количеством фильтров. Дело в том, что в CNN, поскольку у вас меньше признаков на слой, вы сможете иметь больше слоев.

Вот пример сверточного слоя для аудио:

import keras
from keras.models import Sequential
from keras.layers import Dense, Dropout, Flatten, Conv2D, MaxPooling2D
from keras.optimizers import SGD
from keras.layers.advanced_activations import LeakyReLU
model = Sequential()
model.add(Conv2D(16, (3,3), padding='same', input_shape=(513, 25, 1)))
model.add(LeakyReLU())
model.add(Conv2D(16, (3,3), padding='same'))
model.add(LeakyReLU())
model.add(MaxPooling2D(pool_size=(3,3)))
model.add(Dropout(0.25))
model.add(Conv2D(16, (3,3), padding='same'))
model.add(LeakyReLU())
model.add(Conv2D(16, (3,3), padding='same'))
model.add(LeakyReLU())
model.add(MaxPooling2D(pool_size=(3,3)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(64))
model.add(LeakyReLU())
model.add(Dropout(0.5))
model.add(Dense(1, activation='sigmoid'))

Если у вас есть время, попробуйте обучить слой LSTM.

Ответ или решение

Обучение нейронной сети для локализации звука – это сложная задача, требующая внимательного выбора архитектуры модели, гиперпараметров и методов предобработки данных. В вашей текущей модели вы используете входные данные в виде векторов, содержащих ILD (межушаминое различие уровня) и ITD (межушиное временное различие), каждый из которых имеет размерность [1, 71276]. Это достаточно большие векторы, и работа с такими данными может быть сложной задачей из-за высокого риска переобучения и значительной вычислительной нагрузки.

Рекомендации по улучшению модели:

  1. Изменение активаций и функции активации на выходе:

    • Вы рассматриваете диапазон прогнозов от 0 до 180 градусов. Работа с linear активацией на выходе может быть не самой оптимальной, учитывая характер данных. Попробуйте использовать sigmoid для нормализации в диапазоне [0, 1], а затем масштабировать результаты на [0, 180].
  2. Архитектура модели:

    • Ваш текущий подход основан на полносвязных слоях. Попробуйте переосмыслить структуру в пользу свёрточной нейронной сети (CNN). Изменение углов восприятия, фильтров и размерности ядер может повысить эффективность такой архитектуры для вашей задачи.
  3. Использование LSTM слоев:

    • Звуковые данные часто имеют временную компоненту. LSTM слои могут быть полезны для захвата временных закономерностей в данных, особенно если ILD и ITD меняются с течением времени.
  4. Переобучение и регуляризация:

    • Для уменьшения риска переобучения попробуйте применять методы регуляризации, такие как Dropout, и L2 регуляризацию.
  5. Оптимизация и гиперпараметры:

    • Попробуйте другие оптимизаторы, например RMSprop или Adam с разными коэффициентами обучения. Также рассмотрите варьирование размеров партий (batch size).
  6. Предобработка и нормализация данных:

    • Проверьте качество нормализации входных данных. Возможно, будет полезно дополнительно изучить структуру данных или попробовать другой способ их предобработки.

Заключение:

Обучение модели звуковой локализации на ваших данных – захватывающая задача, требующая индивидуального подхода и экспериментов. Важно учитывать, что обучение может занимать значительное время и ресурсы, особенно с большими данными. Разделение данных на дополнительные части для кросс-валидации может также оказаться полезным. Применение современных архитектур и эксперименты с различными параметрами помогут вам достичь более точного результата.

Оцените материал
Добавить комментарий

Капча загружается...