成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

利用Keras中的權重約束減少深度神經網絡中的過擬合

人工智能 深度學習
在本教程中,您將發現Keras API,用于向深度學習神經網絡模型添加權重約束以減少過度擬合。

[[333587]]

 權重約束提供了一種方法,用于減少深度學習神經網絡模型對訓練數據的過度擬合,并改善模型對新數據(例如測試集)的性能。有多種類型的權重約束,例如最大和單位向量規范,有些需要必須配置的超參數。

在本教程中,您將發現Keras API,用于向深度學習神經網絡模型添加權重約束以減少過度擬合。

完成本教程后,您將了解:

  •  如何使用Keras API創建向量范數約束。
  •  如何使用Keras API為MLP,CNN和RNN層添加權重約束。
  •  如何通過向現有模型添加權重約束來減少過度擬合。

教程概述

本教程分為三個部分,他們是:

  •  Keras的重量約束
  •  圖層上的權重約束
  •  體重約束案例研究

Keras的重量約束

Keras API支持權重限制。約束是按層指定的,但是在層中應用和強制執行每個節點。

使用約束通常涉及在圖層上為輸入權重設置kernel_constraint參數,并為偏差權重設置bias_constraint。

通常,權重約束不用于偏差權重。一組不同的向量規范可以用作約束,作為keras.constraints模塊中的類提供。他們是:

  •  最大范數(max_norm),用于強制權重等于或低于給定限制。
  •  非負規范(non_neg),強制權重具有正數。
  •  單位范數(unit_norm),強制權重為1.0。
  •  Min-Max范數(min_max_norm),用于強制權重在一個范圍之間。

例如,一個簡單的約束可以這樣被引入和實例化: 

  1. # import norm  
  2. from keras.constraints import max_norm  
  3. # instantiate norm  
  4. norm = max_norm(3.0)  
  5. # import norm  
  6. from keras.constraints import max_norm  
  7. # instantiate norm  
  8. norm = max_norm(3.0) 

圖層上的權重約束

權重規范可用于Keras的大多數層。在本節中,我們將看一些常見的例子。

MLP加權約束

以下示例在密集完全連接層上設置最大范數權重約束。 

  1. # example of max norm on a dense layer  
  2. from keras.layers import Dense  
  3. from keras.constraints import max_norm  
  4. ...  
  5. model.add(Dense(32, kernel_constraint=max_norm(3), bias_constraint==max_norm(3)))  
  6. ...  
  7. # example of max norm on a dense layer  
  8. from keras.layers import Dense  
  9. from keras.constraints import max_norm  
  10. ...  
  11. model.add(Dense(32, kernel_constraint=max_norm(3), bias_constraint==max_norm(3)))  
  12. ... 

CNN加權約束

下面的示例在卷積層上設置最大范數權重約束。 

  1. # example of max norm on a cnn layer  
  2. from keras.layers import Conv2D  
  3. from keras.constraints import max_norm 
  4. ...  
  5. model.add(Conv2D(32, (3,3), kernel_constraint=max_norm(3), bias_constraint==max_norm(3)))  
  6. ... 

RNN權重約束

與其他圖層類型不同,遞歸神經網絡允許您對輸入權重和偏差以及循環輸入權重設置權重約束。通過圖層的recurrent_constraint參數設置重復權重的約束。以下示例在LSTM圖層上設置最大范數權重約束。 

  1. # example of max norm on an lstm layer  
  2. from keras.layers import LSTM  
  3. from keras.constraints import max_norm  
  4. ...  
  5. model.add(LSTM(32, kernel_constraint=max_norm(3), recurrent_constraint=max_norm(3), bias_constraint==max_norm(3)))  
  6. ...  
  7. # example of max norm on an lstm layer  
  8. from keras.layers import LSTM  
  9. from keras.constraints import max_norm  
  10. ...  
  11. model.add(LSTM(32, kernel_constraint=max_norm(3), recurrent_constraint=max_norm(3), bias_constraint==max_norm(3)))  
  12. ... 

現在我們知道如何使用權重約束API,讓我們看一個有效的例子。

加權約束案例研究

在本節中,我們將演示如何使用權重約束來減少MLP對簡單二元分類問題的過度擬合。此示例提供了一個模板,用于將權重約束應用于您自己的神經網絡以進行分類和回歸問題。

二元分類問題

