Spaces:
Runtime error
Runtime error
import chainer | |
class ConvolutionBlock(chainer.Chain): | |
def __init__(self, in_channels, out_channels): | |
super(ConvolutionBlock, self).__init__( | |
conv=chainer.links.Convolution2D( | |
in_channels, | |
out_channels, | |
(1, 49), | |
(1, 4), | |
(0, 24), | |
initialW=chainer.initializers.HeNormal(), | |
), | |
bn_conv=chainer.links.BatchNormalization(out_channels), | |
) | |
def __call__(self, x): | |
# Set Train to False. | |
chainer.config.train = False | |
h = self.conv(x) | |
h = self.bn_conv(h) | |
y = chainer.functions.relu(h) | |
return y | |
class ResidualBlock(chainer.Chain): | |
def __init__(self, in_channels, out_channels): | |
super(ResidualBlock, self).__init__( | |
res_branch2a=chainer.links.Convolution2D( | |
in_channels, | |
out_channels, | |
(1, 9), | |
pad=(0, 4), | |
initialW=chainer.initializers.HeNormal(), | |
), | |
bn_branch2a=chainer.links.BatchNormalization(out_channels), | |
res_branch2b=chainer.links.Convolution2D( | |
out_channels, | |
out_channels, | |
(1, 9), | |
pad=(0, 4), | |
initialW=chainer.initializers.HeNormal(), | |
), | |
bn_branch2b=chainer.links.BatchNormalization(out_channels), | |
) | |
def __call__(self, x): | |
chainer.config.train = False | |
h = self.res_branch2a(x) | |
h = self.bn_branch2a(h) | |
h = chainer.functions.relu(h) | |
h = self.res_branch2b(h) | |
h = self.bn_branch2b(h) | |
h = x + h | |
y = chainer.functions.relu(h) | |
return y | |
class ResidualBlockA: | |
def __init__(self): | |
pass | |
def __call__(self): | |
pass | |
class ResidualBlockB(chainer.Chain): | |
def __init__(self, in_channels, out_channels): | |
super(ResidualBlockB, self).__init__( | |
res_branch1=chainer.links.Convolution2D( | |
in_channels, | |
out_channels, | |
(1, 1), | |
(1, 4), | |
initialW=chainer.initializers.HeNormal(), | |
), | |
bn_branch1=chainer.links.BatchNormalization(out_channels), | |
res_branch2a=chainer.links.Convolution2D( | |
in_channels, | |
out_channels, | |
(1, 9), | |
(1, 4), | |
(0, 4), | |
initialW=chainer.initializers.HeNormal(), | |
), | |
bn_branch2a=chainer.links.BatchNormalization(out_channels), | |
res_branch2b=chainer.links.Convolution2D( | |
out_channels, | |
out_channels, | |
(1, 9), | |
pad=(0, 4), | |
initialW=chainer.initializers.HeNormal(), | |
), | |
bn_branch2b=chainer.links.BatchNormalization(out_channels), | |
) | |
def __call__(self, x): | |
chainer.config.train = False | |
temp = self.res_branch1(x) | |
temp = self.bn_branch1(temp) | |
h = self.res_branch2a(x) | |
h = self.bn_branch2a(h) | |
h = chainer.functions.relu(h) | |
h = self.res_branch2b(h) | |
h = self.bn_branch2b(h) | |
h = temp + h | |
y = chainer.functions.relu(h) | |
return y | |
class ResNet18(chainer.Chain): | |
def __init__(self): | |
super(ResNet18, self).__init__( | |
conv1_relu=ConvolutionBlock(1, 32), | |
res2a_relu=ResidualBlock(32, 32), | |
res2b_relu=ResidualBlock(32, 32), | |
res3a_relu=ResidualBlockB(32, 64), | |
res3b_relu=ResidualBlock(64, 64), | |
res4a_relu=ResidualBlockB(64, 128), | |
res4b_relu=ResidualBlock(128, 128), | |
res5a_relu=ResidualBlockB(128, 256), | |
res5b_relu=ResidualBlock(256, 256), | |
) | |
def __call__(self, x): | |
chainer.config.train = False | |
h = self.conv1_relu(x) | |
h = chainer.functions.max_pooling_2d(h, (1, 9), (1, 4), (0, 4)) | |
h = self.res2a_relu(h) | |
h = self.res2b_relu(h) | |
h = self.res3a_relu(h) | |
h = self.res3b_relu(h) | |
h = self.res4a_relu(h) | |
h = self.res4b_relu(h) | |
h = self.res5a_relu(h) | |
h = self.res5b_relu(h) | |
y = chainer.functions.average_pooling_2d(h, h.data.shape[2:]) | |
return y | |