????本文主要是官方文檔中Basics of Caffe2-Workspaces,Operators,and Nets的學(xué)習(xí)筆記。
1. 利用core.CreateOperator函數(shù)來(lái)創(chuàng)建新的Operator卸察。
op=core.CreateOperator(
"GaussianFill",#首先確定operator的類型
[],# 輸入脯厨,可缺省,說(shuō)明該operator用于生成一組參數(shù)
["Z"],輸出
shape=[100,100],# 生成數(shù)據(jù)的尺寸坑质,此處為100*100
mean=1.0,# 均值
std=1.0,# 標(biāo)準(zhǔn)差
????單獨(dú)運(yùn)行operator的方式是workspace.RunOperatorOnce(op),只有在運(yùn)行之后才會(huì)有數(shù)據(jù)合武,剛開(kāi)始只是定義。
2. 創(chuàng)建一個(gè)類似下面計(jì)算的網(wǎng)絡(luò)涡扼,利用core.Net創(chuàng)建眯杏。注意與上一篇筆記中ModelHelper方法的區(qū)別,上一篇中是自動(dòng)創(chuàng)建了初始化和前向網(wǎng)絡(luò)壳澳,我們現(xiàn)在做的其實(shí)是將二者融合岂贩,一邊初始化網(wǎng)絡(luò),一邊進(jìn)行前向網(wǎng)絡(luò)的構(gòu)建巷波,當(dāng)然對(duì)于大型網(wǎng)絡(luò)還是ModelHelper更為方便萎津,但這也說(shuō)明了caffe2的靈活性。
X = np.random.randn(2, 3)
W = np.random.randn(5, 3)
b = np.ones(5)
Y = X * W^T + b
(1)創(chuàng)建一個(gè)空的網(wǎng)絡(luò)
net = core.Net("my first net")
? (2) 創(chuàng)建一個(gè)blob抹镊,也就是X(正常是通過(guò)讀取樣本的數(shù)據(jù)锉屈,上一篇中是通過(guò)numpy生成的:
X=net.GaussianFill([],["X"],mean=0.0,std=1.0,shape=[2,3],run_once=0)
X生成的方式也很值得關(guān)注,首先他與core.CreateOperator生成的operator格式是完全相同的垮耳,我們可以通過(guò)net.Proto()查看颈渊。其次是他生成的方式與原本不同:通過(guò)net調(diào)用已有的op,與core.CreateOperator首先指明op的名字终佛,形式上有些不同俊嗽。最后用core.CreateOperator生成operator需要手動(dòng)將其加入到net中(net.Proto().op.append(op)),而這種方式會(huì)自動(dòng)完成將op加入net的操作。
最后用那返回的X是什么呢铃彰?官網(wǎng)文檔說(shuō)是X是BlobReference類型绍豁,主要記錄了兩個(gè)內(nèi)容:
? ?記錄名字,通過(guò)str(X)可以獲取他的名字
? ?他是從哪個(gè)net中生成的牙捉。
(3)創(chuàng)建W,b的方式和X一樣竹揍,創(chuàng)建FC層是需要注意:
Y =X.FC([W,b],["Y"])
這種方式和創(chuàng)建X,W,b本質(zhì)上是一致的敬飒,他等于下面這種方式:
Y = net.FC([X,W,b],["Y"])
(4) 運(yùn)行網(wǎng)絡(luò)的方式和上一篇一致,這里講到了清空workspace和記錄網(wǎng)絡(luò)運(yùn)行時(shí)間的方法芬位。