2017-02-22 52 views
0

Я запускаю две нейронные сети для моего проекта, оба из которых используют разные версии caffe. Я пытаюсь добавить путь модуля caffe с помощью модуля sys. Первая нейронная сеть работает без каких-либо трудностей, однако вторая нейронная сеть имеет проблему относительно пути к своему модулю caffe.Как загрузить другую версию caffe в одном файле python

Я попытался удалить местоположение пути в кофейнике, которое я добавил ранее, а затем попытался добавить путь caffe для второй нейронной сети. Тогда и это дает мне ошибку.

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

Мне предложили использовать переменные среды, но я не знаю, как это сделать.

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

EDIT

Я пробовал добавлять различные версии модулей, используя логику, данное Шай ех: Добавление различных версий NumPy. Однако такая же логика не работает в случае с кофе. отображается

import caffe_a as caffe_a, caffe_b as caffe_b 

ошибка: ВНИМАНИЕ: Logging Перед InitGoogleLogging() записывается в STDERR F0223 08: 21: 57,810040 17753 layer_factory.hpp: 69] Проверка не удалась: registry.count (тип) == 0 (1 против 0) Свернутый тип Сверток уже зарегистрирован. * Проверка стека провал трассировки: * Прерванный (ядро сбрасывали)

Другой подход попытался и не смог:

Я пытался использовать продевал, где я пытался загрузить другую версию Caffe в каждом независимом потоке. Теперь я не получаю никакой ошибки. Однако загружается только одна версия caffe. Фактически переменные sys.modules глобально распределяются между всеми потоками, и, таким образом, когда выполняется второй оператор import caffe, python просто видит, что модули уже присутствуют и не загружает новые модули caffe.

Есть ли способы, с помощью которых мы можем изменить поведение потоков?

+0

вы рассматривали использование темы вместо подпроцесса? – Shai

+0

@Shai Я еще не использовал темы. На самом деле мои нейронные сети выполняются один за другим. Таким образом, вы хотели использовать простое решение, в котором мы можем просто загрузить другую версию caffe, используя одну команду в python. – kkk

+0

Возможный дубликат [Как импортировать две версии одного и того же модуля python одновременно?] (Http://stackoverflow.com/questions/29160625/how-to-import-two-versions-of-the-same- python-module-at-same-time) – Shai

ответ

0

Я точно не эксперт в питона, но я дам ему попробовать ...

Я предполагаю, что у вас есть две папки /path/to/caffe-a и /path/to/caffe-b каждый из них является клоном другой ветви CAFFE , Таким образом, у вас есть

/path/to/caffe-a/python/caffe/_caffe.so 
/path/to/caffe-b/python/caffe/_caffe.so 

И так далее ...

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

~$ ln -s /path/to/caffe-a/python/caffe /path/to/caffe-a/python/caffe_a 
~$ ln -s /path/to/caffe-b/python/caffe /path/to/caffe-b/python/caffe_b 

В Python, добавить обе версии CAFFE на пути

import sys 
sys.path.insert(0, '/path/to/caffe-a/python') 
sys.path.insert(0, '/path/to/caffe-b/python') 

Теперь импортировать их с разными названиями

import caffe_a as caffe_a, caffe_b as caffe_b 

Сборка сети с использованием 'a' версии

net_a = caffe_a.Net('/path/to/deploy.prototxt', caffe.TEST) 
net_a.forward() 

Построить сетка с использованием 'b' версии:

net_b = caffe_b.Net('/path/to/other/deploy.prototxt', caffe.TEST) 
net_b.forward() 

удачи ...

+0

это дало мне эту ошибку: ПРЕДУПРЕЖДЕНИЕ: регистрация до InitGoogleLogging() записывается в STDERR F0223 08: 21: 57.810040 17753 layer_factory.hpp: 69] Check failed: registry.count (type) == 0 (1 против 0) Свернутый тип Сверки уже зарегистрирован. *** Проверьте трассировку стека следов: *** Отменено (сбрасывается сердечник). Эта ошибка возникла, когда я попытался импортировать обе версии caffe вместе (импорт caffe_a как caffe_a, caffe_b как caffe_b) – kkk

+0

@kkk виртуальные среды тоже не работали? – Shai

+0

Мне нужно выполнить обе нейронные сети. Выход первой сети используется второй сетью, и создание виртуальной среды не помогло бы. Я знаю, что виртуальные среды похожи на контейнеры, имеющие все зависимости пакета. Я не знаю, как я могу использовать его для своей задачи. – kkk