构建 U-Net:层的定义
在本题与下一题中,您将从零开始构建一个 U-Net 架构。本题先从定义 __init__() 方法入手,您需要在其中为模型定义各类层与由层组成的模块。
编码器和转置卷积已为您定义好。剩下的是解码器的卷积模块。考虑到跳跃连接,您需要为每个模块传入合适的输入与输出通道数。
第一个模块 dec1 的输入是 upconv3 的输出与 enc3 的输出拼接而成。dec1 的输出应当与 enc3 的输出相同。您能补全所有缺失的输入与输出通道大小吗?
本练习是课程的一部分
使用 PyTorch 进行图像深度学习
练习说明
- 通过为每个模块传入合适的输入与输出通道数,定义解码器中的三个卷积模块。
交互式实操练习
通过完成这段示例代码来试试这个练习。
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)