軟件工程師和數(shù)據(jù)科學(xué)家一起工作時(shí),會(huì)擦出什么火花呢?
作為Java / Kotlin開發(fā)人員,一位名叫Ben Danial的小哥為我們講述了他與數(shù)據(jù)科學(xué)家合作的有趣經(jīng)歷。
在一年中,這位小哥從零開始學(xué)習(xí)機(jī)器學(xué)習(xí),和數(shù)據(jù)科學(xué)家不斷交流合作,一起碼出了一個(gè)機(jī)器學(xué)習(xí)模型的原型,并成功把這個(gè)模型做上線。真是成就滿滿呢!
前情提要
大家好,我叫Ben Daniel,是一名安卓工程師。2017年末,我開始對(duì)機(jī)器學(xué)習(xí)領(lǐng)域產(chǎn)生興趣。機(jī)器學(xué)習(xí)這個(gè)領(lǐng)域充滿了有趣的挑戰(zhàn),因此也就需要大量的學(xué)習(xí)。今天,我就給大家講述我和我司數(shù)據(jù)科學(xué)家一起攻克機(jī)器學(xué)習(xí)難題的經(jīng)歷。
我還記得,我曾試圖解決我們的某個(gè)應(yīng)用程序中出現(xiàn)的圖像分類問題。我們需要根據(jù)一組規(guī)則區(qū)分有效和無效圖像。于是我從深度學(xué)習(xí)領(lǐng)域中修改了dl4j這個(gè)例子,并試圖用它來處理分類任務(wù)。雖然結(jié)果不夠理想,但是我的心態(tài)還不錯(cuò)。畢竟第一次嘗試嘛。
Dl4j例子鏈接:
https://github.com/deeplearning4j/dl4j-examples/blob/master/dl4j-examples/src/main/java/org/deeplearning4j/examples/convolution/AnimalsClassification.java
由于精度和最終模型的大小不符,我使用dl4j代碼的方法是不可取的。面向移動(dòng)設(shè)備,我們需要一個(gè)文件大小緊湊的模型,很遺憾,這個(gè)功能無法實(shí)現(xiàn)。
數(shù)據(jù)科學(xué)家來啦
正巧,這個(gè)時(shí)候,我們聘請(qǐng)了一位數(shù)據(jù)科學(xué)家,他帶來了許多有趣的經(jīng)驗(yàn),也教會(huì)我們很多。我逐漸發(fā)現(xiàn),大多數(shù)機(jī)器學(xué)習(xí)問題都可以通過Python解決,而且Python社區(qū)中已經(jīng)有了對(duì)機(jī)器學(xué)習(xí)的巨大支持。雖然不太情愿,但我還是開始了Python的學(xué)習(xí)。
我從小型的機(jī)器學(xué)習(xí)課程開始學(xué)起。與此同時(shí),我的其他團(tuán)隊(duì)成員也很感興趣,并一起加入了學(xué)習(xí)的大軍。新入職的數(shù)據(jù)科學(xué)家向我們介紹了Jupyter notebook和云機(jī)器學(xué)習(xí)引擎。我們通過使用花卉數(shù)據(jù)集示例嘗試圖像分類,并很快沉迷其中。
在團(tuán)隊(duì)中的每個(gè)人都接受了培訓(xùn)和模型的基礎(chǔ)知識(shí)后,我們開始處理文章開始提到的遺留問題。作為一名團(tuán)隊(duì)成員,我主要專注于兩項(xiàng)任務(wù):圖像分類問題和圖像分割問題。之后,這兩個(gè)問題都被我們用卷積神經(jīng)網(wǎng)絡(luò)(CNN)解決了。
準(zhǔn)備訓(xùn)練數(shù)據(jù)真心難
這兩項(xiàng)任務(wù)(圖像分類問題和圖像分割問題)都需要大量的訓(xùn)練數(shù)據(jù)。我有兩個(gè)消息——好消息是我們的確有很多數(shù)據(jù)。壞消息是它們要么是未分類要么是未注釋。我終于明白了機(jī)器學(xué)習(xí)專家們所說的,機(jī)器學(xué)習(xí)項(xiàng)目中大部分時(shí)間將用來準(zhǔn)備訓(xùn)練數(shù)據(jù)而不是訓(xùn)練模型本身。
對(duì)于圖像分類分類問題,我們需要將數(shù)十萬個(gè)圖像排列成不同的類。這是一項(xiàng)繁瑣的工作。我不得不調(diào)用我的Java Swing技能,來構(gòu)建使這項(xiàng)任務(wù)更容易的GUI,但總的來說,標(biāo)記數(shù)據(jù)這個(gè)任務(wù)真的很單調(diào),很無聊。
分割問題就要復(fù)雜一些了。我們很幸運(yùn)地發(fā)現(xiàn)了一些擅長(zhǎng)分割的模型,但不幸的是,這些模型太占內(nèi)存了。我們還希望該模型能夠在規(guī)格非常低的安卓設(shè)備上運(yùn)行。這時(shí),數(shù)據(jù)科學(xué)家建議我們使用龐大的模型來生成數(shù)據(jù),用以構(gòu)建我們自己的移動(dòng)網(wǎng)絡(luò)。
訓(xùn)練
我們最終切換到了AWS Deep Learning AMI。訓(xùn)練圖像分割模型的過程完全由我們的數(shù)據(jù)科學(xué)家處理,我只需要站在他身邊,做筆記嘻嘻:)。
(其實(shí)我不在記筆記,哈哈哈哈哈哈哈哈)
訓(xùn)練這個(gè)模型是一項(xiàng)計(jì)算密集型任務(wù),需要足夠GPU和RAM。我們便采用了GPU和RAM,因此很快就完成了模型訓(xùn)練。如果不是這樣的話,我們可能要花費(fèi)數(shù)月來訓(xùn)練這個(gè)模型。
我負(fù)責(zé)了圖像分類模型的訓(xùn)練。不過,我并沒有在云上訓(xùn)練,而是只在我的Macbook pro上訓(xùn)練。這是因?yàn)?,我只是?xùn)練神經(jīng)網(wǎng)絡(luò)的最后一層,而不是我們?yōu)榉指钅P退龅娜W(wǎng)絡(luò)訓(xùn)練。
順利完成!
兩種模型經(jīng)過嚴(yán)格的測(cè)試后,都成功進(jìn)入了我們的產(chǎn)品線。在這一步,團(tuán)隊(duì)成員的任務(wù)是構(gòu)建Java wrapper庫。這樣一來,我們就可以把模型繁復(fù)的細(xì)節(jié)隱藏起來。在使用時(shí),我們只需輸入圖片,這個(gè)wrapper庫就會(huì)輸出一個(gè)概率 張量,也就是模型在單個(gè)圖像上預(yù)測(cè)的結(jié)果數(shù)組。我也參與了這一過程,因?yàn)槲抑暗囊恍懘a經(jīng)驗(yàn)有用武之地。
人生處處是挑戰(zhàn)
“挑戰(zhàn)讓生活變得有趣,克服挑戰(zhàn)則讓生活變得有意義”。
在這個(gè)項(xiàng)目中,我面臨的最大挑戰(zhàn)是嘗試使用Bazel從源代碼構(gòu)建用于32位系統(tǒng)的Tensorflow Java庫。整個(gè)過程實(shí)在是跌跌撞撞。
我也遇到過其他挑戰(zhàn),比如,將Python解決方案轉(zhuǎn)換為Java。由于Python已經(jīng)內(nèi)置了對(duì)數(shù)據(jù)科學(xué)任務(wù)的支持,因此Python中的代碼感覺更加簡(jiǎn)潔。每次在嘗試逐字翻譯命令時(shí),我都會(huì)抓耳撓腮。比如,縮放2D陣列并將其作為透明層添加到圖像中這一步就異常艱難。不過我們最終把這事兒搞定了!
現(xiàn)在我們上線的模型表現(xiàn)很好,但是當(dāng)它們產(chǎn)生錯(cuò)誤的結(jié)果時(shí),那些錯(cuò)誤的結(jié)果是荒謬無比的。
它讓我想起了我之前讀過的一句話:
“...如果沒有源源不斷的新數(shù)據(jù),模型質(zhì)量會(huì)迅速降低。這是著名的概念漂移(concept shift),這意味著,隨著時(shí)間的推移,靜態(tài)機(jī)器學(xué)習(xí)模型提供的預(yù)測(cè)變得不那么準(zhǔn)確,并且不太有用。在某些情況下,甚至可能在幾天內(nèi)發(fā)生。 - David Talby
因此,我們必須不斷改進(jìn)模型,并且永遠(yuǎn)得不到一個(gè)一勞永逸的模型。其實(shí)還挺有趣的。
因?yàn)槲冶救酥饕P(guān)注移動(dòng)開發(fā),所以我甚至不確定自己有資格被稱為機(jī)器學(xué)習(xí)的新手。然而,通過與數(shù)據(jù)科學(xué)家的合作,我在今年成功上線了一個(gè)機(jī)器學(xué)習(xí)模型?;叵肫饋?,相當(dāng)激動(dòng)呢!
-
神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
42文章
4814瀏覽量
103622 -
機(jī)器學(xué)習(xí)
+關(guān)注
關(guān)注
66文章
8503瀏覽量
134622 -
數(shù)據(jù)科學(xué)
+關(guān)注
關(guān)注
0文章
168瀏覽量
10489
原文標(biāo)題:業(yè)界 | 當(dāng)軟件工程師第一次與數(shù)據(jù)科學(xué)家一起工作……
文章出處:【微信號(hào):BigDataDigest,微信公眾號(hào):大數(shù)據(jù)文摘】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
數(shù)字信號(hào)處理,科學(xué)家與工程師指南(664頁)

