CNTK2.3安裝及C# API 之HelloWorld(CNTK C#入門1)

2018-01-06

keywords: CNTK C# 神經(jīng)網(wǎng)絡(luò)

CNTK是微軟搞的開源神經(jīng)網(wǎng)絡(luò)镣典,因?yàn)槠涮峁〤#接口膳叨,并且自稱速度最快婶溯,所以決定裝一個(gè)用用间景。


1佃声、CNTK安裝

參見官方文檔,很詳細(xì):Setup CNTK on your machine

主要有兩步:

1)下載CNTK二進(jìn)制版倘要,分為單CPU版和帶GPU版圾亏,我的筆記本不支持GPU,所以下的是單CPU版,CNTK for Windows v.2.3 CPU only?志鹃,下載后解壓即可夭问。

2)運(yùn)行Install.bat

cd cntk\Scripts\install\windows

install.bat

腳本自動(dòng)完成相關(guān)代碼的安裝,包括pyphon35曹铃、OpenCv缰趋、qt等很多東東。安裝只需兩步铛只,下載&install埠胖,一切似乎很美好,但是淳玩,先別高興太早直撤,坑來了。蜕着。谋竖。

也不知道是我的網(wǎng)絡(luò)問題還是美帝搞破壞,install的時(shí)候總是會(huì)異常終止承匣。咋辦呢蓖乘,只有兩個(gè)字,堅(jiān)持啊兄弟韧骗!再次運(yùn)行install嘉抒,再三次運(yùn)行install,再八次運(yùn)行install袍暴。些侍。。終于政模,OK了岗宣。

install還是很聰明的,不會(huì)每次從頭安裝淋样,而是從上次中斷的地方開始安裝耗式。install完成時(shí)是過去了半天、一天還是一年呢趁猴,不記得了刊咳,感覺一切好遙遠(yuǎn)。

這里還要提一句儡司,使用cntk pyphon的兄弟娱挨,每次都要運(yùn)行scripts目錄下的cntkpy35.bat腳本,所以不妨將scripts目錄放在環(huán)境變量path中枫慷。

另外让蕾,將cntk運(yùn)行文件的目錄也加在path中浪规,方便以后使用。

2探孝、使用C# API

CNTK的C# API HelloWorld程序是名叫TrainingCSharp的東東笋婿,也不知道是個(gè)干啥的,我本地的目錄是C:\cntk23\Examples\TrainingCSharp顿颅,這次的目的就是讓這貨動(dòng)起來缸濒。

編譯

話不多說,直接運(yùn)行Visual Studio粱腻,加載解決方案庇配,編譯,會(huì)出現(xiàn)很多錯(cuò)绍些,主要是引用出了問題捞慌,沒關(guān)系,重新生成項(xiàng)目即可柬批。如果還有問題啸澡,那可能是你的VS沒有裝NuGit。

準(zhǔn)備訓(xùn)練文件

F5運(yùn)行氮帐,瞪嗅虏,蹦出來一個(gè)錯(cuò)誤

Input file '../../Tests/EndToEndTests/Image/Data\Train_cntk_text.txt' is not open.

還沒有訓(xùn)練文件啊,趕快搞一個(gè)吧上沐,從哪兒搞呢皮服,微軟說,從這兒搞?CNTK C#/.NET API training examples参咙,那就搞吧龄广,咋搞呢,意思就是說昂勒,在目錄Examples\Image\DataSets\CIFAR-10下面蜀细,運(yùn)行這句話

python install_cifar10.py

又是個(gè)坑舟铜,這句話運(yùn)行完了就不動(dòng)了戈盈,下載文件總該有個(gè)進(jìn)度條吧,界面真不友好谆刨,一個(gè)字塘娶,等吧,這可好痊夭,等了快一天了就是不見動(dòng)靜刁岸,終于忍無可忍,按了一個(gè)Ctrl Z她我,奇跡出現(xiàn)了虹曙,下載完成迫横,正在生成Txt文件,繩啊酝碳,這是下載程序有bug啊......也許是后門呢矾踱。

在CNTK目錄下,新建目錄Tests2\EndToEndTests\Image\Data疏哗,放入文件Train_cntk_text.txt呛讲;為什么是在CNTK目錄下呢,因?yàn)轫?xiàng)目生成的執(zhí)行程序也在CNTK目錄下的x64目錄中返奉。

修改數(shù)組維度

F5繼續(xù)贝搁,瞪,又蹦出來一個(gè)異常:

