Example #1
0
def test_sequence_content_attention():
    # Disclaimer: only check dimensions, not values
    rng = numpy.random.RandomState([2014, 12, 2])

    seq_len = 5
    batch_size = 6
    state_dim = 2
    sequence_dim = 3
    match_dim = 4

    attention = SequenceContentAttention(state_names=["states"],
                                         state_dims={"states": state_dim},
                                         sequence_dim=sequence_dim,
                                         match_dim=match_dim)
    attention.allocate()

    sequences = tensor.tensor3('sequences')
    states = tensor.matrix('states')
    mask = tensor.matrix('mask')
    glimpses, weights = attention.take_look(sequences,
                                            states=states,
                                            mask=mask)
    assert glimpses.ndim == 2
    assert weights.ndim == 2

    seq_values = numpy.zeros((seq_len, batch_size, sequence_dim), dtype=floatX)
    states_values = numpy.zeros((batch_size, state_dim), dtype=floatX)
    mask_values = numpy.zeros((seq_len, batch_size), dtype=floatX)
    # randomly generate a sensible mask
    for sed_idx in range(batch_size):
        mask_values[:rng.randint(1, seq_len), sed_idx] = 1
    glimpses_values, weight_values = theano.function(
        [sequences, states, mask],
        [glimpses, weights])(seq_values, states_values, mask_values)
    assert glimpses_values.shape == (batch_size, sequence_dim)
    assert weight_values.shape == (batch_size, seq_len)
    assert numpy.all(weight_values >= 0)
    assert numpy.all(weight_values <= 1)
    assert numpy.all(weight_values.sum(axis=1) == 1)
    assert numpy.all((weight_values.T == 0) == (mask_values == 0))
Example #2
0
def test_sequence_content_attention():
    # Disclaimer: only check dimensions, not values
    rng = numpy.random.RandomState([2014, 12, 2])

    seq_len = 5
    batch_size = 6
    state_dim = 2
    sequence_dim = 3
    match_dim = 4

    attention = SequenceContentAttention(
        state_names=["states"], state_dims={"states": state_dim},
        sequence_dim=sequence_dim, match_dim=match_dim)
    attention.allocate()

    sequences = tensor.tensor3('sequences')
    states = tensor.matrix('states')
    mask = tensor.matrix('mask')
    glimpses, weights = attention.take_look(sequences, states=states,
                                            mask=mask)
    assert glimpses.ndim == 2
    assert weights.ndim == 2

    seq_values = numpy.zeros((seq_len, batch_size, sequence_dim), dtype=floatX)
    states_values = numpy.zeros((batch_size, state_dim), dtype=floatX)
    mask_values = numpy.zeros((seq_len, batch_size), dtype=floatX)
    # randomly generate a sensible mask
    for sed_idx in range(batch_size):
        mask_values[:rng.randint(1, seq_len), sed_idx] = 1
    glimpses_values, weight_values = theano.function(
        [sequences, states, mask], [glimpses, weights])(
            seq_values, states_values, mask_values)
    assert glimpses_values.shape == (batch_size, sequence_dim)
    assert weight_values.shape == (batch_size, seq_len)
    assert numpy.all(weight_values >= 0)
    assert numpy.all(weight_values <= 1)
    assert numpy.all(weight_values.sum(axis=1) == 1)
    assert numpy.all((weight_values.T == 0) == (mask_values == 0))