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

Generator

Một generator trong GAN nhận một vector nhiễu ngẫu nhiên làm đầu vào và tạo ra một ảnh sinh ra. Để tái sử dụng kiến trúc dễ dàng hơn, bạn sẽ truyền cả kích thước đầu vào và đầu ra làm tham số cho mô hình. Như vậy, bạn có thể dùng cùng một mô hình với nhiều kích thước nhiễu đầu vào và các ảnh có hình dạng khác nhau.

Bạn đã có torch.nn được import sẵn dưới tên nn. Bạn cũng có thể dùng hàm gen_block() tùy chỉnh, hàm này trả về một khối gồm: tầng linear, batch norm, và kích hoạt ReLU. Bạn sẽ dùng nó như một khối xây dựng cho generator.

def gen_block(in_dim, out_dim):
    return nn.Sequential(
        nn.Linear(in_dim, out_dim),
        nn.BatchNorm1d(out_dim),
        nn.ReLU(inplace=True)
    )

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

  • Định nghĩa self.generator là một mô hình tuần tự.
  • Sau gen_block cuối cùng, thêm một tầng linear với kích thước đầu vào phù hợp và kích thước đầu ra là out_dim.
  • Thêm một hàm kích hoạt sigmoid sau tầng linear.
  • Trong phương thức forward(), truyền đầu vào của mô hình qua self.generator.

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 Generator(nn.Module):
    def __init__(self, in_dim, out_dim):
        super(Generator, self).__init__()
        # Define generator block
        self.generator = ____(
            gen_block(in_dim, 256),
            gen_block(256, 512),
            gen_block(512, 1024),
          	# Add linear layer
            ____
            # Add activation
            ____
        )

    def forward(self, x):
      	# Pass input through generator
        return ____
Chỉnh sửa và Chạy Mã