硬件工程師看了只會(huì)找個(gè)角落默默哭泣#硬件工程師 #MDD #MDD辰達(dá)半導(dǎo)體 #產(chǎn)品經(jīng)理 #軟件工程師
CY7C65215使用IOS中的USB CDC UART類驅(qū)動(dòng)程序是否可以與IOS一起工作?
工程師經(jīng)驗(yàn)分享:社區(qū)之星 趙云 沉著穩(wěn)定才能做好技術(shù)

如何成為一名嵌入式軟件工程師?

嵌入式軟件工程師就業(yè)好不好?
如何成為嵌入式開發(fā)工程師?

不同時(shí)期的硬件工程師,最怕發(fā)生的事 #電子工程師 #硬件工程師 #內(nèi)容過于真實(shí) #YXC晶振 #揚(yáng)興科技
ADC08D500要一起工作做Interleaving的話,需要在ADC CLK Input端各接一個(gè)Delay Line IC對(duì)嗎?
使用MATLAB培養(yǎng)醫(yī)療人工智能領(lǐng)導(dǎo)者和增強(qiáng)工程課程

當(dāng)你的工程師朋友失聯(lián)時(shí),別氣,ta真的是在忙工作 #搞笑 #電子愛好者 #硬件工程師 #晶振 #揚(yáng)興科技
AI for Science:人工智能驅(qū)動(dòng)科學(xué)創(chuàng)新》第4章-AI與生命科學(xué)讀后感

評(píng)論