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
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ới3bản đồ đặc trưng đầu vào và512bả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ốisequentialbạ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)