當(dāng)前位置:首頁 > 芯聞號(hào) > 充電吧
[導(dǎo)讀]在理解如何使caffe運(yùn)行之后,我們要理解它是如何運(yùn)行的,即了解Solver類的Solve()函數(shù)做了什么,對(duì)于Solver類中如何初始化網(wǎng)絡(luò)以及其他參數(shù),有興趣的可以深入研究。源碼中Solver()

在理解如何使caffe運(yùn)行之后,我們要理解它是如何運(yùn)行的,即了解Solver類的Solve()函數(shù)做了什么,對(duì)于Solver類中如何初始化網(wǎng)絡(luò)以及其他參數(shù),有興趣的可以深入研究。

源碼中Solver()函數(shù)是有參數(shù)形式的


??//?The?main?entry?of?the?solver?function.?In?default,?iter?will?be?zero.?Pass
??//?in?a?non-zero?iter?number?to?resume?training?for?a?pre-trained?net.
??virtual?void?Solve(const?char*?resume_file?=?NULL);
??inline?void?Solve(const?string?resume_file)?{?Solve(resume_file.c_str());?}

各位一看就明白了吧。再看Solve函數(shù)的定義



templatevoid?Solver::Solve(const?char*?resume_file)?{
??CHECK(Caffe::root_solver());
??LOG(INFO)?<<?"Solving?"?<<?net_->name();
??LOG(INFO)?<<?"Learning?Rate?Policy:?"?<<?param_.lr_policy();

??//?Initialize?to?false?every?time?we?start?solving.
??requested_early_exit_?=?false;

??if?(resume_file)?{
????LOG(INFO)?<<?"Restoring?previous?solver?status?from?"?<<?resume_file;
????Restore(resume_file);
??}

傳入?yún)?shù)resume_file是用于繼續(xù)中斷的訓(xùn)練的,既然caffe.cpp中的train()函數(shù)中已經(jīng)進(jìn)行了此操作,此處就不需要再傳入resume_file參數(shù)了。
然后Solver就直接進(jìn)入訓(xùn)練模式了,即Step函數(shù),傳入?yún)?shù)為循環(huán)的次數(shù),此參數(shù)在solver.txt文件中定義的max_iter和resume_file加載的iter_參數(shù)的差。



??//?For?a?network?that?is?trained?by?the?solver,?no?bottom?or?top?vecs
??//?should?be?given,?and?we?will?just?provide?dummy?vecs.
??int?start_iter?=?iter_;
??Step(param_.max_iter()?-?iter_);


在進(jìn)入Step函數(shù)之前,我們繼續(xù)往下看,訓(xùn)練完成后caffe會(huì)保存當(dāng)前模型


??//?If?we?haven't?already,?save?a?snapshot?after?optimization,?unless
??//?overridden?by?setting?snapshot_after_train?:=?false
??if?(param_.snapshot_after_train()
??????&&?(!param_.snapshot()?||?iter_?%?param_.snapshot()?!=?0))?{
????Snapshot();
??}

如果solver.txt中提供了test網(wǎng)絡(luò),那么會(huì)在訓(xùn)練完成后進(jìn)行一次測試

??//?After?the?optimization?is?done,?run?an?additional?train?and?test?pass?to
??//?display?the?train?and?test?loss/outputs?if?appropriate?(based?on?the
??//?display?and?test_interval?settings,?respectively).??Unlike?in?the?rest?of
??//?training,?for?the?train?net?we?only?run?a?forward?pass?as?we've?already
??//?updated?the?parameters?"max_iter"?times?--?this?final?pass?is?only?done?to
??//?display?the?loss,?which?is?computed?in?the?forward?pass.
??if?(param_.display()?&&?iter_?%?param_.display()?==?0)?{
????int?average_loss?=?this->param_.average_loss();
????Dtype?loss;
????net_->Forward(&loss);

????UpdateSmoothedLoss(loss,?start_iter,?average_loss);

????LOG(INFO)?<<?"Iteration?"?<<?iter_?<<?",?loss?=?"?<<?smoothed_loss_;
??}
??if?(param_.test_interval()?&&?iter_?%?param_.test_interval()?==?0)?{
????TestAll();
??}


在Step函數(shù)中通過while循環(huán)迭代訓(xùn)練,并且如果設(shè)置有測試網(wǎng)絡(luò),在設(shè)置條件滿足時(shí),每次循環(huán)會(huì)先對(duì)當(dāng)前網(wǎng)絡(luò)進(jìn)行測試



??while?(iter_?<?stop_iter)?{
????//?zero-init?the?params
????net_->ClearParamDiffs();
????if?(param_.test_interval()?&&?iter_?%?param_.test_interval()?==?0
????????&&?(iter_?>?0?||?param_.test_initialization()))?{
??????if?(Caffe::root_solver())?{
????????TestAll();
??????}

測試完成后,如何沒有終止訓(xùn)練,將繼續(xù)訓(xùn)練,此處的iter_size默認(rèn)值是1,主要作用是SGD中參數(shù)更新頻率,即訓(xùn)練iter_size后更新網(wǎng)絡(luò),此時(shí)訓(xùn)練的總樣本數(shù)為train.txt中定義的batch_size * iter_size。



????for?(int?i?=?0;?i?<?param_.iter_size();?++i)?{
??????loss?+=?net_->ForwardBackward();
????}

之后調(diào)用ApplyUpdate();更新權(quán)值和偏置,更新方法后續(xù)再聊。

Step中的測試與caffe.cpp中的test類似,主要是檢測當(dāng)前網(wǎng)絡(luò)訓(xùn)練狀態(tài),可以根據(jù)任務(wù)狀態(tài)提前終止訓(xùn)練,比如測試的損失函數(shù)達(dá)到一定范圍。










本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動(dòng)力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