TensorFlow(Keras)中的正則化技術及其實現(附代碼)

2020-12-13 人工智慧研究院

了解用於緩解深度神經網絡內過度擬合問題的常規技術。

正則化

深度神經網絡(DNN)在體系結構內部具有大量的權重參數,可以學習一系列值。這些值的範圍是使神經網絡能夠解決龐大的複雜功能的關鍵。

神經網絡越深,其擁有的代表性越強,但是隨著權重參數數量的增加,就會出現一個缺點。缺點是神經網絡更容易過度擬合訓練數據集。

過度擬合:此問題涉及算法過於精確地預測在訓練過程中觀察和學習到的模式實例,從而預測向其呈現的模式的新實例。這可能導致機器學習算法無法準確地推廣到看不見的數據。如果訓練數據不能準確表示測試數據的分布,則可能會發生過度擬合。可以通過減少訓練數據中的特徵數量並通過各種技術降低網絡的複雜性來解決過度擬合問題

正則化技術通過限制網絡內權重值所保持的值範圍來減少神經網絡過度擬合的可能性(稍後會對此進行更多介紹)。

本文介紹了兩種對損失函數的結果施加約束條件的正則化策略。

損失函數是一種方法,量化「 如何 」機器學習模型執行。量化是基於一組輸入的輸出(成本),這些輸入稱為參數值。參數值用於估計預測,「損失」是預測與實際值之間的差。

本文將不關注正則化的數學。相反,本文介紹了一些標準的正則化方法以及如何使用TensorFlow(Keras)在神經網絡中實現它們。

有關數學的更多詳細信息,Raimi Karim和Renu Khandelwal的這些文章合理地介紹了L1和L2正則化數學。

正則化的類型

我們可以了解到正則化技術作用於神經網絡中的權重參數。更具體地說,它修改了結果損失函數,進而修改了產生的權重值。

l1正則化

L1正則化對神經網絡權重值的影響是,通過使權重值等於0來懲罰權重接近0的權重。因此,如果權重值為-2,則在L1正則化的作用下,權重值為0。

L1正則化的一般直覺是,如果權重值接近於0或非常小,那麼對於模型的整體性能而言可以忽略不計,因此將其設置為0不會影響模型的性能並可以減少內存模型的容量。

L1懲罰權重的絕對值之和(| weight |)我知道我說過我不會參加數學,但是下面的數學符號應該相對容易理解。

我們有損失函數,在這種情況下,是均方誤差。

然後,我們將權重的絕對值之和與正則化超參數值的乘積相加,該乘積由lambda符號()表示。

數學符號中的「 i 」表示當前權重的索引,「 n 」表示層中權重值的總數。「 W 」代表重量值。

L1正則化

L2正則化

L2正則化也會懲罰權重值。對於較小的權重值和相對較大的權重值,L2正則化將值轉換為接近0但不完全為0的數字。

l2懲罰權重的平方和(權重)

如果您要結合使用L1和L2正則化技術的效果,那麼您將獲得「彈性網正則化 」

正則化技術對訓練過程中的神經網絡產生影響,而不是推論。

現在,我們對正則化有了一些基本的了解(可以隨意探索這兩種方法的數學方法)和一些示例,讓我們看看它們是如何實現的。

實施正則化

第一步是導入用於實現或支持神經網絡實現的工具和庫。

TensorFlow:一個用於實施,培訓和部署機器學習模型的開源平臺。Keras:一個開放原始碼庫,用於實現可在CPU和GPU上運行的神經網絡體系結構。import tensorflow as tf

from tensorflow import keras

我們將使用的數據集是瑣碎的fashion-MNIST數據集。

fashion-MNIST數據集包含70,000件服裝圖像。更具體地說,它包括60,000個訓練示例和10,000個測試示例,它們都是尺寸為28 x 28的灰度圖像,分為十類。

數據集的準備工作包括通過將每個像素值除以255.0來歸一化訓練圖像和測試圖像。這會將像素值置於0到1的範圍內。

在此階段,還將創建數據集的驗證部分。在訓練期間利用該組數據集來評估網絡在各種迭代中的性能。

(train_images, train_labels),(test_images, test_labels) = keras.datasets.fashion_mnist.load_data()

train_images = train_images / 255.0test_images = test_images / 255.0validation_images = train_images[:5000]validation_labels = train_labels[:5000]

接下來,我們使用Keras順序API實現一個簡單的模型。我們模型中的隱藏層使用了多種正則化技術。

要將正則化器添加到層,只需將首選的正則化技術傳遞給該層的關鍵字參數'kernel_regularizer'。

Keras正則化實現方法可以提供代表正則化超參數值的參數。這在下面的某些層中顯示。

