开始使用免费开始使用

构建 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)
编辑并运行代码