System.ApplicationException:“Reached the maximum number of allowed errors while reading the input file (../../Tests/EndToEndTests/Image/Data\Train_cntk_text.txt).

想了半天沒想明白芽偏,既然是跟Train_cntk_text.txt文件有關(guān)系雷逆,那就查吧,這個(gè)文件是由cifar10生成的污尉,這是下載頁(yè)面The CIFAR-10 dataset关面,看這句話:

The CIFAR-10 dataset consists of 60000 32x32 colour images in 10 classes, with 6000 images per class. There are 50000 training images and 10000 test images.?

也就是說,圖片是32*32的彩色圖片十厢,再看程序等太,MNISTClassifier.TrainAndEvaluate中,是這兩句

int[] imageDim = useConvolution ? new int[] { 28, 28, 1 } : new int[] { 784 };

int imageSize = 28 * 28;

改為(32*32 ?3通道)

int[] imageDim = useConvolution ? new int[] { 32, 32, 3 } : new int[] { 32 * 32 * 3 };

?int imageSize = 32 * 32 * 3;

F5繼續(xù)蛮放,瞪缩抡,又是個(gè)異常

System.ApplicationException:“GEMM convolution engine does not support this convolution configuration. It is possible to make GEMM engine work with this configuration by defining input/output/kernel using tensors of higher(+1) dimension. Geometry: Input: 16 x 16 x 12, Output: 16 x 16 x 72, Kernel: 3 x 3 x 4, Map: 1 x 1 x 24, Stride: 1 x 1 x 4, Sharing: (1, 1, 1), AutoPad: (1, 1, 1), LowerPad: 0 x 0 x 0, UpperPad: 0 x 0 x 0[CALL STACK] >?

前面改的就感覺沒完,果然包颁,還需改下面瞻想,MNISTClassifier.CreateConvolutionalNeuralNetwork中

// 28x28x1 -> 14x14x4

int kernelWidth1 = 3, kernelHeight1 = 3, numInputChannels1 = 1, outFeatureMapCount1 = 4;

改為(因?yàn)槲覀兪遣噬ǖ溃?/p>

// 28x28x3 -> 14x14x12

?int kernelWidth1 = 3, kernelHeight1 = 3, numInputChannels1 = 3, outFeatureMapCount1 = 4 * 3;

還有這句,也要改

//// 14x14x4 -> 7x7x8

//int kernelWidth2 = 3, kernelHeight2 = 3, numInputChannels2 = outFeatureMapCount1, outFeatureMapCount2 = 8;

? ?// 14x14x12 -> 7x7x24

?int kernelWidth2 = 3, kernelHeight2 = 3, numInputChannels2 = outFeatureMapCount1, outFeatureMapCount2 = 8 * 3;

放棄LSTM

F5繼續(xù)娩嚼,瞪呢蘑险?好久沒有出現(xiàn)了,程序猿的潛意識(shí)告訴我岳悟,不可能佃迄!果然,瞪又來了贵少,

Input file '../../Tests/EndToEndTests/Text/SequenceClassification/Data\Train.ctf' is not open.,

ctf文件是啥東東呵俏,查,原來跟Train_cntk_text.txt是一樣的滔灶,好吧普碎,建個(gè)目錄Tests\EndToEndTests\Text\SequenceClassification\Data,加入Train.ctf文件录平,再次運(yùn)行麻车,

瞪缀皱,果然,

WARNING: Empty input row at offset 10759 in the input file (../../Tests/EndToEndTests/Text/SequenceClassification/Data\Train.ctf).