Keras提供了l1和l2正則化器的實現,我們將在下面的代碼片段的某些隱藏層中使用它們。此外,我們還包括一個同時利用l1和l2正則化的層。

這就是在神經網絡中實施各種正則化技術的全部內容。不太困難。

model = keras.models.Sequential([

keras.layers.Flatten(input_shape=[28,28]),keras.layers.Dense(200, activation='relu', kernel_regularizer=keras.regularizers.l1()), keras.layers.Dense(100, activation='relu', kernel_regularizer=keras.regularizers.l2(0.001)), keras.layers.Dense(50, activation='relu', kernel_regularizer=keras.regularizers.l1_l2(0.01)), keras.layers.Dense(10, activation='softmax')])

在下一個代碼段中,我們設置並指定優化算法來訓練實現的神經網絡,以及損失函數和超參數(例如學習率和曆元數)。

sgd = keras.optimizers.SGD(lr=0.01)

model.compile(loss="sparse_categorical_crossentropy", optimizer=sgd, metrics=["accuracy"])model.fit(train_images, train_labels, epochs=60, validation_data=(validation_images, validation_labels))

使用之前保留的測試數據進行模型性能的評估。

利用評估結果,您可以在觀察測試數據集評估的準確性之後,決定微調網絡超參數或進入生產。

model.evaluate(test_images,test_labels)

如果將損失函數的正則項從層中排除並針對相同數量的紀元進行訓練,則已實現的模型可能會在測試數據集上具有更好的性能。在具有數百萬個參數和更多功能的更深入的神經網絡中,更常使用正則化。

希望您現在對各種正則化技術以及如何實現它們有了直覺。探索神經網絡實施和培訓中的其他正則化方法(例如Dropout或Early Stoping)可能會很有趣。

