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

CY7C65215使用IOS中的USB CDC UART類驅動程序是否可以與IOS一起工作?
工程師經驗分享:社區之星 趙云 沉著穩定才能做好技術

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

嵌入式軟件工程師就業好不好?
如何成為嵌入式開發工程師?

ADC08D500要一起工作做Interleaving的話,需要在ADC CLK Input端各接一個Delay Line IC對嗎?
使用MATLAB培養醫療人工智能領導者和增強工程課程

AI for Science:人工智能驅動科學創新》第4章-AI與生命科學讀后感

評論