Bắt đầu ngayBắt đầu miễn phí

Bộ phân biệt kiểu tích chập

Với generator của DCGAN đã sẵn sàng, bước cuối trước khi bạn có thể huấn luyện là định nghĩa bộ phân biệt (discriminator) dạng tích chập.

torch.nn đã được nhập sẵn với bí danh quen thuộc. Để xây dựng bộ phân biệt tích chập, bạn sẽ dùng hàm tùy biến gc_disc_block() trả về một khối gồm một lớp tích chập, tiếp theo là batch norm và kích hoạt leaky ReLU. Bạn có thể xem định nghĩa của dc_disc_block() bên dưới.

def dc_disc_block(in_dim, out_dim, kernel_size, stride):
    return nn.Sequential(
        nn.Conv2d(in_dim, out_dim, kernel_size, stride=stride),
        nn.BatchNorm2d(out_dim),
        nn.LeakyReLU(0.2),
    )

Bài tập này là một phần của khóa học

Deep Learning cho Ảnh với PyTorch

Xem khóa học

Hướng dẫn bài tập

  • Thêm khối đầu tiên của discriminator bằng hàm tùy biến dc_disc_block() với 3 bản đồ đặc trưng đầu vào và 512 bản đồ đặc trưng đầu ra.
  • Thêm lớp tích chập với kích thước đầu ra là 1.
  • Trong phương thức forward(), đưa đầu vào đi qua khối sequential bạn đã định nghĩa trong __init__().

Bài tập tương tác thực hành trực tiếp

Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.

class DCDiscriminator(nn.Module):
    def __init__(self, kernel_size=4, stride=2):
        super(DCDiscriminator, self).__init__()
        self.disc = nn.Sequential(
          	# Add first discriminator block
            dc_disc_block(3, 512, kernel_size, stride),
            dc_disc_block(512, 1024, kernel_size, stride),
          	# Add a convolution
            nn.Conv2d(1024, 1, kernel_size, stride=stride),
        )

    def forward(self, x):
        # Pass input through sequential block
        x = ____
        return x.view(len(x), -1)
Chỉnh sửa và Chạy Mã