產生器(Generator)
GAN 的產生器會把隨機雜訊向量當作輸入,並產生影像作為輸出。為了讓架構更容易重複使用,你會將輸入與輸出形狀作為參數傳入模型。如此一來,就能用相同的模型來處理不同大小的輸入雜訊與各種形狀的影像。
在此練習中,torch.nn 已經以 nn 名稱幫你匯入。你也可以使用自訂的 gen_block() 函式,它會回傳一個包含:線性層、批次正規化,以及 ReLU 活化的模組區塊。你將以此作為產生器的組裝積木。
def gen_block(in_dim, out_dim):
return nn.Sequential(
nn.Linear(in_dim, out_dim),
nn.BatchNorm1d(out_dim),
nn.ReLU(inplace=True)
)
本練習屬於課程
使用 PyTorch 進行影像深度學習
練習說明
- 將
self.generator定義為序列式模型。 - 在最後一個
gen_block之後,加入一個線性層,其輸入大小需對應前一層的輸出,輸出大小為out_dim。 - 在該線性層後面加入 sigmoid 活化。
- 在
forward()方法中,將模型的輸入傳入self.generator。
動手互動練習
試著完成這個範例程式碼,體驗一下這個練習。
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 ____