iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 16
0
AI & Data

AI從入門到放棄系列 第 16

Day 16 ~ AI從入門到放棄 - 正則化

  • 分享至 

  • xImage
  •  

以下討論模型如果出現欠擬合或過擬合時的幾個處理方式。

  • 欠擬合
  1. 減少訓練資料
  2. 增加模型複雜度
  3. 取消已採用的正則化措施
  4. 增加特徵(選用解析度更高的圖片等等
  5. 嘗試調整預處理步驟(嘗試對圖片進行降噪等等
  • 過擬合
  1. 增加訓練資料
  2. 降低模型複雜度
  3. 採用正則化措施
  4. 減少特徵(降低圖片的解析度等等
  5. 提前終止訓練(Early Stopping

這裡介紹一下正則化,權重的值等於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
)

上一篇
Day 15 ~ AI從入門到放棄 - 欠擬合、過擬合
下一篇
Day 17 ~ AI從入門到放棄 - 資料增強
系列文
AI從入門到放棄30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言