WARNING: Could not read a row (# 1) while loading sequence (id = 0) at offset 10759 in the input file (../../Tests/EndToEndTests/Text/SequenceClassification/Data\Train.ctf).

? Message=Reached the maximum number of allowed errors while reading the input file (../../Tests/EndToEndTests/Text/SequenceClassification/Data\Train.ctf).

還是訓(xùn)練數(shù)據(jù)數(shù)組維度的問題动猬,LSTMSequenceClassifier中進(jìn)行如下修改

//const int inputDim = 2000;

? ? ? ? ? ? //const int cellDim = 25;

? ? ? ? ? ? //const int hiddenDim = 25;

? ? ? ? ? ? //const int embeddingDim = 50;

? ? ? ? ? ? //const int numOutputClasses = 5;

? ? ? ? ? ? const int inputDim = 32 * 32;

? ? ? ? ? ? const int cellDim = 3;

? ? ? ? ? ? const int hiddenDim = 25;

? ? ? ? ? ? const int embeddingDim = 50;

? ? ? ? ? ? const int numOutputClasses = 10;

還是不行唆鸡,終于晉楚殺著,直接在program.c中注釋掉了這一句

LSTMSequenceClassifier.Train(device);

這下好了枣察,終于沒人鬧心了争占,哈哈。


回顧

安裝了CNTK序目,安裝了cifar10樣本數(shù)據(jù)臂痕,用C#跑通了邏輯回歸(LogisticRegression)、multilayer perceptron (MLP)猿涨、 convolutional neural network(CNN)握童,沒有跑通 LSTM(長(zhǎng)短記憶模型),雖然跑通了叛赚,但還不知道里面都是個(gè)啥澡绩,需要一個(gè)一個(gè)再分析實(shí)踐,留到下節(jié)了俺附。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末肥卡,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子事镣,更是在濱河造成了極大的恐慌步鉴,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,546評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件璃哟,死亡現(xiàn)場(chǎng)離奇詭異氛琢,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)随闪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門阳似,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人铐伴,你說我怎么就攤上這事撮奏。” “怎么了盛杰?”我有些...
    開封第一講書人閱讀 164,911評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵挽荡,是天一觀的道長(zhǎng)藐石。 經(jīng)常有香客問我即供,道長(zhǎng),這世上最難降的妖魔是什么于微? 我笑而不...
    開封第一講書人閱讀 58,737評(píng)論 1 294
  • 正文 為了忘掉前任逗嫡,我火速辦了婚禮青自,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘驱证。我一直安慰自己延窜,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評(píng)論 6 392
  • 文/花漫 我一把揭開白布抹锄。 她就那樣靜靜地躺著逆瑞,像睡著了一般。 火紅的嫁衣襯著肌膚如雪伙单。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,598評(píng)論 1 305
  • 那天吻育,我揣著相機(jī)與錄音念秧,去河邊找鬼。 笑死布疼,一個(gè)胖子當(dāng)著我的面吹牛肴沫,可吹牛的內(nèi)容都是我干的粟害。 我是一名探鬼主播,決...
    沈念sama閱讀 40,338評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼颤芬,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼悲幅!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起站蝠,我...
    開封第一講書人閱讀 39,249評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤汰具,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后菱魔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體留荔,經(jīng)...
    沈念sama閱讀 45,696評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評(píng)論 3 336
  • 正文 我和宋清朗相戀三年澜倦,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了聚蝶。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片杰妓。...
    茶點(diǎn)故事閱讀 40,013評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖碘勉,靈堂內(nèi)的尸體忽然破棺而出巷挥,到底是詐尸還是另有隱情,我是刑警寧澤验靡,帶...
    沈念sama閱讀 35,731評(píng)論 5 346
  • 正文 年R本政府宣布倍宾,位于F島的核電站,受9級(jí)特大地震影響胜嗓,放射性物質(zhì)發(fā)生泄漏凿宾。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評(píng)論 3 330
  • 文/蒙蒙 一兼蕊、第九天 我趴在偏房一處隱蔽的房頂上張望初厚。 院中可真熱鬧,春花似錦孙技、人聲如沸产禾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽亚情。三九已至,卻和暖如春哈雏,著一層夾襖步出監(jiān)牢的瞬間楞件,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工裳瘪, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留土浸,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,203評(píng)論 3 370
  • 正文 我出身青樓彭羹,卻偏偏與公主長(zhǎng)得像黄伊,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子派殷,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理还最,服務(wù)發(fā)現(xiàn),斷路器毡惜,智...
    卡卡羅2017閱讀 134,657評(píng)論 18 139
  • 說明本次redis集群安裝在rhel6.8 64位機(jī)器上拓轻,redis版本為3.2.8,redis的gem文件版本為...
    讀或?qū)?/span>閱讀 14,742評(píng)論 3 9
  • SwiftDay011.MySwiftimport UIKitprintln("Hello Swift!")var...
    smile麗語閱讀 3,837評(píng)論 0 6
  • 轉(zhuǎn)載~~ 01 曾經(jīng)做招聘的時(shí)候遇到一個(gè)面試者,我和HR的意見產(chǎn)生了分歧。這名面試者是一名大齡女性辜梳,已經(jīng)生育粱甫,背景...
    毓恬冠佳閱讀 432評(píng)論 0 0
  • 夜里枕頭叫醒我 夜里枕頭叫醒我泳叠,說了我之前對(duì)它說過的話作瞄。 “喂。我睡不著危纫,陪我聊天好嗎宗挥?” 像它平時(shí)那樣,我沒說話...
    tcepsorp可樂閱讀 207評(píng)論 0 0