টেনসরফ্লো দিয়ে লেয়ার কম্পোজ করা যায় 'ResnetIdentityBlock' ক্লাসকে ইনহেরিট করে একটি ক্লাস ডিফাইন করে। এটি একটি ব্লক ডিফাইন করতে ব্যবহৃত হয় যা লেয়ারগুলো কম্পোজ করতে সাহায্য করে।
আরও পড়ুন: টেনসরফ্লো কী এবং কেরাস কীভাবে টেনসরফ্লোর সাথে কাজ করে নিউরাল নেটওয়ার্ক তৈরির জন্য?
কমপক্ষে একটি লেয়ার থাকা নিউরাল নেটওয়ার্ককে কনভোল্যুশনাল লেয়ার বলা হয়। আমরা কনভোল্যুশনাল নিউরাল নেটওয়ার্ক (CNN) ব্যবহার করে লার্নিং মডেল বানাতে পারি।
টেনসরফ্লো হাব (TensorFlow Hub) হলো প্রি-ট্রেনড টেনসরফ্লো মডেলের একটি রিপোজিটরি। টেনসরফ্লো দিয়ে লার্নিং মডেল ফাইন-টিউন করা যায়। আমরা বুঝব কীভাবে tf.keras সহ টেনসরফ্লো হাব থেকে মডেল ব্যবহার করতে হয়, একটি ইমেজ ক্লাসিফিকেশন মডেল ব্যবহার করতে হয়। একবার এটি হলে, ট্রান্সফার লার্নিং ব্যবহার করে কাস্টম ইমেজ ক্লাসের জন্য একটি মডেল ফাইন-টিউন করা যায়। এটি একটি প্রি-ট্রেনড ক্লাসিফায়ার মডেল ব্যবহার করে একটি ইমেজ लेकर সেটি কী তা প্রেডিক্ট করে। এটি কোনো ট্রেনিং ছাড়াই করা যায়।
নিচের কোড চালানোর জন্য আমরা গুগল কোলাবরেটরি (Google Colaboratory) ব্যবহার করছি। গুগল কোল্যাব বা কোলাবরেটরি ব্রাউজারের ওপর পাইথন কোড চালাতে সাহায্য করে এবং জিরো কনফিগারেশন ও ফ্রি জিপিইউ (GPU) অ্যাক্সেস দেয়। কোলাবরেটরি জুপিটার নোটবুকের ওপর বিল্ড করা হয়েছে।
উদাহরণ
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()
কোড কרדিট: https://www.tensorflow.org/tutorials/customization/custom_layers
আউটপুট
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
ব্যাখ্যা
ResNet-এ প্রতিটি রেজিডুয়াল ব্লক কনভোলিউশন, ব্যাচ নরমালাইজেশন এবং একটি শর্টকাট দিয়ে গঠিত।
লেয়ারগুলো অন্য লেয়ারের ভিতরেও নেস্ট করা যায়।
যখন Model.fit, Model.evaluate, এবং Model.save মেথডগুলো দরকার হয়, তখন keras.Model থেকে ইনহেরিট করা যায়।
keras.Model, keras.layers.Layer-এর পরিবর্তে ব্যবহৃত হয়, যা ভেরিয়েবল ট্র্যাক করতে সাহায্য করে।
একটি keras.Model তার ইন্টারনাল লেয়ারগুলো ট্র্যাক করে, ফলে লেয়ারগুলো ইন্সপেক্ট করা সহজ হয়।