當前位置:
首頁 > 新聞 > 你在數據預處理上花費的時間,是否比機器學習還要多?

你在數據預處理上花費的時間,是否比機器學習還要多?

雷鋒網按:本文作者 Stefan Maetschke 為 IBM 機器學習架構模型專家,根據自身工作經歷向大家推薦這款全新的數據預處理工具。雷鋒網編譯。

Nuts-ml 是一個新的 Python 數據預處理庫,專門針對視覺領域的 GPU 深度學習應用。 它以獨立、可復用的單元模塊的形式,提供主流數據預處理函數。前者便是「nuts-ml」 里的 「nuts」,開發者可自由將其排列組合,創建高效、可讀性強、方便修改的數據流。

對於機器學習項目,數據預處理都是基礎。相比實際的機器學習,開發者花在數據預處理上的時間往往還要更多。有的數據預處理任務只針對特定問題,但大多數,比如把數據分割為訓練和測試組、給樣本分層和創建 mini-batch 都是通用的。下面的 Canonical 流水線展示了深度學習視覺任務常見的處理步驟。

Reader 讀取文本文件、 Excel 或 Pandas 表格中的樣本數據。接下來 Splitter 把數據分割為訓練、驗證和測試集,如需要再進行分層。一般情況下,並不是所有圖像數據都能載入內存,於是,我們需要 Loader 按需導入。這些圖像一般由 Transformer 進行處理,以修改尺寸、截圖或做其它調整。另外,為增加訓練集, Augmenter 會隨機選取圖像進行擴充(比如翻轉),以合成額外圖像。基於 GPU 的高效率的機器學習,需要用 Batcher 把圖像和標籤數據編成 mini-batch。隨後導入 Network 進行訓練或者推理。最後,為追蹤訓練過程,一般我們會用 Logger 來把訓練損失或精度記錄到 log 文件。

有些機器學習框架,比如 Keras,就在 API 中提供了這些預處理模塊。若與任務的匹配程度高,這就能大幅簡化神經網路的訓練。請見下面的用 keras 訓練採用了數據擴充(augmentation)的模型。


datagen = ImageDataGenerator( # augment images

width_shift_range=0.1,

height_shift_range=0.1,

horizontal_flip=True)

datagen.fit(x_train)

model.fit_generator(datagen.flow(x_train, y_train, batch_size=batch_size),

steps_per_epoch=x_train.shape[0]

epochs=epochs,

validation_data=(x_test, y_test))

但如果,深度學習框架的 API 沒有提供圖像格式、數據擴充等預處理功能呢?

擴展 Keras 這樣的庫並不是一個輕鬆的活兒。常見的解決方案是簡單粗暴地(重新)實現所需功能。但實現一個強魯棒性的數據流水線,能按需載入、轉換、擴充、處理圖像仍然很具挑戰性,並且有很高時間成本。

這便要 nuts-ml 上場了。

如開頭介紹的,nuts-ml是一個 Python 庫,它提供了常見的預處理函數,即所謂的 「nuts」,能自由排列並且輕鬆擴展,以創建高效的數據預處理流水線。下面是節選的一段 nuts-ml 示例代碼,展示了訓練神經網路的流水線,>> 指示操作流。


t_loss = (train_samples >> augment >> rerange >> Shuffle(100) >>

build_batch >> network.train >> Mean)

print "training loss :", t_loss

上面的示例中,訓練圖像被擴充,像素值被重新分配,樣本在創建訓練網路的 batch 之前被打亂順序。最後,batch 的平均訓練損失被分批計算、列印出來。組成該數據流的 nuts 可如下定義:


rerange = TransformImage(0).by("rerange", 0, 255, 0, 1, "float32")

augment = (AugmentImage(0)

.by("identical", 1.0)

.by("brightness", 0.1, [0.7, 1.3])

.by("fliplr", 0.1)))

build_batch = (BuildBatch(BATCH_SIZE)

.by(0, "image", "float32")

.by(1, "one_hot", "uint8", NUM_CLASSES))

network = KerasNetwork(model)

重分配(rerange)是一個把 [0, 255] 區間的像素值轉化為 [0, 1] 區間的圖像轉換過程。數據擴充生成用於訓練的額外圖像。build_batch 創建由圖像和 one-hot 編碼的類標籤組成的 batch。神經網路把現有 Keras 模型封裝為一個 nut,後者能插入進流水線。該示例的完整代碼在這裡。

Nuts-ml 的作用,是幫助開發者在深度學習任務重更快地創建數據預處理流水線。產生的代碼根據可讀性,修改後還可試驗不同的預處理方案。針對特定任務的函數可方便地作為 nuts 實現並添加進數據流。下面就是一個調整圖像亮度的簡單 nut:


@nut_function

def AdjustBrightness(image, c):

return image * c

... images >> AdjustBrightness(1.1) >> ...

Nuts-ml 本身並不能進行神經網路的訓練,而是藉助於 Keras、Theano 等已有的庫來實現。任何能接受 Numpy 陣列的 mini-batch 用來訓練、推理的機器學習庫,都與它兼容。

via kdnuggets,雷鋒網編譯

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 雷鋒網 的精彩文章:

耶魯大學終身教授邵中:「沒有 bug」的操作系統是如何煉成的?| GAIR 2017
京東智慧物流全體成員亮相ICRA,新成員倉儲巡檢無人機曝光
作為一個學術會議,ICRA舉辦了一個「接地氣」的自動駕駛論壇
再現「豬隊友」,CNX公司意外曝光英特爾新處理器

TAG:雷鋒網 |

您可能感興趣

騎士:對不起,我不該糾結選哪個辣妹的問題上花費太多時間,要不然打綠衫軍也不會輸
愛,就是花費了時間
花費時間多,訓練效果不一定好,掌握技巧才是關鍵
挽回是一件需要花費時間和功夫的事,你要學會有耐心
學員故事|我們花費的時間精力和金錢是值得的!
把時間花費在美好的事物上,你才會更美
人常犯的一個錯,就是花費時間去在乎不怎麼在乎你的人!
我用一天的時間就愛上你,卻要花費一輩子的時間來忘記你!
未來人人都可以上太空,花費和坐一次飛機差不多,你相信嗎?
懶人必養的幾種花,不用花費太多時間,花卉可以保持很久!
裝修別在這些地方花費太多,時間長了你就發現根本沒必要!
大學四年的花費,仔細一算總數不敢想像,算完你真該沉默了
那些成功的人,都把時間花費在這四件事上,怪不得混那麼好
如果遇上的那個人是對的,一定不需要你花費那麼多技巧辛苦來維繫
他花費250小時,完成的超逼真素描作品,我們還有什麼理由不努力!
你花費那麼多心思設計一件衣服,卻比不上一個有趣的細節
不抽時間創造自己想要的生活,就要花費大量的時間,應付不想要的生活
想花費最短的時間減最多的肥嗎?學會這個你就可以!
談戀愛期間,所有的花費都應該男人來買單,這樣真的好嗎?
GPS導航軟體竟然是需要花費的,你貢獻了多少?說出來你都不敢相信