有谁知道所有重要的pycaffe命令是否有备忘单?到目前为止,我只使用matlab接口和终端bash脚本来使用caffe .
我想转向使用ipython并完成ipython笔记本示例 . 但是我发现很难概述python的caffe模块中的所有函数 . (我也是python的新手) .
pycaffe tests和this file是python编码接口的主要网关 .
首先,您想选择是否将Caffe与CPU或GPU一起使用 . 分别调用 caffe.set_mode_cpu() 或 caffe.set_mode_gpu() 就足够了 .
caffe.set_mode_cpu()
caffe.set_mode_gpu()
pycaffe接口公开的主类是 Net . 它有两个构造函数:
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文件中的权重 - 在这种情况下使用指定用于测试的数据层 .
Net 对象具有多个属性和方法 . 他们可以找到here . 我会引用我经常使用的那些 .
您可以通过 Net.blobs 访问网络blob . 例如 .
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() 方法 . 所以,如果你想对单个图像进行分类
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')
pycaffe暴露的另一个核心组件是 Solver . 有几种类型的求解器,但为了清楚起见,我将仅使用 SGDSolver . 为了训练caffe模型,需要它 . 您可以使用实例化解算器
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允许您执行更多操作,例如specifying the network architecture through a Python class或creating a new Layer type . 这些功能使用较少,但通过阅读测试用例很容易理解 .
请注意,Flavio Ferrara的答案有一个小问题,可能会浪费你很多时间:
net.blobs['data'].data[...] = my_image net.forward()
如果您的第一个图层是数据类型图层,则上面的代码无效,因为当调用 net.forward() 时,它将从第一个图层开始,然后将覆盖插入的数据 my_image . 因此它将显示没有错误,但给你完全无关的输出 . 正确的方法是分配起始层和结束层,例如:
net.forward()
my_image
net.forward(start='conv1', end='fc')
这是一个使用pycaffe和一些matlab代码的LFW数据集上的面部验证实验的Github存储库 . 我想它可以帮到很多,特别是 caffe_ftr.py 文件 .
caffe_ftr.py
https://github.com/AlfredXiangWu/face_verification_experiment
此外,这里有一些使用pycaffe进行图像分类的简短示例代码:
http://codrspace.com/Jaleyhd/caffe-python-tutorial/ http://prog3.com/sbdm/blog/u011762313/article/details/48342495
2 回答
pycaffe tests和this file是python编码接口的主要网关 .
首先,您想选择是否将Caffe与CPU或GPU一起使用 . 分别调用
caffe.set_mode_cpu()
或caffe.set_mode_gpu()
就足够了 .净
pycaffe接口公开的主类是
Net
. 它有两个构造函数:它只是创建一个
Net
(在这种情况下使用为训练指定的数据层),或这会创建一个
Net
并自动加载保存在提供的caffemodel文件中的权重 - 在这种情况下使用指定用于测试的数据层 .Net
对象具有多个属性和方法 . 他们可以找到here . 我会引用我经常使用的那些 .您可以通过
Net.blobs
访问网络blob . 例如 .您也可以以类似的方式访问参数(权重) . 例如 .
好的,现在是时候用一些数据实际喂网了 . 因此,您将使用
backward()
和forward()
方法 . 所以,如果你想对单个图像进行分类如果有人对计算渐变感兴趣,则
backward()
方法是等效的 .您可以保存净重以随后重复使用它们 . 这只是一个问题
解算器
pycaffe暴露的另一个核心组件是
Solver
. 有几种类型的求解器,但为了清楚起见,我将仅使用SGDSolver
. 为了训练caffe模型,需要它 . 您可以使用实例化解算器Solver
将封装您正在训练的网络,如果存在,则封装用于测试的网络 . 请注意,它们通常是相同的网络,只有不同的数据层 . 网络可以访问然后,您可以执行求解器迭代,即带有权重更新的前向/后向传递,只需键入
或运行求解器直到最后一次迭代,用
其他功能
请注意,pycaffe允许您执行更多操作,例如specifying the network architecture through a Python class或creating a new Layer type . 这些功能使用较少,但通过阅读测试用例很容易理解 .
请注意,Flavio Ferrara的答案有一个小问题,可能会浪费你很多时间:
如果您的第一个图层是数据类型图层,则上面的代码无效,因为当调用
net.forward()
时,它将从第一个图层开始,然后将覆盖插入的数据my_image
. 因此它将显示没有错误,但给你完全无关的输出 . 正确的方法是分配起始层和结束层,例如:net.forward(start='conv1', end='fc')
这是一个使用pycaffe和一些matlab代码的LFW数据集上的面部验证实验的Github存储库 . 我想它可以帮到很多,特别是
caffe_ftr.py
文件 .https://github.com/AlfredXiangWu/face_verification_experiment
此外,这里有一些使用pycaffe进行图像分类的简短示例代码:
http://codrspace.com/Jaleyhd/caffe-python-tutorial/ http://prog3.com/sbdm/blog/u011762313/article/details/48342495