def __init__(self, **kwargs): super().__init__() self.input_batchnorm = nn.BatchNorm2d(kwargs['in_channels']) self.unet = UNet(**kwargs) self.final = nn.Sigmoid() self._init_weights()
def __init__(self, **kwargs): # kwargs はコンストラクタに渡される全てのキーワード引数を含む辞書 super().__init__() # BatchNorm2d は入力のチャンネル数を必要とする # その情報をキーワード引数から取り出す self.input_batchnorm = nn.BatchNorm2d(kwargs['in_channels']) # U-Netの取り込み部分はこれだけだが、ほとんどの処理はここで行われる self.unet = UNet(**kwargs) self.final = nn.Sigmoid() # 第11章と同じように独自の重み初期化を行う self._init_weights()
def __init__(self, **kwargs): super().__init__() self.batchnorm = nn.BatchNorm2d(kwargs['in_channels']) self.unet = UNet(**kwargs) self.final = nn.Sigmoid() for m in self.modules(): if type(m) in { nn.Conv2d, nn.Conv3d, nn.ConvTranspose2d, nn.ConvTranspose3d, nn.Linear, }: nn.init.kaiming_normal_(m.weight.data, mode='fan_out', nonlinearity='leaky_relu', a=0) if m.bias is not None: fan_in, fan_out = nn.init._calculate_fan_in_and_fan_out(m.weight.data) bound = 1 / math.sqrt(fan_out) nn.init.normal_(m.bias, -bound, bound)
def __init__(self, **kwargs): super().__init__() self.batchnorm = nn.BatchNorm2d(kwargs['in_channels']) self.unet = UNet(**kwargs) self.hardtanh = nn.Hardtanh(min_val=0, max_val=1)