iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 17
0
AI & Data

AI從入門到放棄系列 第 17

Day 17 ~ AI從入門到放棄 - 資料增強

  • 分享至 

  • xImage
  •  

改善過擬合的其中一個方法是增加資料,但資料並非那麼好取得,這時候我們可以用keras自帶的一個資料增強Data Augmentation手段,看看能否解決問題。

from tensorflow.keras.preprocessing.image import ImageDataGenerator

來看看有那些可以設定的參數,有些常使用的拿出來講。

  • rotation_range 旋轉角度 - 隨機左右旋轉圖片,範圍為[-x, x]。
  • width_shift_range 水平偏移範圍 - 隨機左右移動圖片,小於1的小數代表百分比,大於等於1的
    代表像素。
  • height_shift_range 垂直偏移範圍 - 隨機上下移動圖片,小於1的小數代表百分比,大於等於1的
    代表像素。
  • brightness_range 亮度調整範圍 - 隨機調整圖片亮度,小於1的小數變暗,反之變亮,例如[0.5, 1.5]。
  • shear_range 剪切強度 - 讓一個軸的值不變,另一個軸的值依比例增加或減少,例如0.5。
  • zoom_range 縮放範圍 - 隨機放大或縮小圖片,例如[0.5, 1.5],同0.5。
  • channel_shift_range 通道偏移 - 對圖片的某個通道隨機偏移,看起來會像調整螢幕冷暖色域感覺。
  • horizontal_flip 水平翻轉 - 隨機水平翻轉圖片。
  • vertical_flip 垂直翻轉 - 隨機垂直翻轉圖片。
  • rescale 值縮放 - 你想將圖片的值縮放到0~1可以填入1/255。
datagen = ImageDataGenerator(
  width_shift_range = 0.3,
  height_shift_range = 0.3,
  shear_range = 0.1,
  rotation_range = 30,
  rescale = 1 / 255.,
)

model.fit(
  x = datagen.flow(x_train, y_train, batch_size=32),
  steps_per_epoch = train.shape[0] // batch_size,
  epochs = 20,
  validation_data = datagen.flow(x_valid, y_valid, batch_size=32),
  validation_steps = valid.shape[0] // batch_size,
  verbose = 2
)

範例中對驗證集也使用資料增強,但你也可以不要這麼做,各位注意到我們並沒有使用到horizontal_flip和vertical_flip,因為在現實中並不會有人將數字顛倒或鏡像的寫,所以不用這麼做,如果做貓狗辨識的話可以加入水平翻轉,我們在用資料增強時需要考慮到現實中是否會出現這些情況來做決定。

以往step不需要手動設定,但是資料生成器會不斷地循環下去,所以需要手動設定停止條件steps_per_epoch和validation_steps。

你也需要手動分割出訓練集與驗證集,即使你只在訓練集上用資料生成器,你可以手動分割,想要每次都使用同樣的分割並跳過預處理步驟的話,你可以save起來,下次要用再load回來,這裡使用sklearn套件提供的隨機分割,沒有的要自己裝。

from sklearn.model_selection import train_test_split
import time
x_train, x_valid, y_train, y_valid = train_test_split(x_train, y_train, test_size=0.1, random_state=int(time.time()))

np.save(r'x_train.npy', x_train)
np.save(r'y_train.npy', y_train)
np.save(r'x_valid.npy', x_valid)
np.save(r'y_valid.npy', y_valid)

x_train = np.load(r'x_train.npy')
y_train = np.load(r'y_train.npy')
x_valid = np.load(r'x_valid.npy')
y_valid = np.load(r'y_valid.npy')

上一篇
Day 16 ~ AI從入門到放棄 - 正則化
下一篇
Day 18 ~ AI從入門到放棄 - 訓練回調
系列文
AI從入門到放棄30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言