Exemplo n.º 1
0
def subsample_indicator(indicator, num_samples):
    """Subsample indicator vector.

    Given a boolean indicator vector with M elements set to `True`, the function
    assigns all but `num_samples` of these previously `True` elements to
    `False`. If `num_samples` is greater than M, the original indicator vector
    is returned.

    Arguments:
    - *indicator*: a 1-dimensional boolean tensor indicating which elements
        are allowed to be sampled and which are not.

    - *num_samples*: int32 scalar tensor

    Returns:

    A boolean tensor with the same shape as input (indicator) tensor
    """
    indices = tf.where(indicator)
    indices = tf.random.shuffle(indices)
    indices = tf.reshape(indices, [-1])

    num_samples = tf.minimum(tf.size(indices), num_samples)
    selected_indices = tf.slice(indices, [0], tf.reshape(num_samples, [1]))

    selected_indicator = ops.indices_to_dense_vector(selected_indices,
                                                     tf.shape(indicator)[0])

    return tf.equal(selected_indicator, 1)
Exemplo n.º 2
0
def test_indices_to_dense_vector_empty_indices_as_input():
    size = 500
    rand_indices = []

    expected_output = np.zeros(size, dtype=np.float32)

    tf_rand_indices = tf.constant(rand_indices)
    indicator = ops.indices_to_dense_vector(tf_rand_indices, size)

    np.testing.assert_array_equal(indicator, expected_output)
    assert indicator.dtype == expected_output.dtype
Exemplo n.º 3
0
def test_indices_to_dense_vector_all_indices_as_input():
    size = 500
    num_indices = 500
    rand_indices = np.random.permutation(np.arange(size))[0:num_indices]

    expected_output = np.ones(size, dtype=np.float32)

    tf_rand_indices = tf.constant(rand_indices)
    indicator = ops.indices_to_dense_vector(tf_rand_indices, size)

    np.testing.assert_array_equal(indicator, expected_output)
    assert indicator.dtype == expected_output.dtype
Exemplo n.º 4
0
def test_indices_to_dense_vector():
    size = 10000
    num_indices = np.random.randint(size)
    rand_indices = np.random.permutation(np.arange(size))[0:num_indices]

    expected_output = np.zeros(size, dtype=np.float32)
    expected_output[rand_indices] = 1.

    tf_rand_indices = tf.constant(rand_indices)
    indicator = ops.indices_to_dense_vector(tf_rand_indices, size)

    np.testing.assert_array_equal(indicator, expected_output)
    assert indicator.dtype == expected_output.dtype
Exemplo n.º 5
0
def test_indices_to_dense_vector_size_at_inference():
    size = 5000
    num_indices = 250
    all_indices = np.arange(size)
    rand_indices = np.random.permutation(all_indices)[0:num_indices]

    expected_output = np.zeros(size, dtype=np.float32)
    expected_output[rand_indices] = 1.

    indicator = ops.indices_to_dense_vector(rand_indices,
                                            tf.shape(all_indices)[0])

    np.testing.assert_array_equal(indicator, expected_output)
    assert indicator.dtype == expected_output.dtype
Exemplo n.º 6
0
def test_indices_to_dense_vector_custom_values():
    size = 100
    num_indices = 10
    rand_indices = np.random.permutation(np.arange(size))[0:num_indices]
    indices_value = np.random.rand(1)
    default_value = np.random.rand(1)

    expected_output = np.float32(np.ones(size) * default_value)
    expected_output[rand_indices] = indices_value

    tf_rand_indices = tf.constant(rand_indices)
    indicator = ops.indices_to_dense_vector(tf_rand_indices,
                                            size,
                                            indices_value=indices_value,
                                            default_value=default_value)

    np.testing.assert_allclose(indicator, expected_output)
    assert indicator.dtype == expected_output.dtype