U-Net बनाना: लेयर डिफिनिशन
इस और अगले अभ्यास में, आप शुरू से U-Net आर्किटेक्चर बनाएँगे। यहाँ, आप __init__() मेथड को परिभाषित करने से शुरू करेंगे, जहाँ आप मॉडल के लिए लेयर्स और लेयर ब्लॉक्स तय करेंगे।
एन्कोडर और transposed convolution आपके लिए पहले से परिभाषित हैं। अब डिकोडर के convolutional ब्लॉक्स बचे हैं। आपको प्रत्येक ब्लॉक के लिए, skip connections को ध्यान में रखते हुए, उपयुक्त इनपुट और आउटपुट चैनल्स पास करने हैं।
पहला ब्लॉक, dec1, इनपुट के रूप में upconv3 के आउटपुट और enc3 के आउटपुट का concatenation लेगा। बदले में, dec1 का आउटपुट enc3 के आउटपुट के बराबर होना चाहिए। क्या आप सभी छूटे हुए input और output sizes भर सकते हैं?
यह अभ्यास पाठ्यक्रम का हिस्सा है
PyTorch के साथ इमेज के लिए डीप लर्निंग
अभ्यास निर्देश
- डिकोडर में तीन convolutional ब्लॉक्स परिभाषित करें और प्रत्येक को उपयुक्त संख्या में input और output channels पास करें.
इंटरैक्टिव व्यावहारिक अभ्यास
इस अभ्यास को इस नमूना कोड को पूरा करके आज़माएँ।
class UNet(nn.Module):
def __init__(self, in_channels, out_channels):
super(UNet, self).__init__()
self.enc1 = self.conv_block(in_channels, 64)
self.enc2 = self.conv_block(64, 128)
self.enc3 = self.conv_block(128, 256)
self.enc4 = self.conv_block(256, 512)
self.pool = nn.MaxPool2d(kernel_size=2, stride=2)
self.upconv3 = nn.ConvTranspose2d(512, 256, kernel_size=2, stride=2)
self.upconv2 = nn.ConvTranspose2d(256, 128, kernel_size=2, stride=2)
self.upconv1 = nn.ConvTranspose2d(128, 64, kernel_size=2, stride=2)
# Define the decoder blocks
self.dec1 = self.conv_block(____, ____)
self.dec2 = self.conv_block(____, ____)
self.dec3 = self.conv_block(____, ____)
self.out = nn.Conv2d(64, out_channels, kernel_size=1)