Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

การประกอบเลเยอร์ (Composing Layers) ใน TensorFlow ด้วย Python


แนวคิด

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 ติดตามเลเยอร์ภายใน ทำให้ตรวจสอบเลเยอร์ง่ายขึ้น