python import caffe的一些思考

在安装caffe以后一般需要运行命令进行验证:

import caffe

这涉及到python中的导入:

在python 里面,import **  有两种导入, 一种是模块导入,一种是包导入

1) 模块导入

模块通常是指写好的文件,文件可以 " .py"、".pyc"、".pyd"、".so"、".dll" 等类型, 最常用的是导入'.py' 文件模块, '.py'文件中可以包含类、方法、变量和常量

比如在目录/home/cc/test_r/目录下创建test0.py文件

# test0.py

class foo(object):  
   
    def __init__(self,year,data):  
        self.year = year
        self.data = data
    
    def output(self):  
        print "%s/%s" %(self.year,self.data)

则只要将路径添加到搜索路径中就可以直接导入'.py'模块:

import sys
sys.path.append('/home/cc/test_r')

import test0  
a = test0.foo(2017,04)
print a.output()
# 或者
from test0 import foo
a = foo(2017,04)
print a.output()

导入'.py‘文件具体应用案例可参考:python构建深度神经网络(DNN), python也可以导入.so文件,需要使用python的c扩展, caffe中有用到,可以参考: 使用C语言扩展Python(一))


2) 包导入

上面是在test_r 目录下导入test0.py模块, 当有许多目录,每个目录下模块比较多时,则不同目录下的模块之间可能产生命名冲突, 因此可以采用将目录下对应的文件夹作为一个包, 导入该包,可以对该包下的文件进行相应的访问。

例如在test_r文件夹下创建一个__init__.py 文件就将test_r文件夹定义成了一个包, __init__可以为空,但一定要存在,不过通常情况下它用来存放包的初始化代码。

在test_r文件夹下创建一个空的__init__.py 文件后,此时test_r可以当做一个包来被python调用

import test_r.test0  as tt  # import test_r 
a = tt.foo(2017,04)
print a.output()
也可以在__init__里定义调用的包 (. 代表当前目录, .. 代表上级父目录):

# __init__.py

from .test0 import foo

此时可对文件间接调用:

import test_r

a = test_r.foo(2017,04)
print a.output()

3) import caffe

点击caffe此时会跳转到__init__.py文件,如下面:

from .pycaffe import Net, SGDSolver, NesterovSolver, AdaGradSolver, RMSPropSolver, AdaDeltaSolver, AdamSolver
from ._caffe import set_mode_cpu, set_mode_gpu, set_device, Layer, get_solver, layer_type_list, set_random_seed
from ._caffe import __version__
from .proto.caffe_pb2 import TRAIN, TEST
from .classifier import Classifier
from .detector import Detector
from . import io
from .net_spec import layers, params, NetSpec, to_proto

根据前面的分析,应该能够比较容易的理解该条语句的意思了。


参考:

1) http://www.cnblogs.com/liyang0519/p/6125248.html

2) http://blog.csdn.net/zyz511919766/article/details/22678143





你可能感兴趣的:(python,caffe)