過擬合和欠擬合

2021-10-09 22:00:42 字數 1519 閱讀 7523

優化:代表通過調整模型來訓練資料上表現最好。

泛化:代表模型在未見過的資料上的表現。

1.弄更多的訓練資料

2.調節模型儲存的資訊的質量,用來解決過擬合的方法叫做正則化。

最簡單的預防過擬合方法就是減少模型的大小。

模型中可學習引數的數量被稱為模型的「容量」。

沒有什麼有魔力的公式能夠決定層所需的正確數量,以及每一層的正確大小。你必須評估一系列不同的結構(在你的驗證集上而不是測試集上)來找出你的資料的正確模型大小。一般的找到合適大小的流程是從一些相關的比較少的層數和引數開始,然後開始提高層的大小並增加新的層知道你看到驗證集的損失開始下降為止。

from keras import regularizers

model = models.sequential()

model.add(layers.dense(16, kernel_regularizer=regularizers.l2(0.001),

activation='relu', input_shape=(10000,)))

model.add(layers.dense(16, kernel_regularizer=regularizers.l2(0.001),

activation='relu'))

model.add(layers.dense(1, activation='sigmoid'))

其中l2(0.001)意味著圖層的權重矩陣將會乘以0.001加入到最終網路的損失中。注意乘法只在訓練的時候加進去,也就是說網路的損失在訓練的時候要比測試的時候高很多。

作為l2的替代,你可以看到如下的keras權重正則化:

from keras import regularizers

# l1 regularization

regularizers.l1(0.001)

# l1 and l2 regularization at the same time

regularizers.l1_l2(l1=0.001, l2=0.001)

dropout應用到「層」裡面,由隨機"dropping out"層在訓練中學習到的要輸出的特徵。在測試的時候,沒有單元被dropped out,層的輸出值會按照dropout rate來縮放,以平衡在測試時和訓練的時比有更多的單元。

在keras裡面,能使用dropout層來直接引入dropout。

model = models.sequential()

model.add(layers.dense(16, activation='relu', input_shape=(10000,)))

model.add(layers.dropout(0.5))

model.add(layers.dense(16, activation='relu'))

model.add(layers.dropout(0.5))

model.add(layers.dense(1, activation='sigmoid'))

過擬合和欠擬合

嘗試不同的模型 既然有一種可靠的方法來測量模型精度,那麼可以嘗試使用其他模型,並檢視哪種模型可以提供最佳 但是對模型有什麼選擇?可以在scikit learn的文件中看到決策樹模型有很多選項 比您長期想要或需要的更多 最重要的選項決定了樹的深度。回想一下這個微課程的第一課,樹的深度是衡量它在進行 之...

欠擬合和過擬合

解決欠擬合問題,可以從以下三個方面入手 1 增加特徵項 在大多數情況下出現過擬合是因為沒有準確把握資料的主要特徵,可以嘗試在模型中加入更多的和原始資料有重要相關性的特徵來尋連搭建的模型,著牙嗎嗯得到的模型可能會有更好的泛化能力。2 構造複雜的多項式 3 減少正則化引數 解決過擬合問題 1 增大訓練的...

過擬合和欠擬合

乙個假設在訓練資料上,能夠獲得比其他假設更好的擬合,但是在訓練資料外的資料集上卻不能很好的擬合資料,此事認為這個模型出現了過擬合現象 模型過於複雜 原因 原始特徵過多,存在一些嘈雜特徵,模型過於複雜是因為模型嘗試去兼顧各個測試資料點 解決辦法 乙個假設在訓練集上不能獲得更好的擬合,但是在訓練資料集以...