Расчет градиентов определенного слоя в YAMNET - PullRequest
0 голосов
/ 15 января 2020

Я пытаюсь получить значение градиента из слоя 'layer14 / pointwise_conv' YA MNET.

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

YA MNET содержит mel_spe c извлечение и кадрирование функции в структуре tf_model.
(например, аудиофайл, включенный в проект, имеет длину 10 секунд и преобразуется в данные 19-framed-mel_spe c во время обработки)
Поэтому я собирался получить grads_val для каждого кадра, например,

y_c = yamnet.output[0][0, prediction.argmax()]
conv_output = yamnet.get_layer('layer14/pointwise_conv').output
grads = K.gradients(y_c, conv_output)[0]
gradient_function = K.function([yamnet.input], [conv_output, grads])

output, grads_val = gradient_function([INPUT_IMAGE])

, но только первый кадр был обработан правильно.

Output

Как рассчитать градиенты каждого кадра?

1 Ответ

1 голос
/ 26 февраля 2020

Опубликованный YA MNet был обучен с использованием raw TensorFlow, а затем "переведен" в Keras, чтобы сделать его более легким в использовании. Однако мы не являемся экспертами Keras, и у нас есть некоторые проблемы с поведением.

Вы можете получить желаемый результат, представляя кадры классификатору по одному за раз. Каждый выходной кадр классификатора основан на звуке 0,975 секунды (15 600 выборок сигнала 16 кГц), а последовательные кадры основаны на последовательных фрагментах звука; по умолчанию кадры продвигаются на 0,48 секунды (т.е. 15 600 7 680 = 7 920 перекрывающихся выборок между последовательными кадрами).

Если вы вручную разбиваете входные данные на перекрывающиеся блоки из 15 600 выборок, то передайте их в сеть по одному время, ваш существующий расчет градиентов может сработать.

Должно быть более простое решение, которое работает с предоставленным оборудованием Keras, но я не знаю достаточно об этом.

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