以下討論模型如果出現欠擬合或過擬合時的幾個處理方式。
這裡介紹一下正則化,權重的值等於0將導致該神經元無法發揮作用,正則化透過添加人為的限制,對過於激活的神經元進行懲罰,讓他的值向0靠攏,你也可以對偏差或模型的輸出進行懲罰,你可以直接傳遞字串,或是引入Keras的regularizers模組,可以對預設值進行調整,具體的使用方式如下,有三個可用的選項l1、l2、l1_l2,針對哪個地方用什麼方法進行懲罰,端看你的調整,沒有絕對。
Dense(
units = 256
kernel_regularizer = 'l1', #針對權重
bias_regularizer = 'l2', #針對偏差
activity_regularizer = 'l1_l2' #針對模型輸出
)
from tensorflow.keras.regularizers import l1, l2, l1_l2
Dense(
units = 64,
kernel_regularizer = l1(l=0.01),
bias_regularizer = l2(l=0.01),
activity_regularizer = l1_l2(l1=0.01, l2=0.01)
)
比較常用的作法是使用dropout層,一個正則化的替代手段,夾在兩個層中間,在每次更新權重時隨機挑選x*100%的權重不進行更新,以下例子是35%。
from tensorflow.keras.layers import Dense, Dropout
model.add(
Dense(
units = 64
)
model.add(
Dropout(
rate = 0.35
)
)
model.add(
Dense(
units = 64
)