def __init__(self, channels):
     super(ResidualBlock, self).__init__()
     self.conv1 = ConvLayer(channels, channels, kernel_size=3, stride=1)
     self.bn1 = torch.nn.BatchNorm2d(channels, affine=True)
     self.conv2 = ConvLayer(channels, channels, kernel_size=3, stride=1)
     self.bn2 = torch.nn.BatchNorm2d(channels, affine=True)
     self.relu = torch.nn.ReLU()
Example #2
0
    def __init__(self, channels, kernel):
        super(ResUnit, self).__init__()
        self.bn1 = nn.BatchNorm2d(channels, affine=True)
        self.conv1 = ConvLayer(channels, channels, kernel, stride=1)

        self.bn2 = nn.BatchNorm2d(channels, affine=True)
        self.conv2 = ConvLayer(channels, channels, kernel, stride=1)

        self.relu = nn.ReLU(inplace=True)
Example #3
0
    def __init__(self, dense_rate, inchannels):
        super(Hourglass, self).__init__()

        #        self.modules1 = []
        #        self.modules2 = []
        #        self.modules3 = []
        #        self.modules4 = []

        self.channels = inchannels
        assert dense_rate % 2 == 0, 'The dense_rate must be even'
        half_rate = dense_rate // 2
        self.rate = half_rate

        #        for i in range(half_rate):
        self.block1 = nn.Sequential(
            nn.MaxPool2d(kernel_size=2, stride=2), ResUnit(self.channels, 3),
            Hrgls_ResUnit(self.channels, (self.channels * 2)))
        self.channels = self.channels * 2
        #            self.modules1.append(block)

        #        for i in range(half_rate):
        self.block2 = nn.Sequential(
            nn.MaxPool2d(kernel_size=2, stride=2), ResUnit(self.channels, 3),
            Hrgls_ResUnit(self.channels, (self.channels * 2)))
        self.channels = self.channels * 2
        #            self.modules2.append(block)

        #        for i in range(half_rate):
        self.block3 = nn.Sequential(
            ResUnit(self.channels, 3),
            Hrgls_ResUnit(self.channels, (self.channels // 2)),
            nn.Upsample(scale_factor=2, mode='nearest'),
            ConvLayer((self.channels // 2), (self.channels // 2), 3, 1),
            nn.BatchNorm2d((self.channels // 2)))
        self.channels = self.channels // 2
        #            self.modules3.append(block)

        #        for i in range(half_rate):
        self.block4 = nn.Sequential(
            ResUnit(self.channels, 3),
            Hrgls_ResUnit(self.channels, (self.channels // 2)),
            nn.Upsample(scale_factor=2, mode='nearest'),
            ConvLayer((self.channels // 2), (self.channels // 2), 3, 1),
            nn.BatchNorm2d((self.channels // 2)))
        self.channels = self.channels // 2
        #            self.modules4.append(block)

        self.final = nn.Sequential(ResUnit(self.channels, 1),
                                   ResUnit(self.channels, 1))
Example #4
0
    def __init__(self, inchannels, outchannels):
        super(Hrgls_ResUnit, self).__init__()
        self.bn1 = nn.BatchNorm2d(inchannels, affine=True)
        self.conv1 = ConvLayer(inchannels, inchannels, 1, 1)

        self.bn2 = nn.BatchNorm2d(inchannels, affine=True)
        self.conv2 = ConvLayer(inchannels, outchannels, 3, 1)

        self.bn3 = nn.BatchNorm2d(outchannels, affine=True)
        self.conv3 = ConvLayer(outchannels, outchannels, 1, 1)

        self.bn4 = nn.BatchNorm2d(inchannels, affine=True)
        self.conv4 = ConvLayer(inchannels, outchannels, 1, 1)

        self.relu = nn.ReLU(inplace=True)
Example #5
0
    def __init__(self):
        super(AlignNet2, self).__init__()

        #self.vgg = Vgg16().eval()
        self.kron = KronEmbed()

        self.res1 = ResidualBlock(512)
        self.res2 = ResidualBlock(512)
        self.res3 = ResidualBlock(512)

        self.up1 = UpLayer(512, 256, kernel_size=3, stride=1, upsample=2)
        self.bn1 = nn.BatchNorm2d(256, affine=True)

        self.up2 = UpLayer(256, 128, kernel_size=3, stride=1, upsample=2)
        self.bn2 = nn.BatchNorm2d(128, affine=True)

        self.up3 = UpLayer(128, 64, kernel_size=3, stride=1, upsample=2)
        self.bn3 = nn.BatchNorm2d(64, affine=True)

        self.up4 = UpLayer(64, 32, kernel_size=3, stride=1, upsample=2)
        self.bn4 = nn.BatchNorm2d(32, affine=True)

        self.relu = nn.ReLU(inplace=True)

        self.final = ConvLayer(32, 3, kernel_size=9, stride=1)
Example #6
0
 def create_layers(self):
     next_input_shape = self.input_shape
     layers = []
     for layer in self.layers_description:
         if type(layer) == ConvLayer_w:
             layers.append(
                 ConvLayer(input_shape=next_input_shape,
                           output_images=layer.output_images,
                           kernel_size=layer.kernel_size,
                           activation_fn=layer.activation_fn))
             next_input_shape = (layer.output_images, next_input_shape[1] -
                                 layer.kernel_size + 1,
                                 next_input_shape[2] - layer.kernel_size +
                                 1)
         elif type(layer) == PoolLayer_w:
             layers.append(PoolLayer(shape=layer.shape))
             next_input_shape = (next_input_shape[0],
                                 int(next_input_shape[1] // layer.shape[0]),
                                 int(next_input_shape[2] // layer.shape[1]))
         elif type(layer) == FullyConectedLayer_w:
             layers.append(
                 FullyConectedLayer(in_size=int(np.prod(next_input_shape)),
                                    out_size=layer.size,
                                    activation_fn=layer.activation_fn))
             next_input_shape = (layer.size, )
     return layers
Example #7
0
    def __init__(self, inchannels, outchannels):
        super(Up_Unit, self).__init__()

        self.up = nn.Sequential(nn.Upsample(scale_factor=2, mode='nearest'),
                                ConvLayer(inchannels, outchannels, 3, 1),
                                nn.BatchNorm2d(outchannels, affine=True),
                                nn.ReLU(inplace=True))
 def __init__(self, x, y, hidden_dims, input_dim = 23, dropout = 0, reg = 0.0, 
         weight_scale = 1e-2, dtype = np.float32):
 
     """
     Initialize a new fullyconnectednet
     
     Inputs:
     - hidden_dims: A list of integers giving the size of each hidden layer
     - input_dim: An integer giving the size of the input
     - dropout: scalar between 0 and 1 giving dropout strength, if dropout==0, then
                do not use dropout at all
     - reg: scalar giving l2 regularization strength
     - dtype: A numpy datatype object: all variables will use this type. 
     """
     self.reg = reg
     self.layers = []
     self.num_layers = len(hidden_dims)
     self.y = y
     
     for i in xrange(self.num_layers):
         if i == 0:
             layer = ConvLayer(
                     None, 
                     None, 
                     input = x,
                     weight_scale = weight_scale,
                     activation = tf.nn.relu,
                     n_visible = input_dim * 2,
                     n_hidden = hidden_dims[i],
                     dropout = dropout
                     )
         else:
             layer = ConvLayer(
                     None, 
                     None, 
                     input = self.layers[-1].output,
                     weight_scale = weight_scale,
                     activation = tf.nn.relu,
                     n_visible = hidden_dims[i - 1] * 2,
                     n_hidden = hidden_dims[i],
                     dropout = dropout
                     )
         self.layers.append(layer)
Example #9
0
 def __init__(self,inchannel,outchannel,kernel_size=3,stride=1):
     super(DownLayer,self).__init__()
     #self.conv1=ConvLayer(inchannel,inchannel,kernel_size,stride=1 )
     self.conv1 = ResidualBlock(inchannel)
     self.bn1 = torch.nn.BatchNorm2d(inchannel, affine=True )
     self.conv2 = ConvLayer(inchannel, outchannel, kernel_size, stride =2 )
     self.bn2 = torch.nn.BatchNorm2d(outchannel, affine=True )
     #self.conv3=ConvLayer(outchannel,outchannel,kernel_size,stride =1)
     self.conv3 = ResidualBlock(outchannel)
     self.bn3 = torch.nn.BatchNorm2d(outchannel , affine=True )
     self.relu = torch.nn.ReLU(inplace=True)
    def __init__(self):
        super(AlignNet, self).__init__()

        self.down = Res_Module()

        self.match1 = Matching_Module(inchannels=256)

        self.mid1 = nn.Sequential(ResUnit(channels=256, kernel=3),
                                  ResUnit(channels=256, kernel=3))

        self.mid2 = nn.Sequential(ResUnit(channels=256, kernel=3),
                                  ResUnit(channels=256, kernel=3))

        self.match2 = Matching_Module(inchannels=256)

        self.up1 = Up_Unit(inchannels=256, outchannels=128)
        self.up2 = Up_Unit(inchannels=128, outchannels=64)
        self.up3 = Up_Unit(inchannels=64, outchannels=16)
        self.up4 = Up_Unit(inchannels=16, outchannels=3)

        self.final = nn.Sequential(
            ConvLayer(in_channels=3, out_channels=3, kernel_size=7),
            ConvLayer(in_channels=3, out_channels=3, kernel_size=3),
            ConvLayer(in_channels=3, out_channels=3, kernel_size=1))
Example #11
0
def init_params(options):

    params = OrderedDict()

    if not use_conv:

        params = get_layer('ff')[0](options,
                                    params,
                                    prefix='layer_1',
                                    nin=INPUT_SIZE,
                                    nout=args.dims[0],
                                    ortho=False)

        params = get_layer('ff')[0](options,
                                    params,
                                    prefix='layer_2',
                                    nin=args.dims[0],
                                    nout=args.dims[0],
                                    ortho=False)

    if use_conv and args.dataset == "lsun":

        bn = True
        params = ConvLayer(3, 64, 5, 2, params=params, prefix='conv_1', bn=bn)
        params = ConvLayer(64,
                           128,
                           5,
                           2,
                           params=params,
                           prefix='conv_2',
                           bn=bn)
        params = ConvLayer(128,
                           256,
                           5,
                           2,
                           params=params,
                           prefix='conv_3',
                           bn=bn)

        params = get_layer('ff')[0](options,
                                    params,
                                    prefix='layer_1',
                                    nin=8 * 8 * 256,
                                    nout=1024,
                                    ortho=False)
        params = get_layer('ff')[0](options,
                                    params,
                                    prefix='layer_2',
                                    nin=1024,
                                    nout=1024,
                                    ortho=False)
        params = get_layer('ff')[0](options,
                                    params,
                                    prefix='layer_3',
                                    nin=1024,
                                    nout=1024,
                                    ortho=False)
        params = get_layer('ff')[0](options,
                                    params,
                                    prefix='layer_4',
                                    nin=1024,
                                    nout=1024,
                                    ortho=False)
        params = get_layer('ff')[0](options,
                                    params,
                                    prefix='layer_5',
                                    nin=1024,
                                    nout=8 * 8 * 256,
                                    ortho=False)

        params = ConvLayer(256,
                           128,
                           5,
                           -2,
                           params=params,
                           prefix='conv_4_mu',
                           bn=bn)
        params = ConvLayer(128,
                           64,
                           5,
                           -2,
                           params=params,
                           prefix='conv_5_mu',
                           bn=bn)
        params = ConvLayer(64, 3, 5, -2, params=params, prefix='conv_6_mu')

        params = ConvLayer(256,
                           128,
                           5,
                           -2,
                           params=params,
                           prefix='conv_4_s',
                           bn=bn)
        params = ConvLayer(128,
                           64,
                           5,
                           -2,
                           params=params,
                           prefix='conv_5_s',
                           bn=bn)
        params = ConvLayer(64, 3, 5, -2, params=params, prefix='conv_6_s')

    elif use_conv and args.dataset == "MNIST":

        bn = True
        params = ConvLayer(1, 128, 5, 2, params=params, prefix='conv_1', bn=bn)
        params = ConvLayer(128,
                           256,
                           5,
                           2,
                           params=params,
                           prefix='conv_2',
                           bn=bn)
        params = get_layer('ff')[0](options,
                                    params,
                                    prefix='layer_1',
                                    nin=7 * 7 * 256,
                                    nout=1024,
                                    ortho=False)
        params = get_layer('ff')[0](options,
                                    params,
                                    prefix='layer_2',
                                    nin=1024,
                                    nout=256,
                                    ortho=False)
        params = get_layer('ff')[0](options,
                                    params,
                                    prefix='layer_3',
                                    nin=256,
                                    nout=7 * 7 * 256,
                                    ortho=False)

        params = ConvLayer(256,
                           128,
                           5,
                           -2,
                           params=params,
                           prefix='conv_4_mu',
                           bn=bn)
        params = ConvLayer(128, 1, 5, -2, params=params, prefix='conv_5_mu')

    else:

        #TODO: Ideally, only in the output layer, flag=True should be set.
        if len(args.dims) == 1:
            params = get_layer('ff')[0](options,
                                        params,
                                        prefix='mu_0',
                                        nin=args.dims[0],
                                        nout=INPUT_SIZE,
                                        ortho=False,
                                        flag=True)
            if args.noise == 'gaussian':
                params = get_layer('ff')[0](options,
                                            params,
                                            prefix='sigma_0',
                                            nin=args.dims[0],
                                            nout=INPUT_SIZE,
                                            ortho=False)

        for i in range(len(args.dims) - 1):
            params = get_layer('ff')[0](options,
                                        params,
                                        prefix='mu_' + str(i),
                                        nin=args.dims[i],
                                        nout=args.dims[i + 1],
                                        ortho=False)
            if args.noise == 'gaussian':
                params = get_layer('ff')[0](options,
                                            params,
                                            prefix='sigma_' + str(i),
                                            nin=args.dims[i],
                                            nout=args.dims[i + 1],
                                            ortho=False,
                                            flag=True)

        if len(args.dims) > 1:
            params = get_layer('ff')[0](options,
                                        params,
                                        prefix='mu_' + str(i + 1),
                                        nin=args.dims[i + 1],
                                        nout=INPUT_SIZE,
                                        ortho=False,
                                        flag=True)

            if args.noise == 'gaussian':
                params = get_layer('ff')[0](options,
                                            params,
                                            prefix='sigma_' + str(i + 1),
                                            nin=args.dims[i + 1],
                                            nout=INPUT_SIZE,
                                            ortho=False)
    return params
def init_params(options):
    params = OrderedDict()
    if use_conv:
        bn = True
        params = ConvLayer(3, 64, 5, 2, params=params, prefix='conv_1', bn=bn)
        params = ConvLayer(64,
                           128,
                           5,
                           2,
                           params=params,
                           prefix='conv_2',
                           bn=bn)
        params = ConvLayer(128,
                           256,
                           5,
                           2,
                           params=params,
                           prefix='conv_3',
                           bn=bn)
        '''
        params = get_layer('ff')[0](options, params, prefix='layer_1',nin=4*4*256, nout=2048,ortho=False)
        params = get_layer('ff')[0](options, params, prefix='layer_2',nin=2048, nout=2048,ortho=False)
        params = get_layer('ff')[0](options, params, prefix='layer_3',nin=2048, nout=2048,ortho=False)
        params = get_layer('ff')[0](options, params, prefix='layer_4',nin=2048, nout=2048,ortho=False)
        params = get_layer('ff')[0](options, params, prefix='layer_5',nin=2048, nout=4*4*256,ortho=False)
        '''
        '''

        params = param_init_convlayer(options, params, prefix='conv_1', nin=3, nout=64, kernel_len=5, batch_norm=bn)
        params[_p('conv_1', 'newmu')] = np.zeros(shape=(args.num_steps *args.meta_steps, 64)).astype('float32')
        params[_p('conv_1', 'newsigma')] = np.ones(shape=(args.num_steps *args.meta_steps, 64)).astype('float32')

        params = param_init_convlayer(options, params, prefix='conv_2', nin=64, nout=128, kernel_len=5, batch_norm=bn)
        params[_p('conv_2', 'newmu')] = np.zeros(shape=(args.num_steps *args.meta_steps, 128)).astype('float32')
        params[_p('conv_2', 'newsigma')] = np.ones(shape=(args.num_steps *args.meta_steps, 128)).astype('float32')

        params = param_init_convlayer(options, params, prefix='conv_3', nin=128, nout=256, kernel_len=5, batch_norm=bn)
        params[_p('conv_3', 'newmu')] = np.zeros(shape=(args.num_steps *args.meta_steps, 256)).astype('float32')
        params[_p('conv_3', 'newsigma')] = np.ones(shape=(args.num_steps *args.meta_steps, 256)).astype('float32')
        '''

        params = get_layer('ff')[0](options,
                                    params,
                                    prefix='layer_1',
                                    prefix_bnorm='layer_1_step_0',
                                    nin=4 * 4 * 256,
                                    nout=2048,
                                    ortho=False,
                                    batch_norm=True)
        params = get_layer('ff')[0](options,
                                    params,
                                    prefix='layer_2',
                                    prefix_bnorm='layer_2_step_0',
                                    nin=2048,
                                    nout=2048,
                                    ortho=False,
                                    batch_norm=True)
        params = get_layer('ff')[0](options,
                                    params,
                                    prefix='layer_3',
                                    prefix_bnorm='layer_3_step_0',
                                    nin=2048,
                                    nout=2048,
                                    ortho=False,
                                    batch_norm=True)
        params = get_layer('ff')[0](options,
                                    params,
                                    prefix='layer_4',
                                    prefix_bnorm='layer_4_step_0',
                                    nin=2048,
                                    nout=2048,
                                    ortho=False,
                                    batch_norm=True)
        params = get_layer('ff')[0](options,
                                    params,
                                    prefix='layer_5',
                                    prefix_bnorm='layer_5_step_0',
                                    nin=2048,
                                    nout=4 * 4 * 256,
                                    ortho=False,
                                    batch_norm=True)

        params[_p('layer1_bnorm',
                  'newmu')] = np.zeros(shape=(args.num_steps * args.meta_steps,
                                              2048)).astype('float32')
        params[_p('layer1_bnorm', 'newsigma')] = np.ones(
            shape=(args.num_steps * args.meta_steps, 2048)).astype('float32')

        params[_p('layer2_bnorm',
                  'newmu')] = np.zeros(shape=(args.num_steps * args.meta_steps,
                                              2048)).astype('float32')
        params[_p('layer2_bnorm', 'newsigma')] = np.ones(
            shape=(args.num_steps * args.meta_steps, 2048)).astype('float32')

        params[_p('layer3_bnorm',
                  'newmu')] = np.zeros(shape=(args.num_steps * args.meta_steps,
                                              2048)).astype('float32')
        params[_p('layer3_bnorm', 'newsigma')] = np.ones(
            shape=(args.num_steps * args.meta_steps, 2048)).astype('float32')

        params[_p('layer4_bnorm',
                  'newmu')] = np.zeros(shape=(args.num_steps * args.meta_steps,
                                              2048)).astype('float32')
        params[_p('layer4_bnorm', 'newsigma')] = np.ones(
            shape=(args.num_steps * args.meta_steps, 2048)).astype('float32')

        params[_p('layer5_bnorm',
                  'newmu')] = np.zeros(shape=(args.num_steps * args.meta_steps,
                                              4 * 4 * 256)).astype('float32')
        params[_p('layer5_bnorm',
                  'newsigma')] = np.ones(shape=(args.num_steps *
                                                args.meta_steps,
                                                4 * 4 * 256)).astype('float32')

        params = ConvLayer(256,
                           128,
                           5,
                           -2,
                           params=params,
                           prefix='conv_4_mu',
                           bn=bn)
        params = ConvLayer(128,
                           64,
                           5,
                           -2,
                           params=params,
                           prefix='conv_5_mu',
                           bn=bn)
        params = ConvLayer(64, 3, 5, -2, params=params, prefix='conv_6_mu')

        params = ConvLayer(256,
                           128,
                           5,
                           -2,
                           params=params,
                           prefix='conv_4_s',
                           bn=bn)
        params = ConvLayer(128,
                           64,
                           5,
                           -2,
                           params=params,
                           prefix='conv_5_s',
                           bn=bn)
        params = ConvLayer(64, 3, 5, -2, params=params, prefix='conv_6_s')
        '''
        params = param_init_convlayer(options, params, prefix='conv_4_mu', nin=256, nout=128, kernel_len=5, batch_norm=bn)
        params[_p('conv_4_mu', 'newmu')] = np.zeros(shape=(args.num_steps *args.meta_steps, 128)).astype('float32')
        params[_p('conv_4_mu', 'newsigma')] = np.ones(shape=(args.num_steps *args.meta_steps, 128)).astype('float32')

        params = param_init_convlayer(options, params, prefix='conv_5_mu', nin=128, nout=64, kernel_len=5, batch_norm=bn)
        params[_p('conv_5_mu', 'newmu')] = np.zeros(shape=(args.num_steps *args.meta_steps, 64)).astype('float32')
        params[_p('conv_5_mu', 'newsigma')] = np.ones(shape=(args.num_steps *args.meta_steps, 64)).astype('float32')

        params = param_init_convlayer(options, params, prefix='conv_6_mu', nin=64, nout=3, kernel_len=5, batch_norm =False)

        params = param_init_convlayer(options, params, prefix='conv_4_s', nin=256, nout=128, kernel_len=5, batch_norm=bn)
        params[_p('conv_4_s', 'newmu')] = np.zeros(shape=(args.num_steps *args.meta_steps, 128)).astype('float32')
        params[_p('conv_4_s', 'newsigma')] = np.ones(shape=(args.num_steps *args.meta_steps, 128)).astype('float32')

        params = param_init_convlayer(options, params, prefix='conv_5_s', nin=128, nout=64, kernel_len=5, batch_norm=bn)
        params[_p('conv_5_s', 'newmu')] = np.zeros(shape=(args.num_steps *args.meta_steps, 64)).astype('float32')
        params[_p('conv_5_s', 'newsigma')] = np.ones(shape=(args.num_steps *args.meta_steps, 64)).astype('float32')

        params = param_init_convlayer(options, params, prefix='conv_6_s', nin=64, nout=3, kernel_len=5, batch_norm = False)
        '''

    return params
Example #13
0
def init_params(options):

    params = OrderedDict()

    if not use_conv:

        params = get_layer('ff')[0](options,
                                    params,
                                    prefix='layer_1',
                                    nin=INPUT_SIZE,
                                    nout=args.dims[0],
                                    ortho=False)

        params = get_layer('ff')[0](options,
                                    params,
                                    prefix='layer_2',
                                    nin=args.dims[0],
                                    nout=args.dims[0],
                                    ortho=False)
    dilated_conv = False
    if dilated_conv:
        bn = True
        filter_size = 5

        c1 = AtrousConvolution2D(128,
                                 filter_size,
                                 filter_size,
                                 atrous_rate=(1, 1),
                                 border_mode='same')
        c1.build((100, 3, 32, 32))
        qw = c1.get_weights()
        params[_p('c1', 'w')] = qw[0]
        params[_p('c1', 'b')] = qw[1]

        if bn:
            params = bnorm_layer_init((100, 3, 32, 128), params, 'c1_bn')

        c2 = AtrousConvolution2D(128,
                                 filter_size,
                                 filter_size,
                                 atrous_rate=(2, 2),
                                 border_mode='same')
        c2.build((100, 3, 32, 128))
        qw = c2.get_weights()
        params[_p('c2', 'w')] = qw[0]
        params[_p('c2', 'b')] = qw[1]

        if bn:
            params = bnorm_layer_init((100, 3, 32, 128), params, 'c2_bn')

        c3 = AtrousConvolution2D(128,
                                 filter_size,
                                 filter_size,
                                 atrous_rate=(4, 4),
                                 border_mode='same')
        c3.build((100, 3, 32, 128))
        qw = c3.get_weights()
        params[_p('c3', 'w')] = qw[0]
        params[_p('c3', 'b')] = qw[1]

        if bn:
            params = bnorm_layer_init((100, 3, 32, 128), params, 'c3_bn')

        c4_mu = AtrousConvolution2D(128,
                                    filter_size,
                                    filter_size,
                                    atrous_rate=(4, 4),
                                    border_mode='same')
        c4_mu.build((100, 3, 32, 128))
        qw = c4_mu.get_weights()
        params[_p('c4_mu', 'w')] = qw[0]
        params[_p('c4_mu', 'b')] = qw[1]

        if bn:
            params = bnorm_layer_init((100, 3, 32, 128), params, 'c4_mu_bn')

        c5_mu = AtrousConvolution2D(128,
                                    filter_size,
                                    filter_size,
                                    atrous_rate=(2, 2),
                                    border_mode='same')
        c5_mu.build((100, 3, 32, 128))
        qw = c5_mu.get_weights()
        params[_p('c5_mu', 'w')] = qw[0]
        params[_p('c5_mu', 'b')] = qw[1]

        if bn:
            params = bnorm_layer_init((100, 3, 32, 128), params, 'c5_mu_bn')

        c6_mu = AtrousConvolution2D(32,
                                    filter_size,
                                    filter_size,
                                    atrous_rate=(1, 1),
                                    border_mode='same')
        c6_mu.build((100, 3, 32, 128))
        qw = c6_mu.get_weights()
        params[_p('c6_mu', 'w')] = qw[0]
        params[_p('c6_mu', 'b')] = qw[1]

        c4_s = AtrousConvolution2D(128,
                                   filter_size,
                                   filter_size,
                                   atrous_rate=(4, 4),
                                   border_mode='same')
        c4_s.build((100, 3, 32, 128))
        qw = c4_s.get_weights()
        params[_p('c4_s', 'w')] = qw[0]
        params[_p('c4_s', 'b')] = qw[1]
        if bn:
            params = bnorm_layer_init((100, 3, 32, 128), params, 'c4_s_bn')

        c5_s = AtrousConvolution2D(128,
                                   filter_size,
                                   filter_size,
                                   atrous_rate=(2, 2),
                                   border_mode='same')
        c5_s.build((100, 3, 32, 128))
        qw = c5_s.get_weights()
        params[_p('c5_s', 'w')] = qw[0]
        params[_p('c5_s', 'b')] = qw[1]

        if bn:
            params = bnorm_layer_init((100, 3, 32, 128), params, 'c5_s_bn')

        c6_s = AtrousConvolution2D(32,
                                   filter_size,
                                   filter_size,
                                   atrous_rate=(1, 1),
                                   border_mode='same')
        c6_s.build((100, 3, 32, 128))
        qw = c6_s.get_weights()
        params[_p('c6_s', 'w')] = qw[0]
        params[_p('c6_s', 'b')] = qw[1]

    if use_conv:

        bn = True
        params = ConvLayer(3, 64, 5, 2, params=params, prefix='conv_1', bn=bn)
        params = ConvLayer(64,
                           128,
                           5,
                           2,
                           params=params,
                           prefix='conv_2',
                           bn=bn)
        params = ConvLayer(128,
                           256,
                           5,
                           2,
                           params=params,
                           prefix='conv_3',
                           bn=bn)

        params = get_layer('ff')[0](options,
                                    params,
                                    prefix='layer_1',
                                    nin=4 * 4 * 256,
                                    nout=2048,
                                    ortho=False)
        params = get_layer('ff')[0](options,
                                    params,
                                    prefix='layer_2',
                                    nin=2048,
                                    nout=2048,
                                    ortho=False)
        params = get_layer('ff')[0](options,
                                    params,
                                    prefix='layer_3',
                                    nin=2048,
                                    nout=2048,
                                    ortho=False)
        params = get_layer('ff')[0](options,
                                    params,
                                    prefix='layer_4',
                                    nin=2048,
                                    nout=2048,
                                    ortho=False)
        params = get_layer('ff')[0](options,
                                    params,
                                    prefix='layer_5',
                                    nin=2048,
                                    nout=4 * 4 * 256,
                                    ortho=False)

        params = ConvLayer(256,
                           128,
                           5,
                           -2,
                           params=params,
                           prefix='conv_4_mu',
                           bn=bn)
        params = ConvLayer(128,
                           64,
                           5,
                           -2,
                           params=params,
                           prefix='conv_5_mu',
                           bn=bn)
        params = ConvLayer(64, 3, 5, -2, params=params, prefix='conv_6_mu')

        params = ConvLayer(256,
                           128,
                           5,
                           -2,
                           params=params,
                           prefix='conv_4_s',
                           bn=bn)
        params = ConvLayer(128,
                           64,
                           5,
                           -2,
                           params=params,
                           prefix='conv_5_s',
                           bn=bn)
        params = ConvLayer(64, 3, 5, -2, params=params, prefix='conv_6_s')

    else:
        #TODO: Ideally, only in the output layer, flag=True should be set.
        if len(args.dims) == 1:
            params = get_layer('ff')[0](options,
                                        params,
                                        prefix='mu_0',
                                        nin=args.dims[0],
                                        nout=INPUT_SIZE,
                                        ortho=False,
                                        flag=True)
            if args.noise == 'gaussian':
                params = get_layer('ff')[0](options,
                                            params,
                                            prefix='sigma_0',
                                            nin=args.dims[0],
                                            nout=INPUT_SIZE,
                                            ortho=False)

        for i in range(len(args.dims) - 1):
            params = get_layer('ff')[0](options,
                                        params,
                                        prefix='mu_' + str(i),
                                        nin=args.dims[i],
                                        nout=args.dims[i + 1],
                                        ortho=False)
            if args.noise == 'gaussian':
                params = get_layer('ff')[0](options,
                                            params,
                                            prefix='sigma_' + str(i),
                                            nin=args.dims[i],
                                            nout=args.dims[i + 1],
                                            ortho=False,
                                            flag=True)

        if len(args.dims) > 1:
            params = get_layer('ff')[0](options,
                                        params,
                                        prefix='mu_' + str(i + 1),
                                        nin=args.dims[i + 1],
                                        nout=INPUT_SIZE,
                                        ortho=False,
                                        flag=True)

            if args.noise == 'gaussian':
                params = get_layer('ff')[0](options,
                                            params,
                                            prefix='sigma_' + str(i + 1),
                                            nin=args.dims[i + 1],
                                            nout=INPUT_SIZE,
                                            ortho=False)
    return params
Example #14
0
epoch = 50  # learning epoches
batch_size = 32  # Use mini batch
n_sample = 500  # Using for Error, Accuracy samples
alpha = 1  # how many times do you want to learn in 1 epoch. if 1, whole data learns.

input_train, input_test, correct_train, correct_test = cifar10_call(N)

n_train = input_train.shape[0]
n_test = input_test.shape[0]

img_h = 32
img_w = 32
img_ch = 3

# -- 각 층의 초기화 --
cl1 = ConvLayer(img_ch, img_h, img_w, 30, 3, 3, stride=1, pad=1)  # 앞3개:인풋 중간3개:필터
cl2 = ConvLayer(cl1.y_ch, cl1.y_h, cl1.y_w, 30, 3, 3, stride=1, pad=1)
pl1 = PoolingLayer(cl2.y_ch, cl2.y_h, cl2.y_w, pool=2, pad=0)  # pool:풀링크기(2*2), pad:패딩 너비
c_dr1 = fn.dropout(0.25)

cl3 = ConvLayer(pl1.y_ch, pl1.y_h, pl1.y_w, 60, 3, 3, stride=1, pad=1)
pl2 = PoolingLayer(cl3.y_ch, cl3.y_h, cl3.y_w, pool=2, pad=0)
c_dr2 = fn.dropout(0.25)

cl4 = ConvLayer(pl2.y_ch, pl2.y_h, pl2.y_w, 120, 3, 3, stride=1, pad=1)
pl3 = PoolingLayer(cl4.y_ch, cl4.y_h, cl4.y_w, pool=2, pad=0)

n_fc_in = pl3.y_ch * pl3.y_h * pl3.y_w
ml1 = MiddleLayer(n_fc_in, 500)
dr1 = fn.dropout(0.5)
ml2 = MiddleLayer(500, 500)
Example #15
0
def test_something():
    layer0 = ConvLayer((28, 28, 1), (9,9,2,2))
    layer0.W = 1
    print layer0.W
Example #16
0
        res /= y_valid.shape[0]
        res *= 100
        print("\n Epoch: {0}, validate accuracy: {1:.2f}, total loss: {2:.4f}".
              format(epo, res, tloss))


isLeNet5 = False
if 'lenet5' in sys.argv[1:]:
    isLeNet5 = True
Num = 55000
ln_layers = []
print("About to train model, lenet-5: {0}".format(isLeNet5))
if isLeNet5:
    lenet_act = 'tanh'
    # lenet_act = 'sigmoid'
    ln_layers.append(ConvLayer(1, 6, KSize=5, activation=lenet_act))
    ln_layers.append(MaxPoolLayer())
    ln_layers.append(ConvLayer(6, 16, KSize=5, activation=lenet_act))
    ln_layers.append(MaxPoolLayer())
    ln_layers.append(FullConLayer(256, 120, activation=lenet_act))
    ln_layers.append(FullConLayer(120, 84, activation=lenet_act, dropout=True))
    ln_layers.append(SoftMaxLayer(84, 10))
else:
    Num = 49920
    lenet_act = 'relu'
    ln_layers.append(ConvLayer(1, 32, KSize=5, activation=lenet_act))
    ln_layers.append(MaxPoolLayer())
    ln_layers.append(ConvLayer(32, 64, KSize=5, activation=lenet_act))
    ln_layers.append(MaxPoolLayer())
    ln_layers.append(
        FullConLayer(1024, 1024, activation=lenet_act, dropout=True))
Example #17
0
    def __init__(self, rng, weight, use_last_layer_weight=False):
        # weight: list type,0-31,the first 32 W and b
        x = T.tensor4('x')
        y = T.imatrix('y')
        learning_rate = T.scalar('learning_rate')
        self.layer1_input = x  #224

        self.layer1 = ConvLayer(rng,
                                input=self.layer1_input,
                                filter_shape=(64, 3, 3, 3),
                                layer_index=1,
                                W=weight[0],
                                b=weight[1])
        self.layer2 = ConvLayer(rng,
                                input=self.layer1.output,
                                filter_shape=(64, 64, 3, 3),
                                layer_index=2,
                                W=weight[2],
                                b=weight[3])
        self.pool1 = PoolLayer(input=self.layer2.output,
                               poolsize=(2, 2),
                               layer_index=1)  #112

        self.layer3 = ConvLayer(rng,
                                input=self.pool1.output,
                                filter_shape=(128, 64, 3, 3),
                                layer_index=3,
                                W=weight[4],
                                b=weight[5])
        self.layer4 = ConvLayer(rng,
                                input=self.layer3.output,
                                filter_shape=(128, 128, 3, 3),
                                layer_index=4,
                                W=weight[6],
                                b=weight[7])
        self.pool2 = PoolLayer(input=self.layer4.output,
                               poolsize=(2, 2),
                               layer_index=2)  #56

        self.layer5 = ConvLayer(rng,
                                input=self.pool2.output,
                                filter_shape=(256, 128, 3, 3),
                                layer_index=5,
                                W=weight[8],
                                b=weight[9])
        self.layer6 = ConvLayer(rng,
                                input=self.layer5.output,
                                filter_shape=(256, 256, 3, 3),
                                layer_index=6,
                                W=weight[10],
                                b=weight[11])
        self.layer7 = ConvLayer(rng,
                                input=self.layer6.output,
                                filter_shape=(256, 256, 3, 3),
                                layer_index=7,
                                W=weight[12],
                                b=weight[13])
        self.pool3 = PoolLayer(input=self.layer7.output,
                               poolsize=(2, 2),
                               layer_index=3)  #28

        self.layer8 = ConvLayer(rng,
                                input=self.pool3.output,
                                filter_shape=(512, 256, 3, 3),
                                layer_index=8,
                                W=weight[14],
                                b=weight[15])
        self.layer9 = ConvLayer(rng,
                                input=self.layer8.output,
                                filter_shape=(512, 512, 3, 3),
                                layer_index=9,
                                W=weight[16],
                                b=weight[17])
        self.layer10 = ConvLayer(rng,
                                 input=self.layer9.output,
                                 filter_shape=(512, 512, 3, 3),
                                 layer_index=10,
                                 W=weight[18],
                                 b=weight[19])
        self.pool4 = PoolLayer(input=self.layer10.output,
                               poolsize=(2, 2),
                               layer_index=4)  #14

        self.layer11 = ConvLayer(rng,
                                 input=self.pool4.output,
                                 filter_shape=(512, 512, 3, 3),
                                 layer_index=11,
                                 W=weight[20],
                                 b=weight[21])
        self.layer12 = ConvLayer(rng,
                                 input=self.layer11.output,
                                 filter_shape=(512, 512, 3, 3),
                                 layer_index=12,
                                 W=weight[22],
                                 b=weight[23])
        self.layer13 = ConvLayer(rng,
                                 input=self.layer12.output,
                                 filter_shape=(512, 512, 3, 3),
                                 layer_index=13,
                                 W=weight[24],
                                 b=weight[25])
        self.pool5 = PoolLayer(input=self.layer13.output,
                               poolsize=(2, 2),
                               layer_index=5)  #7

        if use_last_layer_weight:  #use weight of layer14/15/16
            self.layer14 = HiddenLayer(rng,
                                       input=self.pool5.output.flatten(ndim=2),
                                       n_in=25088,
                                       n_out=1024,
                                       layer_index=14,
                                       W=weight[26],
                                       b=weight[27])
            self.layer15 = HiddenLayer(rng,
                                       input=self.layer14.output,
                                       n_in=1024,
                                       n_out=1024,
                                       layer_index=15,
                                       W=weight[28],
                                       b=weight[29])
            self.layer16 = SoftmaxLayer(rng,
                                        input=self.layer15.output,
                                        n_in=1024,
                                        n_out=7,
                                        layer_index=16,
                                        W=weight[30],
                                        b=weight[31])
        else:
            self.layer14 = HiddenLayer(rng,
                                       input=self.pool5.output.flatten(ndim=2),
                                       n_in=25088,
                                       n_out=1024,
                                       layer_index=14)
            self.layer15 = HiddenLayer(rng,
                                       input=self.layer14.output,
                                       n_in=1024,
                                       n_out=1024,
                                       layer_index=15)
            self.layer16 = SoftmaxLayer(rng,
                                        input=self.layer15.output,
                                        n_in=1024,
                                        n_out=7,
                                        layer_index=16)

        # the objective loss
        self.loss = self.layer16.squared_error(y)

        self.params = self.layer16.params+self.layer15.params+self.layer14.params+self.layer13.params+self.layer12.params\
                     +self.layer11.params+self.layer10.params+self.layer9.params +self.layer8.params +self.layer7.params\
                     +self.layer6.params +self.layer5.params +self.layer4.params +self.layer3.params +self.layer2.params\
                     +self.layer1.params

        # optimization methods
        updates = lasagne.updates.nesterov_momentum(
            self.loss, self.params, learning_rate=learning_rate, momentum=0.9)

        self.train = theano.function(
            inputs=[x, y, learning_rate],
            outputs=[self.loss, self.layer16.errors(y)],
            updates=updates,
            allow_input_downcast=True)

        self.test = theano.function(
            inputs=[x, y],
            outputs=[self.loss, self.layer16.errors(y)],
            allow_input_downcast=True)
Example #18
0
    def __init__(self, rng, weight, use_last_layer_weight=False):
        # weight: list type,0-31,the first 32 W and b
        x = T.tensor4('x')
        y = T.imatrix('y')
        learning_rate = T.scalar('learning_rate')
        self.layer1_input = x  #224

        self.layer1 = ConvLayer(rng,
                                input=self.layer1_input,
                                filter_shape=(96, 3, 7, 7),
                                layer_index=1,
                                stride=(2, 2),
                                W=weight[0],
                                b=weight[1])  #output:
        self.LRN_1 = LRN(input=self.layer1.nopad_output, layer_index=1)

        self.pool1 = PoolLayer(input=self.LRN_1.output,
                               poolsize=(3, 3),
                               layer_index=1)  # 138

        self.layer2 = ConvLayer(rng,
                                input=self.pool1.output,
                                filter_shape=(256, 96, 5, 5),
                                layer_index=2,
                                W=weight[2],
                                b=weight[3])  #output:
        self.pool2 = PoolLayer(input=self.layer2.nopad_output,
                               poolsize=(2, 2),
                               layer_index=2)  #67

        self.layer3 = ConvLayer(rng,
                                input=self.pool2.output,
                                filter_shape=(512, 256, 3, 3),
                                layer_index=3,
                                W=weight[4],
                                b=weight[5])  #
        self.layer4 = ConvLayer(rng,
                                input=self.layer3.output,
                                filter_shape=(512, 512, 3, 3),
                                layer_index=4,
                                W=weight[6],
                                b=weight[7])  #
        self.layer5 = ConvLayer(rng,
                                input=self.layer4.output,
                                filter_shape=(512, 512, 3, 3),
                                layer_index=5,
                                W=weight[8],
                                b=weight[9])  #
        self.pool3 = PoolLayer(input=self.layer5.output,
                               poolsize=(3, 3),
                               layer_index=3)  #23

        if use_last_layer_weight:  #use weight of layer14/15/16
            self.layer6 = HiddenLayer(rng,
                                      input=self.pool3.output.flatten(ndim=2),
                                      n_in=18432,
                                      n_out=1024,
                                      layer_index=6,
                                      W=weight[10],
                                      b=weight[11])
            self.layer7 = HiddenLayer(rng,
                                      input=self.layer6.output,
                                      n_in=1024,
                                      n_out=1024,
                                      layer_index=7,
                                      W=weight[12],
                                      b=weight[13])
            self.layer8 = SoftmaxLayer(rng,
                                       input=self.layer7.output,
                                       n_in=1024,
                                       n_out=7,
                                       layer_index=8,
                                       W=weight[14],
                                       b=weight[15])
        else:
            self.layer6 = HiddenLayer(rng,
                                      input=self.pool3.output.flatten(ndim=2),
                                      n_in=18432,
                                      n_out=1024,
                                      layer_index=6)
            self.layer7 = HiddenLayer(rng,
                                      input=self.layer6.output,
                                      n_in=1024,
                                      n_out=1024,
                                      layer_index=7)
            self.layer8 = SoftmaxLayer(rng,
                                       input=self.layer7.output,
                                       n_in=1024,
                                       n_out=7,
                                       layer_index=8)

        # the objective loss
        self.loss = self.layer8.squared_error(y)

        self.params = self.layer8.params +self.layer7.params+self.layer6.params +self.layer5.params\
                      +self.layer4.params +self.layer3.params +self.layer2.params +self.layer1.params

        # optimization methods
        updates = lasagne.updates.nesterov_momentum(
            self.loss, self.params, learning_rate=learning_rate, momentum=0.9)
        #updates=lasagne.updates.rmsprop(self.loss, self.params, learning_rate, rho=0.9, epsilon=1e-06)

        self.train = theano.function(
            inputs=[x, y, learning_rate],
            outputs=[self.loss, self.layer8.errors(y)],
            updates=updates,
            allow_input_downcast=True)

        self.test = theano.function(inputs=[x, y],
                                    outputs=[self.loss,
                                             self.layer8.errors(y)],
                                    allow_input_downcast=True)
Example #19
0
fully_connected_settings = [500, 10]
# resnet
# layer_desc = [(64, 7), (256, 1), (64, 1), (64, 3), (256, 1), (64, 1), (64, 3), (256, 1),
#         (64, 1), (64, 3), (256, 1), (512, 1), (128, 1), (128, 3), (512, 1), (128, 1), (128, 3),
#         (512, 1), (128, 1), (128, 3), (512, 1), (128, 1), (128, 3)
#         ]
fully_connected_settings = [500, 10]

PEs = PE_gen(layer_desc[0][0], PE_PER_LEAF, LEAF_COUNT, PES)
mems = mem_gen(first_layer_mems, LEAF_COUNT, PE_PER_LEAF, MEMs)
assign_dests(PEs, mems, LEAF_COUNT)

# generate layers
layers = []
layers.append(
    ConvLayer(1, layer_desc[0][0], PEs, mems, PE_PER_LEAF, LEAF_COUNT,
              layer_desc[0][1], 20))
packets = layers[0].generate_packets(INJECTION_RATE, 0, start_at_z)

for i in range(len(layer_desc) - 1):
    mem_count = layers[i].output_count
    filter_count = layer_desc[i + 1][0]

    PEs = PE_gen(filter_count, PE_PER_LEAF, LEAF_COUNT, PES)
    mems = mem_gen(mem_count, PE_PER_LEAF, LEAF_COUNT, MEMs)

    assign_dests(PEs, mems, LEAF_COUNT)

    layers.append(
        ConvLayer(mem_count, filter_count, PEs, mems, PE_PER_LEAF, LEAF_COUNT,
                  layer_desc[i + 1][1], layers[i].out_img_size))
    packets = layers[-1].generate_packets(INJECTION_RATE,
Example #20
0
    def __init__(self,
                 rng,
                 weight,
                 agg_func='soft',
                 use_last_layer_weight=False):
        # weight: list type,0-15,the first 16 W and b
        x = T.tensor4('x')
        y = T.imatrix('y')
        learning_rate = T.scalar('learning_rate')
        self.layer1_input = x  #832

        self.layer1 = ConvLayer(rng,
                                input=self.layer1_input,
                                filter_shape=(96, 3, 7, 7),
                                layer_index=1,
                                stride=(2, 2),
                                W=weight[0],
                                b=weight[1])  #output:413
        self.LRN_1 = LRN(input=self.layer1.nopad_output, layer_index=1)

        self.pool1 = PoolLayer(input=self.LRN_1.output,
                               poolsize=(3, 3),
                               layer_index=1)  # 138

        self.layer2 = ConvLayer(rng,
                                input=self.pool1.output,
                                filter_shape=(256, 96, 5, 5),
                                layer_index=2,
                                W=weight[2],
                                b=weight[3])  #output: 134
        self.pool2 = PoolLayer(input=self.layer2.nopad_output,
                               poolsize=(2, 2),
                               layer_index=2)  #67

        self.layer3 = ConvLayer(rng,
                                input=self.pool2.output,
                                filter_shape=(512, 256, 3, 3),
                                layer_index=3,
                                W=weight[4],
                                b=weight[5])  #67
        self.layer4 = ConvLayer(rng,
                                input=self.layer3.output,
                                filter_shape=(512, 512, 3, 3),
                                layer_index=4,
                                W=weight[6],
                                b=weight[7])  #67
        self.layer5 = ConvLayer(rng,
                                input=self.layer4.output,
                                filter_shape=(512, 512, 3, 3),
                                layer_index=5,
                                W=weight[8],
                                b=weight[9])  #67
        self.pool3 = PoolLayer(input=self.layer5.output,
                               poolsize=(3, 3),
                               layer_index=3)  #23

        ## change FC1/FC2/FC3 layers to Convlayers14/15/16

        if use_last_layer_weight:  #use weight of layer14/15/16
            self.layer6 = ConvLayer(rng,
                                    input=self.pool3.output,
                                    filter_shape=(1024, 512, 6, 6),
                                    layer_index=6,
                                    W=weight[10],
                                    b=weight[11])  #18
            self.layer7 = ConvLayer(rng,
                                    input=self.layer6.nopad_output,
                                    filter_shape=(1024, 1024, 1, 1),
                                    layer_index=7,
                                    W=weight[12],
                                    b=weight[13])  #18
            self.layer8 = AggregationLayer(rng,
                                           input=self.layer7.nopad_output,
                                           filter_shape=(7, 1024, 1, 1),
                                           layer_index=8,
                                           W=weight[14],
                                           b=weight[15],
                                           agg_func=agg_func)  #18
        else:
            self.layer6 = ConvLayer(rng,
                                    input=self.pool3.output,
                                    filter_shape=(1024, 512, 6, 6),
                                    layer_index=6)  #18
            self.layer7 = ConvLayer(rng,
                                    input=self.layer6.nopad_output,
                                    filter_shape=(1024, 1024, 1, 1),
                                    layer_index=7)  #18
            self.layer8 = AggregationLayer(rng,
                                           input=self.layer7.nopad_output,
                                           filter_shape=(7, 1024, 1, 1),
                                           layer_index=8,
                                           agg_func=agg_func)  #18

        # the objective loss
        self.loss = self.layer8.squared_error(y)

        self.params = self.layer8.params+self.layer7.params+self.layer6.params+self.layer5.params\
                     +self.layer4.params+self.layer3.params+self.layer2.params +self.layer1.params

        # optimization methods
        updates = lasagne.updates.nesterov_momentum(
            self.loss, self.params, learning_rate=learning_rate, momentum=0.9)

        self.train = theano.function(
            inputs=[x, y, learning_rate],
            outputs=[self.loss, self.layer8.errors(y)],
            updates=updates,
            allow_input_downcast=True)

        self.test = theano.function(inputs=[x, y],
                                    outputs=[self.loss,
                                             self.layer8.errors(y)],
                                    allow_input_downcast=True)

        self.detection = theano.function(inputs=[x, y],
                                         outputs=[
                                             self.layer8.pred,
                                             self.layer8.errors(y),
                                             self.layer8.pro_instance,
                                             self.layer8.pro_bag
                                         ],
                                         allow_input_downcast=True)
Example #21
0
def testGradient():
    """Test the backprop implementation by checking the gradients on a small network"""

    # load the training data
    images, labels = load_mnist()
    images /= 255.0

    grad_images = images[:,:,0:10] #use 10 image subset for gradient checking
    grad_labels = labels[0,0:10] #respective labels for the images--going to have to encode these labels

    # create a small network, 1 conv layer + 1 pooling layer + 1 fully connected softmax

    # convolutional layer, taking in a 28x28 image, using 2 9x9 filters
    # output should be 2 28-9+1x28-9+1 = 2 20x20 feature maps in a (20, 20, 2) form
    layer0 = ConvLayer(grad_images[:,:,0].reshape((28,28,1)), (28, 28, 1), (9, 9, 2, 1))
    print "initalized convolutional layer"
    layer0.forwardprop(grad_images[:,:,0].reshape((28,28,1)))
    print "finished forward pass of convolutional layer"

    # pooling layer, taking in 2 20x20 feature maps
    # output should be 2 10x10 feature maps (though may want to downsample 5x for gradient check)
    layer1 = PoolingLayer(layer0.output, (20, 20, 2))
    print "initialized pooling layer"
    layer1.downsample(layer0.output, (20, 20, 2))
    print "finished forward pass of pooling layer"

    # fully-connected softmax layer, taking in 2 10x10 feature maps (if downsampled by 2)
    # or taking in 2 4x4 feature maps (if downsampled by 5)
    # either way, flattened into a long input vector
    full_conn_input = layer1.output.flatten()
    layer2 = FullyConnectedLayer(full_conn_input.reshape((full_conn_input.size, 1)), full_conn_input.size, 10)
    print "initialized fully-conn layer"
    layer2.softmax_output(full_conn_input.reshape((full_conn_input.size, 1)))
    print "finished forward pass of fully-conn layer"

    # perform backpropagation
    target = np.zeros((10,1))
    for i in range(0, 10):
        if grad_labels[i] == 1:
            target[i] = 1
    layer2.backprop(0, 0, target)
    print "finished layer 2 backprop"
    layer1.upsample(layer2, 0)
    print "finished layer 1 backprop"
    layer0.backprop(layer1)
    print "finished layer 0 backprop"

    # # after initialization, finish training
    # for i in range(1, grad_labels.size):
    #     # forward propagation
    #     layer0.forwardprop(grad_images[:,:,i].reshape((28,28,1)))
    #     layer1.downsample(layer0.output, (20,20,2))
    #     full_conn_input = layer1.output.flatten()
    #     layer2.softmax_output(full_conn_input.reshape((full_conn_input.size, 1)))
    #
    #     # backpropagation
    #     target = np.zeros((10,1))
    #     for j in range(0,10):
    #         if grad_labels[i] == 1:
    #             target[i] = 1
    #     layer2.backprop(0, 0, target)
    #     layer1.upsample(layer2, 0)
    #     layer0.backprop(layer1)

    # check the gradient
    epsilon = 1.0e-4
    layer0_check = layer0
    layer1_check = layer1
    layer2_check = layer2

    layer0_w_vec = layer0.W.flatten()
    layer0_bias_vec = layer0.bias.flatten()
    layer0_gradw = layer0.gradient_w.flatten()
    layer0_gradb = layer0.gradient_b.flatten()

    layer2_w_vec = layer2.W.flatten()
    layer2_bias_vec = layer2.bias.flatten()
    layer2_gradw = layer2.gradient_w.flatten()
    layer2_gradb = layer2.gradient_b.flatten()

    w_vec = np.concatenate((layer0_w_vec, layer0_bias_vec, layer2_w_vec, layer2_bias_vec))
    backprop_vec = np.concatenate((layer0_gradw, layer0_gradb, layer2_gradw, layer2_gradb))
    print layer0_gradw
    gradient_check = np.zeros(w_vec.size)
    for i in range(0, w_vec.size):
        pos = w_vec
        pos[i] += epsilon
        neg = w_vec
        neg[i] -= epsilon
        # feed-forward to get J(w+e), J(w-e), subtract and calculate gradient
        # J(w+e)
        layer0_check.W = pos[0:layer0_w_vec.size].reshape(layer0.filter_shape)
        layer0_check.bias = pos[layer0_w_vec.size : layer0_w_vec.size+layer0_bias_vec.size].reshape(layer0.bias_shape)

        layer2_check.W = pos[layer0_w_vec.size+layer0_bias_vec.size : layer0.W.size+layer0.bias.size+layer2_w_vec.size].reshape(layer2.W.shape)
        layer2_check.bias = pos[layer0.W.size+layer0.bias.size+layer2_w_vec.size:].reshape(layer2.bias.shape)

        layer0_check.forwardprop(grad_images[:,:,0].reshape((28,28,1)))
        layer1_check.downsample(layer0_check.output, (20,20,2))
        full_conn_input = layer1.output.flatten()
        layer2_check.softmax_output(full_conn_input.reshape((full_conn_input.size, 1)))

        pos_out = J(layer2_check.output, grad_labels[0])
        # J(w-e)
        layer0_check.W = neg[0:layer0_w_vec.size].reshape(layer0.filter_shape)
        layer0_check.bias = neg[layer0_w_vec.size : layer0_w_vec.size+layer0_bias_vec.size].reshape(layer0.bias_shape)

        layer2_check.W = neg[layer0_w_vec.size+layer0_bias_vec.size : layer0.W.size+layer0.bias.size+layer2_w_vec.size].reshape(layer2.W.shape)
        layer2_check.bias = neg[layer0.W.size+layer0.bias.size+layer2_w_vec.size:].reshape(layer2.bias.shape)

        layer0_check.forwardprop(grad_images[:,:,0].reshape((28,28,1)))
        layer1_check.downsample(layer0_check.output, (20,20,2))
        full_conn_input = layer1.output.flatten()
        layer2_check.softmax_output(full_conn_input.reshape((full_conn_input.size, 1)))

        neg_out = J(layer2_check.output, grad_labels[0])
        # compute gradient for i
        gradient_check[i] = (pos_out - neg_out)/(2*epsilon)

    # print gradient_check
    print gradient_check[0:layer0_w_vec.size]
Example #22
0
def SGD_train(minibatch_size, data, labels, alpha, momentum, epochs):
    """Train the network with stochastic gradient descent

    :type minibatch_size: an integer
    :param minibatch_size: the size of the minibatches (usually something like 256)

    :type data: 3D matrix height x width x num training data pts.
    :param data: A 3D matrix that contains all of the training data points of the set

    :type labels: num training data pts x 1 vector
    :param labels: the labels for each image

    :type alpha: float
    :param alpha: the learning rate

    :type momentum: float
    :param momentum: the momentum

    :type epochs: an integer
    :param epochs: the number of epochs (ie. iterations) through the training
    """

    it = 0
    # convolutional layer, taking in a 28x28 image, using 2 9x9 filters
    # output should be 2 28-9+1x28-9+1 = 2 20x20 feature maps in a (20, 20, 2) form
    layer0 = ConvLayer((28, 28, 1), (9,9,2))
    print "initialized convolutional layer"
    # pooling layer, taking in 2 20x20 feature maps
    # output should be 2 10x10 feature maps
    layer1 = PoolingLayer((20, 20, 2))
    print "initialized pooling layer"
    # fully-connected softmax layer, taking in 2 10x10 feature maps (if downsampled by 2)
    # flattened into a long input vector
    layer2 = FullyConnectedLayer(200, 10)
    print "initialized fully-connected layer"
    params = np.concatenate((layer0.W.flatten(), layer0.bias.flatten(), layer2.W.flatten(), layer2.bias.flatten()))
    velocity = np.zeros(params.shape)

    for i in range(0, epochs):
        correct_class = 0
        cost = 0.0
        # shuffle the dataset--shuffle_vec will be used as indices
        shuffle_vec = rand.permutation(data.shape[2])

        for j in range(0, data.shape[2] - minibatch_size + 1, minibatch_size):
            # perform gradient descent w/each batch
            it += 1

            if it == 20:
                # increase momentum after 20 iterations
                momentum = 0.9

            # gradient should be an unrolled vector of the avg. sum of the 256 gradients gotten
            # from the forward pass and backprop
            for k in range(0, minibatch_size):
                layer0.forwardprop(data[:,:,shuffle_vec[j+k]].reshape((28,28,1)))
                layer1.downsample(layer0.output, (20,20,2))
                layer2_input = layer1.output.flatten()
                layer2.softmax_output(layer2_input.reshape((layer2_input.size, 1)))
                cost += J(layer2.output, labels[shuffle_vec[j+k]])
                # print "%d %d" % (np.argmax(layer2.output), labels[shuffle_vec[j+k]])

                if np.argmax(layer2.output) == labels[shuffle_vec[j+k]]:
                    correct_class += 1

                # backprop
                layer2.backprop(0, 0, encode_label(labels[shuffle_vec[j+k]]))
                layer1.upsample(layer2, 0)
                layer0.backprop(layer1)
                # flatten the gradient vector
                if k == 0:
                    grad = np.concatenate((layer0.gradient_w.flatten(), layer0.gradient_b.flatten(), layer2.gradient_w.flatten(), layer2.gradient_b.flatten()))
                else:
                    grad += np.concatenate((layer0.gradient_w.flatten(), layer0.gradient_b.flatten(), layer2.gradient_w.flatten(), layer2.gradient_b.flatten()))

            grad /= minibatch_size
            # update velocity vector
            velocity = momentum*velocity + alpha*grad
            params =  params - velocity

            # update the parameters
            layer0.W = params[0:layer0.W.flatten().size].reshape(layer0.W.shape)
            next_begin = layer0.W.flatten().size
            layer0.bias = params[next_begin:next_begin+layer0.bias.flatten().size].reshape(layer0.bias.shape)
            next_begin += layer0.bias.flatten().size
            layer2.W = params[next_begin:next_begin+layer2.W.flatten().size].reshape(layer2.W.shape)
            next_begin += layer2.W.flatten().size
            layer2.bias = params[next_begin:].reshape(layer2.bias.shape)

        # reduce learning rate by half after each epoch
        alpha /= 2.0
        print "%d correct classifications" % correct_class
        print "cost function is ", cost/(minibatch_size*(data.shape[2] - minibatch_size + 1))
Example #23
0
    def __init__(self,rng,weight,agg_func='soft',use_last_layer_weight=False):
        # weight: list type,0-31,the first 32 W and b
        x = T.tensor4('x')
        y = T.imatrix('y')
        learning_rate = T.scalar('learning_rate')
        self.layer1_input = x  #832

        self.layer1 = ConvLayer(rng,input=self.layer1_input, filter_shape=(64,3,3,3), layer_index=1, W=weight[0], b=weight[1])
        self.layer2 = ConvLayer(rng,input=self.layer1.output,filter_shape=(64,64,3,3),layer_index=2, W=weight[2], b=weight[3])
        self.pool1  = PoolLayer(input = self.layer2.output, poolsize=(2,2), layer_index=1) #416

        self.layer3 = ConvLayer(rng,input=self.pool1.output, filter_shape=(128,64,3,3),layer_index=3, W=weight[4], b=weight[5])
        self.layer4 = ConvLayer(rng,input=self.layer3.output,filter_shape=(128,128,3,3),layer_index=4,W=weight[6], b=weight[7])
        self.pool2  = PoolLayer(input = self.layer4.output, poolsize=(2,2), layer_index=2) #208

        self.layer5 = ConvLayer(rng,input=self.pool2.output, filter_shape=(256,128,3,3),layer_index=5,W=weight[8], b=weight[9])
        self.layer6 = ConvLayer(rng,input=self.layer5.output,filter_shape=(256,256,3,3),layer_index=6,W=weight[10], b=weight[11])
        self.layer7 = ConvLayer(rng,input=self.layer6.output,filter_shape=(256,256,3,3),layer_index=7,W=weight[12], b=weight[13])
        self.pool3  = PoolLayer(input = self.layer7.output, poolsize=(2,2), layer_index=3) #104

        self.layer8 = ConvLayer(rng,input=self.pool3.output, filter_shape=(512,256,3,3),layer_index=8,W=weight[14], b=weight[15])
        self.layer9 = ConvLayer(rng,input=self.layer8.output,filter_shape=(512,512,3,3),layer_index=9,W=weight[16], b=weight[17])
        self.layer10= ConvLayer(rng,input=self.layer9.output,filter_shape=(512,512,3,3),layer_index=10,W=weight[18],b=weight[19])
        self.pool4  = PoolLayer(input = self.layer10.output, poolsize=(2,2), layer_index=4) #52

        self.layer11 = ConvLayer(rng,input=self.pool4.output,filter_shape=(512,512,3,3),layer_index=11,W=weight[20],b=weight[21])
        self.layer12 = ConvLayer(rng,input=self.layer11.output,filter_shape=(512,512,3,3),layer_index=12,W=weight[22],b=weight[23])
        self.layer13 = ConvLayer(rng,input=self.layer12.output,filter_shape=(512,512,3,3),layer_index=13,W=weight[24],b=weight[25])
        self.pool5   = PoolLayer(input = self.layer13.output, poolsize=(2,2), layer_index=5) #26

        ## change FC1/FC2/FC3 layers to Convlayers14/15/16

        if use_last_layer_weight:  #use weight of layer14/15/16
            self.layer14 = ConvLayer(rng,input=self.pool5.output,filter_shape=(1024,512,7,7),layer_index=14,
                                     W=weight[26],b=weight[27])  #20
            self.layer15 = ConvLayer(rng,input=self.layer14.nopad_output,filter_shape=(1024,1024,1,1),layer_index=15,
                                     W=weight[28],b=weight[29])  #20
            self.layer16 = AggregationLayer(rng,input=self.layer15.nopad_output,filter_shape=(7,1024,1,1),layer_index=16,
                                            W=weight[30],b=weight[31],agg_func=agg_func)  #20
        else:
            self.layer14 = ConvLayer(rng,input=self.pool5.output,filter_shape=(1024,512,7,7),layer_index=14)
            self.layer15 = ConvLayer(rng,input=self.layer14.nopad_output,filter_shape=(1024,1024,1,1),layer_index=15)
            self.layer16 = AggregationLayer(rng,input=self.layer15.nopad_output,filter_shape=(7,1024,1,1),layer_index=16,
                                            agg_func=agg_func)


        # the objective loss
        self.loss = self.layer16.squared_error(y)

        self.params = self.layer16.params+self.layer15.params+self.layer14.params+self.layer13.params+self.layer12.params\
                     +self.layer11.params+self.layer10.params+self.layer9.params +self.layer8.params +self.layer7.params\
                     +self.layer6.params +self.layer5.params +self.layer4.params +self.layer3.params +self.layer2.params\
                     +self.layer1.params

        # optimization methods
        updates = lasagne.updates.nesterov_momentum(self.loss,self.params,
                                                    learning_rate=learning_rate,
                                                    momentum=0.9)

        self.train = theano.function(inputs = [x,y,learning_rate],
                                     outputs= [self.loss,self.layer16.errors(y)],
                                     updates= updates,
                                     allow_input_downcast=True)

        self.test = theano.function(inputs = [x,y],
                                    outputs= [self.loss,self.layer16.errors(y)],
                                    allow_input_downcast=True)

        self.detection = theano.function(
                   inputs = [x,y],
                   outputs= [self.layer16.pred,self.layer16.errors(y),
                             self.layer16.pro_instance,self.layer16.pro_bag],
                   allow_input_downcast=True )

        self.feamap = theano.function(
                    inputs=[x],
                    outputs=[self.pool1.output, self.pool2.output, self.pool3.output, self.pool4.output,self.pool5.output],
                    allow_input_downcast=True)