Мне нужно найти градиент относительно входного слоя для одного сверточного фильтра в сверточной нейронной сети (CNN) как способ визуализировать фильтры.
Учитывая обучаемую сеть в интерфейсе Python Caffe, например, в этот пример, как я могу найти градиент конвективного фильтра по отношению к данным во входном слое?
Edit:
На основе ответа cesans я добавил код ниже. Размеры моего входного слоя [8, 8, 7, 96]
. Мой первый conv-layer, conv1
, имеет 11 фильтров размером 1x5
, что приводит к размерам [8, 11, 7, 92]
.
net = solver.net
diffs = net.backward(diffs=['data', 'conv1'])
print diffs.keys() # >> ['conv1', 'data']
print diffs['data'].shape # >> (8, 8, 7, 96)
print diffs['conv1'].shape # >> (8, 11, 7, 92)
Как видно из вывода, размеры массивов, возвращаемые net.backward()
, равны размерам моих слоев в Caffe. После некоторого тестирования я обнаружил, что этот результат является градиентом потери по отношению к слою data
и слою conv1
.
Однако мой вопрос заключался в том, как найти градиент одного конвейер-фильтра по отношению к данным во входном слое, что является чем-то другим. Как я могу достичь этого?