在機器學習模型的訓練期間,大概幾十分鐘到幾小時不等,大家都會在等實驗的時候做什麼?
我覺得我等實驗的時候好像都沒做什麼有意義的事情,感覺浪費不少時間。但是去做某一件事情的時候,又不知道實驗什麼時候結束了。糾正一下,問題裡面泛指的是ML的,不一定是DL。如果是DL的話,幾天可能是有的,這麼長的時間不至於會廢掉的。(蒙臉)
問TF的,問代碼的……我寫了個例子在這裡利用微信監管你的TF訓練 - 知乎專欄
——————————————————————————————————
不知道有哪些朋友是在TF/keras/chainer/mxnet等框架下用python擼的….…
這可是python啊……上itchat,弄個微信號加自己為好友(或者自己發自己),訓練進展跟著一路發消息給自己就好了,做了可視化的話順便把圖也一併發過來。
然後就能安心睡覺/逛街/泡妞/寫答案了。
講道理,甚至簡單的參數調整都可以照著用手機來……
大體效果如下
當然可以做得更全面一些。最可靠的辦法自然是乾脆地做一個http服務或者一個rpc,然而這樣往往太麻煩。本著簡單高效的原則,幾行代碼能起到效果方便自己當然是最好的,接入微信或者web真就是不錯的選擇了。只是查看的話,TensorBoard就很好,但是如果想加入一些自定義操作,還是自行定製的。echat.js做成web,或者itchat做個微信服務,都是挺不賴的選擇。
能盯著loss看一個小時,想像自己就是搜索點。
然後幻想自己是個遊戲里的小人在山谷里摸索,到處都是戰爭迷霧,我的視野還特別小。
看到帶周期波動的下降就會感覺自己在一個圓筒的滑梯里忽左忽右的出溜。
看到上升就會突然緊張,再瞄一下acc比較train和val,像一個賭徒企圖從絕望中看到希望。loss再度下降時會產生強烈的快感,覺得艱難地翻過了一座小山。
快要收斂時安慰自己,前方還會有深淵。
最後收斂時告訴自己,就是這裡了,我累了。
然後休息一下,分析分析,終於決定:
算了再加一層吧……
我擦,就我一個人有強迫症不停地偷瞄val_loss嗎,有時候在外面還會用手機遠程訪問看一下,當然有些時候根據前面的迭代結果就可以提前終止訓練調參了,然而更多時候是心神不寧,就跟看股票價格似的,賊難受
不過如果確定穩了之後還是該幹嘛幹嘛了模型訓練的時間有長有短。如果只是幾分鐘,那麼還是可以在一個工作時間段內反覆修改、比較的。在這樣的幾分鐘之內,頂多也就刷幾頁知乎(但應該來不及回答問題)、看一個YouTube視頻了。
比較慢的模型,往往要跑一兩天。如果代碼是已經確定沒問題的,只是需要最後測一個準確率數字,那麼這一兩天就自由了,可以把精力從程序上移開了。比如可以去看幾篇論文,或者處理一些屁事,也可以去看小說、寫長篇知乎答案,甚至騎車出去逛悠了。
最痛苦的,則是剛寫好一個需要跑很久的程序,又不確定它的性能如何,甚至代碼中有沒有低級錯誤的時候。這時就要盯著程序的輸出,隨著準確率或是誤差的升升降降而或喜或悲,如同炒股一般。有時看到連續幾次迭代下來,性能都在提高,以為可以不用盯著看了,但下一分鐘突然想到一個地方可能寫錯了,又急急忙忙去查看代碼,生怕前面幾個小時白跑了。《種樹郭橐駝傳》里那句「旦視而暮撫,已去而復顧」,說的就是這種狀態吧。我之前的導師稱之為「babysitting a program」,我覺得形象極了。不停的看準確率和loss,像看球賽一樣刺激。特別是用tensorboard的時候,不停地點右上角的刷新。
常常一邊寫著新model的代碼,一邊不停的切回來看。
內心的OS包括:我去,這個開頭漲勢強勁呀,看好你我的小網路。
這一個iteration學的真好!不愧是我的網路!
艹,怎麼不漲了,累了嗎?
好好好,強勢重啟了!你要是學好了我2點前就能睡覺了。
That"s right. That"s my baby!
親愛的別浮躁,不要這麼早開始overfit呀。
loss別升了!再升我就要kill你了!
媽的,行行好吧我的網路,怎麼就不學好啊?
滾吧再也不要你了。我去找別的網路了。
每當腳本開始運行後就會進入聖賢狀態--發現代碼原來有寫錯或者可以改進的地方!(主要是水平太爛)然後趕緊Ctrl+c,改腳本再運行,如此反覆⊙︿⊙
最終改好以後根據前幾個epoch的耗時估算總耗時(腳本內實現)
三個小時以內就去看電影或者壓馬路,手機遠程連接不時看看val_loss
四個小時以上就睡覺去~
更新!
用微信監視並控制keras訓練!
https://zhuanlan.zhihu.com/p/25670072?utm_source=wechat_timelineutm_medium=socialfrom=timeline
https://github.com/QuantumLiu/wechat_callback
更新:有不少人私聊我要代碼,可以參考這篇文章Caffe學習筆記-使用Email控制網路訓練 - 知乎專欄郵件控制的功能主要因為工作站的原因,需要中轉。不過大致思路如文中所寫。過幾天來留github鏈接
以前不知道怎麼把輸出信息列印到txt上(小白)。真的和看股票一樣一直在看loss等輸出信息。後來有拿捏不好的參數 多開幾個程序跑不同參數 ,結果列印到txt上。自己寫了個腳本每次訓練結束繪製loss曲線等 然後將圖片發送到我郵箱。
所以說在訓練的時候我比較自由。
補充:後來寫了一個腳本,郵件回復參數,網路開始以新的參數再次訓練。徹底解放了我
畢竟上有領導要陪。
這問題好有意思,我一般都是等幾分鐘,那就回一回郵件,刷一刷知乎。
- 看一看paper
- 查收下email
- 掃一眼arxiv
- 逛一圈reddit
- 檢查下github
- if 實驗結束 and 結果好,記錄結果 break
- else goto step 1
超過五個小時就出去浪,超過一天就去外地浪,超過一個禮拜就去更遠的地方浪
春天裡來百花香,浪里個浪里個浪里個浪這就是你為什麼看見這條回答的原因─=≡Σ(((つ??ω??)つ
如果我有發現自己多次遇到「但是去做某一件事情的時候,又不知道實驗什麼時候結束了」的困惑的話,我會覺得我缺一個腳本把跑完實驗的結果發郵箱(或者發手機提示)什麼的。然後接下來幾天里我等實驗的時候會去完善這個腳本。
那你的實驗算是跑的挺快的了……我的好多訓練要跑一兩天,到幾天的都有。
一般並行工作,這時候去寫別的實驗的代碼,或者看paper。
你大概估計個差不多跑完的時間然後回來看就行了。刷知乎
寫其他項目代碼比如我們平台的sdk,team人不多 除了平台,sdk,演算法,我之前還幫忙測試 還有有實習生幫忙,對了 還有爬數據
那種說能去看劇的太羨慕啦陰陽師吧,小號帶大號刷探索
做項目,干別的活。。。
問了個很關鍵的問題,我經常是會為接下來的工作做些準備,比如結果出來後,我可能要驗證,要幹嘛,做些後續工作。
坐在實驗室里看負載統計
有效緩解焦慮, 提神醒腦, 給你繼續debug的動力
推薦閱讀:
※為什麼同樣是解決一個問題,別人就能想出演算法,而我卻絞盡腦汁,百般嘗試也不得其法?
※蒙特卡羅演算法是什麼?
※有哪些令人拍案叫絕的演算法?
※大公司筆試面試有哪些經典演算法題目?
※ACM 中常用的演算法有哪些?