相關焦點

  • Keras結合Keras後端搭建個性化神經網絡模型(不用原生Tensorflow)
    Keras是基於Tensorflow等底層張量處理庫的高級API庫。它幫我們實現了一系列經典的神經網絡層(全連接層、卷積層、循環層等),以及簡潔的迭代模型的接口,讓我們能在模型層面寫代碼,從而不用仔細考慮模型各層張量之間的數據流動。
  • TensorFlow 2.1指南:keras模式、渴望模式和圖形模式(附代碼)
    如你所知,在Tensorflow中,存在這樣的範例:首先定義計算圖,然後進行編譯(或將其移至GPU),然後運行它。這種範例非常好,從技術上來講很有意義,但是,一旦在GPU中擁有了模型,幾乎就不可能對其進行調試。這就是為什麼,自從TensorFlow 2.0以其Alpha版本發布以來已經過去了大約一年,我決定在TensorFlow 2.1與大家分享使用的體驗。
  • TensorFlow 2入門指南,初學者必備!
    請記住,這不是有關深度學習的文章,所以我希望您了解深度學習的術語及其背後的基本思想。我們將使用非常著名的數據集IRIS數據集探索深度學習的世界。廢話不多說,我們直接看看代碼。tensorflow as tffrom tensorflow.keras.layers import Densefrom tensorflow.keras.models import Sequential在這裡,我們從tensorflow
  • Keras和TensorFlow究竟哪個會更好?
    當你需要實現一個自定義的層或更複雜的損失函數時,你可以深入使用 TensorFlow,將代碼自動地與 Keras 模型相結合。 ▌Keras 通過 tf.keras 模塊構建到 TensorFlow 中
  • TensorFlow 2.0正式版官宣!深度集成Keras
    例如,谷歌新聞團隊在TensorFlow 2.0中啟用了基於BERT的語言理解模型,從而極大地改進了新聞報導的覆蓋率。TensorFlow 2.0提供易於使用的API和快速實現新想法的靈活性,模型訓練和服務被無縫地集成到現有的基礎架構中。
  • 基於Tensorflow\keras銀行卡識別
    :機器學習算法與Python精研 ,ID:AITop100】,經微信公眾號授權轉載,如需轉載原文作者聯繫來自:GitHub測試環境Ubuntu 18.04python 3.6.7numpy 1.16.4tensorflow-gpu
  • 使用tensorflow和Keras的初級教程
    https://keras.io/api/losses/用Python開發ANN我們將使用Kaggle的信用數據開發一個使用Jupyter Notebook的欺詐檢測模型。同樣的方法也可以在google colab中實現。
  • 基於RTX2060構建TensorFlow-gpu(keras)學習平臺
    開始菜單運行anaconda navigator檢查是否安裝了notebook(默認有安裝)三、安裝tensorflow/keras在激活的環境中安裝:1. 如果機器上有gpu,則安裝gpu版本,沒有GPU就安裝cpu版。
  • Keras入門系列教程:兩分鐘構建你的第一個神經網絡模型
    導入tf.kerastf.keras是TensorFlow實現的 Keras API規範。這是一個用於構建和訓練模型的高級API,其中包括對TensorFlow特定功能的一流支持,例如急切執行, tf.data pipeline和estimators。
  • tensorflow2.4的重大改進
    即tensorflow::tstring/TF_TString的連續數組。C-API函數TF_StringDecode,TF_StringEncode和TF_StringEncodedSize不再相關,已被刪除;請參閱core/platform/ctstring.hC中的字符串訪問/修改。
  • TensorFlow 1.9.0-rc0 升級 tf.keras 至 Keras 2.1.6 API
    該版本帶來了不少改進和新特性:Update tf.keras to the Keras 2.1.6 API.tfe.Network is deprecated. Please inherit from tf.keras.Model.
  • 這裡有一份TensorFlow2.0中文教程
    今年 3 月份,谷歌在 Tensorflow Developer Summit 2019 大會上發布 TensorFlow 2.0 Alpha 版。作為當前最為流行的深度學習框架,2.0 Alpha 版的正式發布引人關注。近兩個月,網上已經出現了大量 TensorFlow 2.0 英文教程。在此文章中,機器之心為大家推薦一個持續更新的中文教程,以便大家學習。
  • 詳解深度強化學習展現TensorFlow 2.0新特性(代碼)
    本文完整代碼資源連結:GitHub:https://github.com/inoryy/tensorflow2-deep-reinforcement-learning讀者也可以在TensorFlow文檔中對此做深入了解:https://www.tensorflow.org/tutorials/eager/eager_basics深度強化學習
  • 深度解讀TensorFlow,了解它的最新發展!
    Tensorboard是tensorflow內置的一個可視化工具,它通過將tensorflow程序輸出的日誌文件的信息可視化,使得tensorflow程序的理解、調試和優化更加簡單高效。Tensorboard的可視化依賴於tensorflow程序運行輸出的日誌文件,因而tensorboard和tensorflow程序在不同的進程中運行。
  • 用Keras+TensorFlow,實現ImageNet數據集日常對象的識別
    這些比賽大大地推動了在計算機視覺研究中的多項發明和創新,其中很多都是免費開源的。博客DeepLearningSandbox作者GregChu打算通過一篇文章,教你用Keras和TensorFlow,實現對ImageNet數據集中日常物體的識別。量子位翻譯了這篇文章:你想識別什麼?看看ILSVRC競賽中包含的物體對象。
  • 人工智慧算法:訓練神經網絡中的批量歸一化(附代碼)
    而且,如果您還沒有這樣做的話,本文將解釋BN的基本直覺,包括其起源以及如何使用TensorFlow和Keras在神經網絡中實現它。對於那些熟悉BN技術並且只想專注於實現的人,可以跳到下面的「代碼」部分。
  • 初學AI神經網絡應該選擇Keras或是Pytorch框架?
    Powerful,是深度學習入門的絕佳技術路線舉個tensorflow1.0的例子(偽代碼)定義Variable、constant、placeholder等。 初始化global_variables_initializersession回話狀態。
  • 使用Tensorflow和Python對產品評論進行二進位分類(附代碼)
    想想像亞馬遜這樣的公司,想從其網站,電子郵件,Facebook,Twitter,Instagram或博客上的評論中了解其客戶評論。如果他們僱用人們繼續閱讀他們的評論和反饋,會不會有效?自然語言處理(NLP)是一項出色的技術,可以非常高效地完成這項工作。本文介紹了對產品評論數據集進行二進位分類的過程。
  • 機器學習:TensorFlow 2.0中的10個技巧
    ImageDataGenerator這是tensorflow.keras API的最佳特性之一。ImageDataGenerator可以在batching和預處理中實時生成數據集切片和數據增強。生成器允許直接從目錄或dataframes中訪問數據流。關於ImageDataGenerator中的數據增強的一個誤解是,它會將更多數據添加到現有數據集中。
  • TensorFlow 2.X,會是它走下神壇的開始嗎?
    深度學習框架,總是跟隨前沿 DL 技術的進步而改變。不過今天並不是討論深度學習框架的演變,而只是單純分享一下在算法工程中,使用 TensorFlow 遇到的各種問題與感想。你會驚奇地發現,它們的 TensorFlow 導入都是這種風格:import tensorflow.compat.v1 as tfimport tensorflow.compat.v2 as tf其中,「compat」是 TF2.X 專門為兼容 TF 1.X 配置的模塊。目前,還是有很多前沿研究,放不下 TF 1.X。