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
Hướng dẫn bài tập
- Định nghĩa
self.generatorlà một mô hình tuần tự. - Sau
gen_blockcuố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 quaself.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 ____