我們將使用標準二進制分類問題來定義兩個半圓數據集,每個類一個半圓。每個觀測值都有兩個輸入變量,它們具有相同的比例,類輸出值為0或1.該數據集稱為“月球”數據集,因為繪制時每個類中的觀測值的形狀。我們可以使用make_moons()函數從這個問題中生成觀察結果。我們將為數據添加噪聲并為隨機數生成器播種,以便每次運行代碼時生成相同的樣本。 

  1. # generate 2d classification dataset  
  2. X, y = make_moons(n_samples=100noise=0.2, random_state=1

我們可以繪制兩個變量在圖表上作為x和y坐標的數據集,并將類值作為觀察的顏色。下面列出了生成數據集并繪制數據集的完整示例。 

  1. # generate two moons dataset  
  2. from sklearn.datasets import make_moons  
  3. from matplotlib import pyplot  
  4. from pandas import DataFrame  
  5. # generate 2d classification dataset  
  6. X, y = make_moons(n_samples=100noise=0.2, random_state=1 
  7. # scatter plot, dots colored by class value  
  8. df = DataFrame(dict(x=X[:,0], y=X[:,1], label=y))  
  9. colors = {0:'red', 1:'blue'}  
  10. fig, ax = pyplot.subplots() 
  11. grouped = df.groupby('label')  
  12. for key, group in grouped:  
  13.     group.plot(axax=ax, kind='scatter'x='x'y='y'label=keycolor=colors[key])  
  14. pyplot.show()  
  15. # generate two moons dataset  
  16. from sklearn.datasets import make_moons  
  17. from matplotlib import pyplot  
  18. from pandas import DataFrame  
  19. # generate 2d classification dataset  
  20. X, y = make_moons(n_samples=100noise=0.2, random_state=1 
  21. # scatter plot, dots colored by class value  
  22. df = DataFrame(dict(x=X[:,0], y=X[:,1], label=y))  
  23. colors = {0:'red', 1:'blue'}  
  24. fig, ax = pyplot.subplots()  
  25. grouped = df.groupby('label')  
  26. for key, group in grouped:  
  27.     group.plot(axax=ax, kind='scatter'x='x'y='y'label=keycolor=colors[key])  
  28. pyplot.show() 

運行該示例會創建一個散點圖,顯示每個類中觀察的半圓形或月亮形狀。我們可以看到點的分散中的噪音使得衛星不太明顯。

這是一個很好的測試問題,因為類不能用一行來分隔,例如不是線性可分的,需要非線性方法,如神經網絡來解決。我們只生成了100個樣本,這對于神經網絡而言很小,提供了過度擬合訓練數據集的機會,并且在測試數據集上具有更高的誤差:使用正則化的一個好例子。此外,樣本具有噪聲,使模型有機會學習不一致的樣本的各個方面。

過度多層感知器

我們可以開發一個MLP模型來解決這個二進制分類問題。該模型將具有一個隱藏層,其具有比解決該問題所需的節點更多的節點,從而提供過度擬合的機會。我們還將訓練模型的時間超過確保模型過度所需的時間。在我們定義模型之前,我們將數據集拆分為訓練集和測試集,使用30個示例來訓練模型,使用70個示例來評估擬合模型的性能。 

  1. X, y = make_moons(n_samples=100noise=0.2, random_state=1 
  2. # split into train and test  
  3. n_train = 30  
  4. trainX, testX = X[:n_train, :], X[n_train:, :]  
  5. trainy, testy = y[:n_train], y[n_train:] 

接下來,我們可以定義模型。隱藏層使用隱藏層中的500個節點和整流的線性激活函數。在輸出層中使用S形激活函數以預測0或1的類值。該模型使用二元交叉熵損失函數進行優化,適用于二元分類問題和梯度下降的有效Adam版本。 

  1. # define model  
  2. model = Sequential()  
  3. model.add(Dense(500, input_dim=2activation='relu'))  
  4. model.add(Dense(1, activation='sigmoid'))  
  5. model.compile(loss='binary_crossentropy'optimizer='adam'metrics=['accuracy']) 

然后,定義的模型擬合4,000個訓練數據,默認批量大小為32。我們還將使用測試數據集作為驗證數據集。 

  1. # fit model  
  2. history = model.fit(trainX, trainy, validation_data=(testX, testy), epochs=4000verbose=0

我們可以在測試數據集上評估模型的性能并報告結果。 

  1. # evaluate the model  
  2. _, train_acc = model.evaluate(trainX, trainy, verbose=0 
  3. _, test_acc = model.evaluate(testX, testy, verbose=0 
  4. print('Train: %.3f, Test: %.3f' % (train_acc, test_acc)) 

最后,我們將在每個時期的訓練集和測試集上繪制模型的性能。如果模型確實過度擬合訓練數據集,我們將期望訓練集上的準確度線圖繼續增加并且測試設置上升然后隨著模型在訓練數據集中學習統計噪聲而再次下降。 

  1. # plot history  
  2. pyplot.plot(history.history['acc'], label='train' 
  3. pyplot.plot(history.history['val_acc'], label='test' 
  4. pyplot.legend()  
  5. pyplot.show() 

我們可以將所有這些部分組合在一起; 下面列出了完整的示例。 

  1. # mlp overfit on the moons dataset  
  2. from sklearn.datasets import make_moons  
  3. from keras.layers import Dense  
  4. from keras.models import Sequential  
  5. from matplotlib import pyplot  
  6. # generate 2d classification dataset  
  7. X, y = make_moons(n_samples=100noise=0.2, random_state=1 
  8. # split into train and test  
  9. n_train = 30  
  10. trainX, testX = X[:n_train, :], X[n_train:, :] 
  11. trainy, testy = y[:n_train], y[n_train:]  
  12. # define model  
  13. model = Sequential()  
  14. model.add(Dense(500, input_dim=2activation='relu'))  
  15. model.add(Dense(1, activation='sigmoid'))  
  16. model.compile(loss='binary_crossentropy'optimizer='adam'metrics=['accuracy'])  
  17. # fit model  
  18. history = model.fit(trainX, trainy, validation_data=(testX, testy), epochs=4000verbose=0 
  19. # evaluate the model  
  20. _, train_acc = model.evaluate(trainX, trainy, verbose=0 
  21. _, test_acc = model.evaluate(testX, testy, verbose=0 
  22. print('Train: %.3f, Test: %.3f' % (train_acc, test_acc))  
  23. # plot history  
  24. pyplot.plot(history.history['acc'], label='train' 
  25. pyplot.plot(history.history['val_acc'], label='test' 
  26. pyplot.legend()  
  27. pyplot.show() 

運行該示例報告列車和測試數據集上的模型性能。我們可以看到模型在訓練數據集上的性能優于測試數據集,這是過度擬合的一個可能標志。鑒于神經網絡和訓練算法的隨機性,您的具體結果可能會有所不同。因為模型是過度擬合的,所以我們通常不會期望在相同數據集上重復運行模型的精度差異(如果有的話)。 

  1. Train: 1.000, Test: 0.914 

創建一個圖,顯示訓練集和測試集上模型精度的曲線圖。我們可以看到過度擬合模型的預期形狀,其中測試精度增加到一個點然后再次開始減小。

具有加權約束的Overfit MLP

我們可以更新示例以使用權重約束。有一些不同的加權限制可供選擇。這個模型的一個很好的簡單約束是簡單地標準化加權,使得范數等于1.0。此約束具有強制所有傳入權重較小的效果。我們可以通過在Keras中使用unit_norm來實現??梢詫⒋思s束添加到第一個隱藏層,如下所示: 

  1. model.add(Dense(500, input_dim=2activation='relu'kernel_constraint=unit_norm())) 

我們也可以通過使用min_max_norm并將min和maximum設置為1.0來實現相同的結果,例如: 

  1. model.add(Dense(500, input_dim=2activation='relu'kernel_constraint=min_max_norm(min_value=1.0, max_value=1.0))) 

我們無法通過最大范數約束獲得相同的結果,因為它允許規范等于或低于指定的限制; 例如: 

  1. model.add(Dense(500, input_dim=2activation='relu'kernel_constraint=max_norm(1.0))) 

下面列出了具有單位規范約束的完整更新示例: 

  1. # mlp overfit on the moons dataset with a unit norm constraint  
  2. from sklearn.datasets import make_moons  
  3. from keras.layers import Dense  
  4. from keras.models import Sequential  
  5. from keras.constraints import unit_norm  
  6. from matplotlib import pyplot  
  7. # generate 2d classification dataset  
  8. X, y = make_moons(n_samples=100noise=0.2, random_state=1 
  9. # split into train and test  
  10. n_train = 30  
  11. trainX, testX = X[:n_train, :], X[n_train:, :]  
  12. trainy, testy = y[:n_train], y[n_train:]  
  13. # define model  
  14. model = Sequential()  
  15. model.add(Dense(500, input_dim=2activation='relu'kernel_constraint=unit_norm()))  
  16. model.add(Dense(1, activation='sigmoid'))  
  17. model.compile(loss='binary_crossentropy'optimizer='adam'metrics=['accuracy'])  
  18. # fit model  
  19. history = model.fit(trainX, trainy, validation_data=(testX, testy), epochs=4000verbose=0 
  20. # evaluate the model 
  21. _, train_acc = model.evaluate(trainX, trainy, verbose=0 
  22. _, test_acc = model.evaluate(testX, testy, verbose=0 
  23. print('Train: %.3f, Test: %.3f' % (train_acc, test_acc))  
  24. # plot history  
  25. pyplot.plot(history.history['acc'], label='train' 
  26. pyplot.plot(history.history['val_acc'], label='test' 
  27. pyplot.legend()  
  28. pyplot.show() 

運行該示例報告訓練集和測試數據集上的模型性能。我們可以看到,對權重大小的嚴格限制確實提高了模型在測試集上的性能,而不會影響訓練集的性能。 

  1. Train: 1.000, Test: 0.943 

回顧訓練集的曲線和測試精度,我們可以看到模型已經過度擬合訓練數據集了。訓練集和測試集的模型精度繼續提高到穩定水平。

擴展

本節列出了一些擴展您可能希望探索的教程的想法。

  •  報告加權標準。更新示例以計算網絡權重的大小,并證明約束確實使得幅度更小。
  •  約束輸出層。更新示例以將約束添加到模型的輸出層并比較結果。
  •  約束偏差。更新示例以向偏差權重添加約束并比較結果。
  •  反復評估。更新示例以多次擬合和評估模型,并報告模型性能的均值和標準差。 

 

責任編輯:龐桂玉 來源: Python中文社區
相關推薦

2019-12-20 09:15:48

神經網絡數據圖形

2020-07-23 17:40:03

神經網絡深度學習參數共享

2017-03-22 11:59:40

深度神經網絡

2017-04-25 15:12:45

神經網絡SSD檢測

2023-06-18 23:00:39

神經網絡損失函數隨機變量

2023-11-14 16:29:14

深度學習

2022-06-06 13:05:32

神經網絡宇宙

2019-10-08 15:39:54

人工智能損失函數網絡

2017-04-26 09:30:53

卷積神經網絡實戰

2017-04-26 14:32:24

神經網絡人工智能對杭樣本

2017-10-05 13:38:22

LSTM過擬合欠擬合

2021-03-29 09:02:24

深度學習預測間隔

2021-01-11 10:23:22

谷歌神經網絡機器學習

2020-05-27 11:10:54

KerasLSTM神經網絡

2018-07-03 09:12:23

深度學習正則化Python

2023-04-19 10:17:35

機器學習深度學習

2017-12-22 08:47:41

神經網絡AND運算

2019-07-20 11:00:00

神經網絡數據圖形

2024-07-24 08:04:24

神經網絡激活函數

2024-11-07 08:26:31

神經網絡激活函數信號
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 午夜资源 | 水蜜桃久久夜色精品一区 | 精品一区二区三区在线播放 | 99久久精品国产一区二区三区 | 国产福利在线播放 | 视频一区二区中文字幕 | 99精品久久久国产一区二区三 | av男人的天堂在线 | 91精品国产综合久久国产大片 | 久久国产激情视频 | 日韩一区二区av | 久久中文一区二区 | 欧美一区二区免费 | 一区二区在线免费观看 | 日韩高清一区 | 国内精品视频在线观看 | 色一级| 毛片在线免费播放 | 九九久久久久久 | 国产久 | 欧美无乱码久久久免费午夜一区 | 日韩欧美精品在线播放 | 欧美日韩第一页 | 国产精品99久久久久久宅男 | 精品欧美乱码久久久久久 | 久久性av| 伊人91在线 | 7799精品视频天天看 | 国内自拍偷拍 | 久久久久久综合 | 欧美日韩一区二区视频在线观看 | 国产午夜精品一区二区三区四区 | 国产在线精品一区二区 | 国产精品国产三级国产aⅴ中文 | 国产成人jvid在线播放 | 亚洲欧美综合 | 6996成人影院网在线播放 | 91久久 | 国产99视频精品免视看9 | 国产一区二区三区 | 中文字幕在线观看一区 |