深度學習系列3 框架caffe

2021-09-26 05:01:34 字數 3201 閱讀 8787

caffe是賈揚清大神開發的一套系統,caffe2是重構後的版本。其基本結構為:

import numpy as np

import time

from caffe2.python import core, workspace

from caffe2.proto import caffe2_pb2

x = np.random.randn(2, 3).astype(np.float32)

print("generated x from numpy:\n{}".format(x))

workspace.feedblob("x", x)

print(workspace.blobs())

print(workspace.fetchblob('x'))

blobs命令得到資料名列表

fetchblob獲得具體的資料

op = core.createoperator(

"relu", # the type of operator that we want to run

["x"], # a list of input blobs by their names

["y"], # a list of output blobs by their names

'active1'

)workspace.runoperatoronce(op)

workspace.fetchblobs('y')

op2 = core.createoperator(

"gaussianfill",

, # gaussianfill does not need any parameters.

["w"],

shape=[100, 100], # shape argument as a list of ints.

mean=1.0, # mean as a single float

std=1.0, # std as a single float

)workspace.runoperatoronce(op2)

temp = workspace.fetchblob("z")

使用workspace來控制執行。

net = core.net("linear_net")

x = net.gaussianfill(, ["x"], mean=0.0, std=1.0, shape=[2, 3], run_once=0)

w = net.gaussianfill(, ["w"], mean=0.0, std=1.0, shape=[5, 3], run_once=0)

b = net.constantfill(, ["b"], shape=[5,], value=1.0, run_once=0)

y = net.fc([x,w,b],['y'])

print(net.proto())

workspace.runnetonce(net)

for name in workspace.blobs():

print("{}:\n{}".format(name, workspace.fetchblob(name)))

在python中有兩種方法來執行乙個net:

方法1:使用workspace.runnetonce,初始化網路,執行網路,然後銷毀網路。

方法2:先使用workspace.createnet初始化網路,然後使用workspace.runnet來執行網路。

可以用下面的**來畫圖:

caffe2為了更方便呼叫和管理,可以通過匯入brew這個包來呼叫幫助函式。像fc層的實現就可以使用:

from caffe2.python import brew

brew.fc(model, blob_in, blob_out, ...)

我們使用brew構造網路就十分簡單,下面的**就構造了乙個lenet模型:

from caffe2.python import brew

def addlenetmodel(model, data):

conv1 = brew.conv(model, data, 'conv1', 1, 20, 5)

pool1 = brew.max_pool(model, conv1, 'pool1', kernel=2, stride=2)

conv2 = brew.conv(model, pool1, 'conv2', 20, 50, 5)

pool2 = brew.max_pool(model, conv2, 'pool2', kernel=2, stride=2)

fc3 = brew.fc(model, pool2, 'fc3', 50 * 4 * 4, 500)

fc3 = brew.relu(model, fc3, fc3)

pred = brew.fc(model, fc3, 'pred', 500, 10)

softmax = brew.softmax(model, pred, 'softmax')

caffe2 使用brew提供很多構造網路的幫助函式,大大簡化了我們構建網路的過程。但實際上,這些只是封裝的結果,網路構造的原理和之前說的使用operators構建的原理是一樣的。

Caffe深度學習計算框架

1 caffe set mode caffe gpu 1 name dummy net 2 3 layers 45 layers 67 layers 8 layers 1 name conv1 2 type convolution 3 bottom data 4 top conv1 5 convol...

唐宇迪深度學習框架Caffe系列 10

繪製loss曲線 安裝matplotlib庫 這個庫需要安裝python tk sudo apt get install python tksudo pip install matplotlib import numpy as np import matplotlib.pyplot as plt i...

深度學習框架caffe訓練過程

1.資料準備 2.生成訓練資料和測試資料的label,生成 3.生成訓練資料和測試資料對應的lmdb build tools convert imageset shuffle true backend lmdb data cigarettetrain20170413 data cigarettetr...