Ответ 1
тесты pycaffe и этот файл являются основным шлюзом для интерфейса кодирования python.
Прежде всего, вы хотели бы выбрать, использовать ли Caffe с процессором или графическим процессором. Достаточно называть caffe.set_mode_cpu()
или caffe.set_mode_gpu()
соответственно.
Net
Основной класс, который предоставляет интерфейс pycaffe, это Net
. Он имеет два конструктора:
net = caffe.Net('/path/prototxt/descriptor/file', caffe.TRAIN)
которые просто создают Net
(в данном случае с использованием уровня данных, указанного для обучения) или
net = caffe.Net('/path/prototxt/descriptor/file', '/path/caffemodel/weights/file', caffe.TEST)
который создает Net
и автоматически загружает веса, сохраненные в предоставленном файле caffemodel, - в этом случае с использованием уровня данных, указанного для тестирования.
Объект A Net
имеет несколько атрибутов и методов. Их можно найти здесь. Я приведу только те, которые я использую чаще.
Вы можете получить доступ к сетевым блокам с помощью Net.blobs
. Например.
data = net.blobs['data'].data
net.blobs['data'].data[...] = my_image
fc7_activations = net.blobs['fc7'].data
Аналогичным образом вы можете получить доступ к параметрам (весам). Например.
nice_edge_detectors = net.params['conv1'].data
higher_level_filter = net.params['fc7'].data
Хорошо, теперь настало время фактически подавать сеть с некоторыми данными. Таким образом, вы будете использовать методы backward()
и forward()
. Итак, если вы хотите классифицировать одно изображение
net.blobs['data'].data[...] = my_image
net.forward() # equivalent to net.forward_all()
softmax_probabilities = net.blobs['prob'].data
Метод backward()
эквивалентен, если его интересует вычисление градиентов.
Вы можете сохранить весы сети, чтобы впоследствии их повторно использовать. Это просто вопрос
net.save('/path/to/new/caffemodel/file')
Solver
Другим компонентом ядра, подвергнутым pycaffe, является Solver
. Существует несколько типов решателей, но для ясности я буду использовать только SGDSolver
. Это необходимо для обучения модели кофе.
Вы можете создать экземпляр решателя с помощью
solver = caffe.SGDSolver('/path/to/solver/prototxt/file')
Solver
будет инкапсулировать сеть, которую вы обучаете, и, если присутствует, сеть, используемая для тестирования. Обратите внимание, что они обычно являются одной и той же сетью, только с другим уровнем данных. Доступ к сетям осуществляется с помощью
training_net = solver.net
test_net = solver.test_nets[0] # more than one test net is supported
Затем вы можете выполнить итерацию решателя, то есть прокрутку вперед/назад с обновлением веса, набрав только
solver.step(1)
или запустите решатель до последней итерации с помощью
solver.solve()
Другие функции
Обратите внимание, что pycaffe позволяет вам делать больше вещей, таких как указание сетевой архитектуры через класс Python или создание новый тип слоя. Эти функции используются менее часто, но их довольно легко понять, прочитав тестовые примеры.