前提・実現したいこと
Discriminatorは、入力サイズによって、層を追加したいのですが、forward内にif分を書きまくるということになっています。
できるだけ、簡潔に書きたいのですが、教えて頂けると幸いです。
該当のソースコード
class Discriminator(nn.Module): def __init__(self): super(Discriminator, self).__init__() self.fromRGBs = nn.Conv2d(3,512,1,1,0) self.layer1 = self.layer(512,512,4,2,1) self.layer2 = self.layer(512,256,4,2,1) self.layer3 = self.layer(256,128,4,2,1) def layer(self, in_channel, out_channel, kernel_size, stride, padding): layer = nn.Sequential( nn.Conv2d( in_channels=in_channel, out_channels=out_channel, kernel_size=kernel_size, stride=stride, padding=padding, ), nn.BatchNorm2d(out_channel), nn.LeakyReLU(inplace=True) ) return layer def forward(self, x): from_rgb= self.fromRGBs(x) out = self.layer1(from_rgb) if x.shape[2]==8: out = self.layer2(out) return out elif x.shape[2]==16: out = self.layer2(out) out = self.layer3(out) return out return out if __name__ == '__main__': d = Discriminator() image = torch.randn(size=(10,3,16,16)) out = d(image) print(out.shape)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。