[譯]我做爲軟件工程師與一名數據科學家合做的經歷

Photo by Daniel Cheung on Unsplashhtml

本文我將談一談我做爲一名 Java/Kotlin 工程師與一位數據科學家共事的經歷。前端

背景

在 2017 年,機器學習領域激發了個人興趣。我曾談及過我入門時的經歷。總的來講,它充滿了有趣的挑戰同時也教給了我大量的知識。我是一名安卓工程師,這是我與一位數據科學家共事一項關於機器學習項目的工做經歷。java

我記得我曾經試圖解決一個出如今我司一款應用中有關圖像分類的問題,咱們須要根據一組已定義的規則去辨別有效與無效的圖像。我當即從 Deeplearning4J(dl4j)中改進了這個案例,而且試圖用它去處理這個分類任務。雖然我沒有得到預期的結果,但我保持着樂觀心態。android

因爲最終得到的訓練模型的大小存在問題,我使用 dlf4j 中示例代碼的方法沒有奏效。之因此失敗,是由於咱們須要一個可以達到壓縮文件大小的模型,這對移動設備來講特別重要。ios

數據科學家的加入

Photo by rawpixel on Unsplashgit

就在這個時候,咱們聘請了一位數據科學家,他擁有很是豐富的相關經驗,我後來從他那裏學到了不少。當發現大部分機器學習的問題能夠經過 Python 解決時,我只好不情願地學起了這門語言的基礎知識。後來我發現不少問題使用Python更容易實現,這是因爲 Python 社區對機器學習提供了巨大的支持。github

咱們從小型課堂學起,就在這時,咱們團隊的其餘成員也由於興趣加入了進來。數據科學家向咱們介紹了Jupyter NotebooksCloud Machine Learning Engine。咱們當即行動起來,着手嘗試這個使用花卉的數據集來進行圖像分類的案例。後端

當全部團隊成員都掌握了訓練和部署模型的基礎知識後,咱們邁向那些等待解決的問題。做爲團隊成員,我目前專一於兩項任務:圖像分類和分割問題,它們以後都將經過卷積神經網絡(CNNs)來實現。數組

準備訓練數據並不簡單

Photo by Jonny Caspari on Unsplash網絡

這兩項任務都須要大量的訓練數據。好消息是咱們已經擁有了不少數據,但壞消息是它們都是未排序或未註釋的。我終於明白了機器學習專家所說的:機器學習的大量時間都花費在準備訓練數據而不是訓練模型自己。

爲了圖像分類任務,咱們須要將數十萬的圖像分門別類,這是一項單調的工做,我不得不借助我 Java Swing 的技能來編寫一些用戶圖形界面來使這項工做簡單一些。總而言之,這項任務對於任何參與者都是枯燥無聊的。

分割過程更復雜一點兒。幸運的是,咱們找到了一些易於分割的模型,但不幸的是,它們太大了。同時,咱們還想讓模型可以在較低版本的安卓設備上運行。那位數據科學家靈光一閃,他建議咱們使用這個大模型來生成訓練數據,再使用這些數據來構建咱們本身的移動網絡。

訓練

咱們最終轉向了 AWS Deep Learning AMI。AWS 使咱們感到省心,它提供的這項服務更爲方便。訓練圖像分割模型的過程由咱們的數據科學家全權負責,而我就站在他身邊,書寫筆記 :)

這些不是真實的日誌,哈哈。

訓練模型是一項計算密集的任務,這讓我理解了用於訓練的計算機擁有充足的 GPU 和 RAM 的重要性。這次訓練的時間很短,由於咱們使用了這樣的計算機集羣,若是使用普通計算機,這將花費幾周甚至幾個月的時間。

我處理了圖像分類模型的訓練,沒必要在雲服務上訓練它,事實上,我使用了我本身的 MacBook Pro。這是由於相較於爲分割模型所作的全網絡訓練,我只訓練了神經網絡的最後一層。

部署生產環境

在通過嚴格測試後,兩項模型都部署在了咱們的生產環境。一名團隊成員負責構建 Java 包裝類庫,這樣是爲了使這些模型可以以一種抽象的方式被使用,這種方式抽象化了向模型提供圖像和從張量中提取有效結果的複雜性。這是一個包含了模型對單個圖像所作的預測的結果集。這個階段中我也參與了一些工做,優化和重構了我曾經寫過的一些代碼。

挑戰無處不在

挑戰使生活充滿趣味,打敗它們使生活更有意義。 ——佚名

我依然記得最大的挑戰是三維數組,我須要十分謹慎地處理它們。與咱們的數據科學家一同研究機器學習項目鼓舞着我繼續機器學習之路。

在爲這些項目工做時,我遇到的最大的挑戰是試圖使用 Bazel 從源碼中構建用於 32 位系統的 Tensorflow Java 類庫,遺憾的是,我始終沒有成功。

我也經歷了其餘一些挑戰,有一項比較常見:將Python的解決方案翻譯爲 Java。因爲 Python 已經內置了對於數據科學任務的諸多支持,因此 Python 代碼更簡潔。我依然記得當我試圖逐字翻譯一條命令時的緊張:scaling a 2D array and adding it as a transparent layer to an image。最終指令生效了,你們興奮異常。

如今,一般狀況下這些模型在生產環境運行穩定,可是一旦它產生了錯誤結果,將會錯得很是離譜。這讓我想起了我在一篇優秀文章中讀到的關於如何將機器學習模型投入真實生產和服務的引言:

若是不持續提供新數據,模型的質量將會很快下降。正如漂移概念所說的,隨着時間的推移,靜態機器學習模型提供的預測將變得再也不那麼準確和有效。某些狀況下,這甚至可能在幾天內發生。— David Talby

這意味着咱們不得不保持模型優化,且沒有終點,這聽上去頗有趣。


我不肯定我可否被稱之爲機器學習新手,由於我更關注移動開發。與機器學習團隊共同研究訓練模型來爲公司解決問題的這段經歷,讓我十分激動。我期待下一次機會。

感謝 TDS Team 和 Alexis McKenzie。

若是發現譯文存在錯誤或其餘須要改進的地方,歡迎到 掘金翻譯計劃 對譯文進行修改並 PR,也可得到相應獎勵積分。文章開頭的 本文永久連接 即爲本文在 GitHub 上的 MarkDown 連接。


掘金翻譯計劃 是一個翻譯優質互聯網技術文章的社區,文章來源爲 掘金 上的英文分享文章。內容覆蓋 AndroidiOS前端後端區塊鏈產品設計人工智能等領域,想要查看更多優質譯文請持續關注 掘金翻譯計劃官方微博知乎專欄

相關文章
相關標籤/搜索