Caffe2 (0) Get started
Caffe2 的安裝可以參照官網 [1] 的安裝方式。我 Caffe2 搭配 CUDA 9.0 和 Ubuntu 18.04 一直都裝不起來 Orz,不過 16.04 倒是一路順暢 (選 build from source 再用 python3.5 就可以輕鬆安裝)。
1. From Caffe to Caffe2:
Caffe2 官網 [2] 解釋了 Caffe 和 Caffe2 的不同。Caffe 的核心是 blobs 和 layers。blob 是下圖左邊綠色的部份,代表資料或是 tensor。blob 可以透過 layer (下圖左邊藍色的部份) 去運算產生新的 blob。
而 Caffe2 就不同了,Caffe2 的核心是 blobs 和 operators。簡單來說就是把 caffe layers 中的 tensors 抽出來做成 blobs。所以 operator 只定義了如何運算,而其它數值的部份都是參數的傳入和回傳。
2. Caffe2 Package:
開啟終端機吧:
$ ipython
常要 import 的東西如下:
from caffe2.python import core, workspace import numpy as np
numpy 是一種 cpu 的 tensor,我們可以把這個格式的資料餵給 Caffe2。
3. Workspaces and Blobs:
Workspace 類似 tensorflow 的 session,我們要在 Workspace 裡建立 blobs,blobs 才能被 Caffe2 運算。blobs 可以透過 numpy 來賦值。
X = np.random.randn(2, 3).astype(np.float32) workspace.FeedBlob("X", X)
第一個 "X" 是 blob 的名字,第二個 X 是 numpy 物件用來賦值。
我們可以查找特定名字的 blob 或是列出所有 blob。
workspace.FetchBlob("X") workspace.Blobs()
4. Operators:
Operator 是定義 blobs 間的運算關係,也有不須輸入只會輸出 blob 的 operator。
op =core.CreateOperator("Relu", ["X"], ["Y"]) workspace.RunOperatorOnce(op) workspace.RunOperatorOnce(op)
Relu 會把負數變成 0,正數維持不變。
workspace.FetchBlobs(["X", "Y"])
來定義一個生成 blob 的 operator,這個 operator 會生成 Gaussian kernel。
op = core.CreateOperator("GaussianFill", [], ["Z"], mean=0.0,std=1.0,shape=[2,3]) workspace.RunOperatorOnce(op) workspace.FetchBlob("Z")
最後來把 workspace 清乾淨。
workspace.Blobs() workspace.ResetWorkspace() workspace.Blobs()
5. Nets:
Nets 是一系列 blobs 和 operators 的組合,下面演示一個 fully connected layer 的 net:
$$ Y=X*W^T+b$$net = core.Net("Hello") X = net.GaussianFill([], ["X"], shape=[2,3]) W = net.XavierFill([], ["W"], shape=[5,3]) b = net.ConstantFill([], ["b"], shape=[5,]) Y = X.FC(["W", "b"], ["Y"]) workspace.RunNetOnce(net) workspace.FetchBlob("Y")
把圖存起來,綠色是 operators,白色是 blobs。我們的 X, W, b 是由 operator 產生。
from caffe2.python import net_drawer g = net_drawer.GetPydotGraph(net) g.write_png("graph.png")
Reference:
[1] https://caffe2.ai/docs/getting-started.html?platform=ubuntu&configuration=compile
留言
張貼留言