首页 文章

如何在单个python文件中加载不同版本的caffe

提问于
浏览
1

我为我的项目运行了两个神经网络,它们都使用不同版本的caffe . 我试图使用sys模块添加caffe模块的路径 . 第一个神经网络没有任何困难地运行,但是第二个神经网络在其caffe模块的路径方面存在问题 .

我已经尝试删除我之前添加的caffe路径位置,然后尝试添加第二个神经网络的caffe路径 . 然后它也给了我错误 .

我找到的唯一解决方案是在子进程中运行我的第二个神经网络 . 但是它效率不高,因为我必须将所有数据保存在文件中,然后在主进程中读取并执行计算 .

有人建议我使用环境变量,但我不知道如何使用这个概念 .

任何帮助,如何加载多个caffe版本将是伟大的 .

EDIT

我尝试使用 Shai ex给出的逻辑添加不同版本的模块:添加不同版本的numpy . 然而,相同的逻辑在caffe的情况下不起作用 .

import caffe_a as caffe_a, caffe_b as caffe_b

error displayed :警告:在InitGoogleLogging()写入STDERR之前记录F0223 08:21:57.810040 17753 layer_factory.hpp:69]检查失败:registry.count(类型)== 0(1对0)层类型卷积已经注册 . *** Check failure stack trace: *** 已中止(核心转储)

Another approach tried and failed:

我试图使用 threading ,我试图在每个独立的线程中加载不同的caffe版本 . 现在我没有得到任何错误但是只有一个版本的caffe被加载 . 实际上 sys.modules 变量在所有线程之间全局共享,因此当执行第二个 import caffe 语句时,python只看到模块已经存在并且不加载新的caffe模块 .

有没有什么方法可以改变线程的行为?

1 回答

  • 0

    我不是python的专家,但我会试一试......

    我假设你有两个文件夹 /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()
    

    祝好运...

相关问题