แนวคิด
TensorFlow สามารถประกอบเลเยอร์ได้โดยการสร้างคลาสที่สืบทอดมาจาก ResnetIdentityBlock ใช้สำหรับกำหนดบล็อกที่นำไปประกอบเลเยอร์ต่างๆ ได้
Neural Network ที่มีเลเยอร์ Convolutional อย่างน้อย 1 เลเยอร์ เรียกว่า Convolutional Neural Network (CNN) ใช้สร้างโมเดลเรียนรู้ได้
TensorFlow Hub เป็นที่เก็บโมเดล TensorFlow ที่เทรน済み (pre-trained) สามารถนำมา fine-tune ได้ เราจะเรียนรู้การใช้โมเดลจาก TF Hub ร่วมกับ tf.keras เพื่อทำ Transfer Learning สำหรับ Image Classification โดยใช้โมเดล classifier สำเร็จรูปทำนายภาพได้โดยไม่ต้องเทรนใหม่
รันโค้ดบน Google Colaboratory (Colab) ให้รัน Python บนเบราว์เซอร์ ฟรี ไม่ต้องตั้งค่า มี GPU ใช้งานได้ สร้างบน Jupyter Notebook
ตัวอย่างโค้ด: ResNet Identity Block
print("Composing layers")
class ResnetIdentityBlock(tf.keras.Model):
def __init__(self, kernel_size, filters):
super(ResnetIdentityBlock, self).__init__(name='')
filters1, filters2, filters3 = filters
self.conv2a = tf.keras.layers.Conv2D(filters1, (1, 1))
self.bn2a = tf.keras.layers.BatchNormalization()
self.conv2b = tf.keras.layers.Conv2D(filters2, kernel_size, padding='same')
self.bn2b = tf.keras.layers.BatchNormalization()
self.conv2c = tf.keras.layers.Conv2D(filters3, (1, 1))
self.bn2c = tf.keras.layers.BatchNormalization()
def call(self, input_tensor, training=False):
x = self.conv2a(input_tensor)
x = self.bn2a(x, training=training)
x = tf.nn.relu(x)
x = self.conv2b(x)
x = self.bn2b(x, training=training)
x = tf.nn.relu(x)
x = self.conv2c(x)
x = self.bn2c(x, training=training)
x += input_tensor
return tf.nn.relu(x)
print("The layer is called")
block = ResnetIdentityBlock(1, [1, 2, 3])
_ = block(tf.zeros([1, 2, 3, 3]))
block.layers
len(block.variables)
block.summary()
Credit: TensorFlow Tutorials
ผลลัพธ์
Composing layers The layer is called Model: "resnet_identity_block" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= conv2d (Conv2D) multiple 4 batch_normalization (BatchNo multiple 4 conv2d_1 (Conv2D) multiple 4 batch_normalization_1 (Batch multiple 8 conv2d_2 (Conv2D) multiple 9 batch_normalization_2 (Batch multiple 12 ================================================================= Total params: 41 Trainable params: 29 Non-trainable params: 12
คำอธิบาย
- Residual block ใน ResNet ประกอบด้วย Convolution, Batch Normalization และ Shortcut connection
- เลเยอร์สามารถซ้อนกันได้ (nested layers)
- เมื่อต้องการเมธอดโมเดลอย่าง
Model.fit,Model.evaluate,Model.saveควรสืบทอดจากkeras.Model - ใช้
keras.Modelแทนkeras.layers.Layerช่วยติดตาม variables ได้ดีขึ้น keras.Modelติดตามเลเยอร์ภายใน ทำให้ตรวจสอบเลเยอร์ง่ายขึ้น