def test_convolutional_sequence_tied_biases_pushed_if_explicitly_set(): cnn = ConvolutionalSequence(sum([[ Convolutional(filter_size=(1, 1), num_filters=1, tied_biases=True), Rectifier() ] for _ in range(3)], []), num_channels=1, image_size=(1, 1), tied_biases=False) cnn.allocate() assert [ not child.tied_biases for child in cnn.children if isinstance(child, Convolutional) ] cnn = ConvolutionalSequence(sum( [[Convolutional(filter_size=(1, 1), num_filters=1), Rectifier()] for _ in range(3)], []), num_channels=1, image_size=(1, 1), tied_biases=True) cnn.allocate() assert [ child.tied_biases for child in cnn.children if isinstance(child, Convolutional) ]
def test_convolutional_sequence_tied_biases_not_pushed_if_not_explicitly_set(): cnn = ConvolutionalSequence( sum([[Convolutional(filter_size=(1, 1), num_filters=1, tied_biases=True), Rectifier()] for _ in range(3)], []), num_channels=1, image_size=(1, 1)) cnn.allocate() assert [child.tied_biases for child in cnn.children if isinstance(child, Convolutional)]
def test_pooling_works_in_convolutional_sequence(): x = tensor.tensor4('x') brick = ConvolutionalSequence([AveragePooling((2, 2), step=(2, 2)), MaxPooling((4, 4), step=(2, 2), ignore_border=True)], image_size=(16, 32), num_channels=3) brick.allocate() y = brick.apply(x) out = y.eval({x: numpy.empty((2, 3, 16, 32), dtype=theano.config.floatX)}) assert out.shape == (2, 3, 3, 7)
def test_convolutional_transpose_original_size_inferred_conv_sequence(): brick = ConvolutionalTranspose(filter_size=(4, 5), num_filters=10, step=(3, 2)) seq = ConvolutionalSequence([brick], num_channels=5, image_size=(6, 9)) try: seq.allocate() except Exception as e: raise AssertionError('exception raised: {}: {}'.format( e.__class__.__name__, e))
def test_convolutional_sequence_use_bias(): cnn = ConvolutionalSequence( sum([[Convolutional(filter_size=(1, 1), num_filters=1), Rectifier()] for _ in range(3)], []), num_channels=1, image_size=(1, 1), use_bias=False) cnn.allocate() x = tensor.tensor4() y = cnn.apply(x) params = ComputationGraph(y).parameters assert len(params) == 3 and all(param.name == 'W' for param in params)
def test_convolutional_sequence_activation_get_dim(): seq = ConvolutionalSequence([Tanh()], num_channels=9, image_size=(4, 6)) seq.allocate() assert seq.get_dim('output') == (9, 4, 6) seq = ConvolutionalSequence([Convolutional(filter_size=(7, 7), num_filters=5, border_mode=(1, 1)), Tanh()], num_channels=8, image_size=(8, 11)) seq.allocate() assert seq.get_dim('output') == (5, 4, 7)
def test_convolutional_sequence_use_bias(): cnn = ConvolutionalSequence( [ConvolutionalActivation(activation=Rectifier().apply, filter_size=(1, 1), num_filters=1) for _ in range(3)], num_channels=1, image_size=(1, 1), use_bias=False, ) cnn.allocate() x = tensor.tensor4() y = cnn.apply(x) params = ComputationGraph(y).parameters assert len(params) == 3 and all(param.name == "W" for param in params)
def test_convolutional_sequence_with_convolutions_raw_activation(): seq = ConvolutionalSequence( [Convolutional(filter_size=(3, 3), num_filters=4), Rectifier(), Convolutional(filter_size=(5, 5), num_filters=3, step=(2, 2)), Tanh()], num_channels=2, image_size=(21, 39)) seq.allocate() x = theano.tensor.tensor4() out = seq.apply(x).eval({x: numpy.ones((10, 2, 21, 39), dtype=theano.config.floatX)}) assert out.shape == (10, 3, 8, 17)
class EncoderMapping(Initializable): """ Parameters ---------- layers: :class:`list` list of bricks num_channels: :class: `int` Number of input channels image_size: :class:`tuple` Image size n_emb: :class:`int` Dimensionality of the embedding use_bias: :class:`bool` self explanatory """ def __init__(self, layers, num_channels, image_size, n_emb, use_bias=False, **kwargs): self.layers = layers self.num_channels = num_channels self.image_size = image_size self.pre_encoder = ConvolutionalSequence(layers=layers[:-1], num_channels=num_channels, image_size=image_size, use_bias=use_bias, name='encoder_conv_mapping') self.pre_encoder.allocate() n_channels = n_emb + self.pre_encoder.get_dim('output')[0] self.post_encoder = ConvolutionalSequence(layers=[layers[-1]], num_channels=n_channels, image_size=(1, 1), use_bias=use_bias) children = [self.pre_encoder, self.post_encoder] kwargs.setdefault('children', []).extend(children) super(EncoderMapping, self).__init__(**kwargs) @application(inputs=['x', 'y'], outputs=['output']) def apply(self, x, y): "Returns mu and logsigma" # Getting emebdding pre_z = self.pre_encoder.apply(x) # Concatenating pre_z_embed_y = tensor.concatenate([pre_z, y], axis=1) # propagating through last layer return self.post_encoder.apply(pre_z_embed_y)