昨天介紹使用 ImageDataGenerator()
做資料增強,是以資料生成器來執行,今天要介紹的是資料增強也可以是模型的一部分,使用 tf.keras.layers
新增層的方式來完成。
回顧昨天使用 ImageDataGenerator()
的方式:
trdata = ImageDataGenerator(rescale = 1./255,
rotation_range=45,
width_shift_range=0.2,
height_shift_range=0.2,
zoom_range=0.2,
horizontal_flip=True
)
若改成以 tf.keras.layers
去新增資料增強層的方式,在建立模型時可以使用:
from tensorflow.keras import layers
from tensorflow.keras.models import Sequential
data_augmentation = tf.keras.Sequential(
[ layers.Rescaling(1./255),
layers.RandomRotation(0.25), # 對應 rotation_range=45 (0.25 為 45 度的比例)
layers.RandomTranslation(0.2, 0.2), # 對應 height_shift_range=0.2 及 width_shift_range=0.2
layers.RandomZoom(0.2),
layers.RandomFlip('horizontal'),
]
)
使用生成器 ImageDataGenerator()
和新增資料增強層這兩種方法差別,前者為將資料集輸入模型前,設定好生成器的參數,以批量生成的方式來實現資料增強,後者的資料增強是在模型內進行,為模型的一部分。
例如模型程式碼:
# 先定義好資料增強層
data_augmentation = tf.keras.Sequential(
[
layers.RandomFlip('horizontal'),
layers.RandomRotation(0.1),
layers.RandomZoom(0.2),
]
)
inputs = tf.keras.Input(shape=(256, 256, 3)) # 定義模型輸入
base_model = data_augmentation(inputs) # 接上資料增強層
base_model = VGG16(include_top=False, weights='imagenet', input_tensor=base_model) # 接上模型
...(略)
model.summary()
使用 model.summary()
可以查看模型內容:
可以看到第二行的 sequential (Sequential) 即資料增強層,為模型的一部分。
註:這裡主要是介紹此種資料增強方式,所以程式碼僅是簡單舉例,之後到模型實作的時候會有詳細的程式碼。
使用下列程式碼中的資料增強層的方法:
data_augmentation = tf.keras.Sequential(
[
layers.RandomRotation(0.4),
layers.RandomTranslation(0.2, 0.2),
layers.RandomZoom(0.2),
layers.RandomFlip('horizontal'),
]
)
顯示 10 張使用資料增強層的影像:
之後實作可以試試看兩種方法,或是嘗試其他的資料增強方法。
明天就要開始介紹模型建構的方式了!