2017-01-31 6 views
1

Можно ли получить градиенты по каждому слою в Caffe в CNN, отредактировать их и снова применить новые градиенты в процессе обучения? Если возможно, используйте интерфейс pycaffe.Получение и редактирование параметров градиента в Caffe

Например, в TensorFlow, это может быть сделано с помощью функций:

given_optimizer.compute_gradients(total_loss) 
given_optimizer.apply_gradients(grads) 

ответ

1

Я не уверен, что вы подразумеваете под «применить новые градиенты в учебном процессе», но вы можете получить доступ к градиенты в интерфейсе pycaffe:

import caffe 
net = caffe.Net('/path/to/net.prototxt', '/path/to/weights.caffemodel', caffe.TEST) 
# provide inputs to the net, do a pass so that meaningful data/gradients propagate to all the layers 
net.forward_backward_all() 

# once data/gradients are updated, you can access them 
net.blobs['blob_name'].diff # access the gradient of blob 'blob_name' 
net.layers[5].blobs[0].diff # access the gradient of the first parameter blob of the 6th layer 

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

list(net._layer_names).index('layer_name') 

Это вернет индекс слоя 'layer_name'.

+0

«Применяя градиенты», я имею в виду изменение градиентов, которые, с другой стороны, впоследствии выполняют обновление весов на заданной итерации во время учебного процесса. – cerebrou

+0

@cerebrou вы можете изменить '.diff' часть различных blobs сети, но я не уверен, что caffe позволяет вам изменять градиенты * до того, как они используются для обновления веса. Вы можете использовать интерфейс pycaffe для прямого изменения весов, хотя ... – Shai

+0

исправьте меня, если я ошибаюсь, но после модификации градиента, похоже, не существует способа сбрасывания весов. – cerebrou

Смежные вопросы