def make_test_params():

    cp = MultipleLayersParams()
    cp.compute_reconstruction = True
    cp.conv_classes = ConvLayer
    cp.sp_buffer_size = 6000
    cp.sp_batch_size = 4000
    cp.learning_rate = 0.02
    cp.cluster_boost_threshold = 1000
    cp.max_encountered_seqs = 10000
    cp.max_frequent_seqs = 1000
    cp.seq_length = 4
    cp.seq_lookahead = 1
    cp.num_conv_layers = 1

    cp.n_cluster_centers = 400
    cp.rf_size = (8, 8)
    cp.rf_stride = (8, 8)

    tp = MultipleLayersParams()
    tp.n_cluster_centers = 250
    tp.sp_buffer_size = 4000
    tp.sp_batch_size = 500
    tp.learning_rate = 0.2
    tp.cluster_boost_threshold = 1000
    tp.compute_reconstruction = True

    common_params = {
        'conv_layers_params': cp,
        'top_layer_params': tp,
        'image_size': SeDatasetSize.SIZE_64,
        'class_filter': [1, 2, 3],
        'noise_amp': 0.0,
        'model_seed': None,
        'baseline_seed': None
    }

    changing_params = [{
        'conv_layers_params': cp.change(learning_rate=0.1)
    }, {
        'conv_layers_params': cp.change(learning_rate=0.2),
        'top_layer_params': tp.change(learning_rate=0.1)
    }, {
        'conv_layers_params': cp.change(learning_rate=0.3)
    }]

    params = ExperimentTemplateBase.add_common_params(changing_params,
                                                      common_params)

    return params, common_params, changing_params
def test_change_params():
    default_params = MultipleLayersParams()
    default_params.learning_rate = 0.997
    default_params.n_cluster_centers = [2, 3]
    default_params.seq_length = 5

    sequence = [{
        'conv_layers_params':
        default_params.change(n_cluster_centers=[1, 2])
    }, {
        'conv_layers_params':
        default_params.change(n_cluster_centers=[1, 2, 3], learning_rate=0.11)
    }]

    assert default_params.n_cluster_centers == [2, 3]
    assert sequence[0]['conv_layers_params'].n_cluster_centers == [1, 2]
    assert sequence[1]['conv_layers_params'].n_cluster_centers == [1, 2, 3]

    assert sequence[0]['conv_layers_params'].learning_rate == 0.997
    assert sequence[1]['conv_layers_params'].learning_rate == 0.11
def test_empty_change():

    a = MultipleLayersParams()
    a.learning_rate = 0.345
    a.n_cluster_centers = [1, 2, 3]

    b = a.change()
    assert b.learning_rate == a.learning_rate
    assert a.n_cluster_centers == b.n_cluster_centers

    b.learning_rate = 0.1
    a.n_cluster_centers = [1, 2]

    assert b.learning_rate != a.learning_rate
    assert a.n_cluster_centers != b.n_cluster_centers
def multiple_runs_lr_example(args, debug: bool = False):

    name = "example_multiple_runs"

    default_conv = MultipleLayersParams()
    default_conv.compute_reconstruction = True
    default_conv.conv_classes = [ConvLayer, SpConvLayer]
    default_conv.num_conv_layers = 2

    default_conv.rf_stride = (8, 8)
    default_conv.rf_size = (8, 8)

    tp = MultipleLayersParams()
    tp.n_cluster_centers = 250

    params = [{
        'conv_layers_params': default_conv.change(learning_rate=0.1)
    }, {
        'conv_layers_params': default_conv.change(learning_rate=0.2),
        'top_layer_params': tp.change(learning_rate=0.11)
    }, {
        'conv_layers_params': default_conv.change(learning_rate=0.3)
    }]

    common_params = {
        'top_layer_params': tp,
        'image_size': SeDatasetSize.SIZE_64,
        'noise_amp': 0.0,
        'model_seed': None,
        'baseline_seed': None
    }

    # merge the params and common params
    p = ExperimentTemplateBase.add_common_params(params, common_params)

    run_measurement(name, p, args, debug=debug)
Exemple #5
0
def good_one_layer_config_for_four_objects() -> List[Dict[str, Any]]:
    """A topology which might achieve 100% SE accuracy on 4 objects"""

    cp = MultipleLayersParams()
    cp.compute_reconstruction = False
    cp.conv_classes = ConvLayer
    cp.sp_buffer_size = 6000
    cp.sp_batch_size = 4000
    cp.learning_rate = 0.1
    cp.cluster_boost_threshold = 1000
    cp.max_encountered_seqs = 2000
    cp.max_frequent_seqs = 1000
    cp.seq_lookahead = 1
    cp.seq_length = 5

    cp.n_cluster_centers = 200

    cp.rf_size = (8, 8)
    cp.rf_stride = (8, 8)
    cp.num_conv_layers = 1

    tp = MultipleLayersParams()
    tp.n_cluster_centers = 150
    tp.sp_buffer_size = 3000
    tp.sp_batch_size = 2000
    tp.learning_rate = 0.15
    tp.cluster_boost_threshold = 1000
    tp.compute_reconstruction = True

    cf_easy = [1, 2, 3, 4]
    size = SeDatasetSize.SIZE_64
    size_int = (size.value, size.value, 3)

    params = [
        {
            'se_group': {'class_filter': cf_easy,
                         'image_size': size},
            'model': {'conv_layers_params': cp.change(opp=0.5),
                      'top_layer_params': tp,
                      'image_size': size_int}
        }
    ]

    return params
Exemple #6
0
def run_opp(args, num_conv_layers: int, exp_params, top_cc: int = 150):
    name = f"OPP-influence_num_cc{top_cc}"

    cp = MultipleLayersParams()
    cp.compute_reconstruction = False
    cp.conv_classes = ConvLayer
    cp.sp_buffer_size = 6000
    cp.sp_batch_size = 1500  # original 4000
    cp.learning_rate = 0.10001
    cp.cluster_boost_threshold = 1000
    cp.max_encountered_seqs = 2000
    cp.max_frequent_seqs = 1000
    cp.seq_lookahead = 1
    cp.seq_length = 4  # note: might use also 5 (as in older experiments)

    if num_conv_layers == 2:
        cp.n_cluster_centers = [100, 230]

        cp.rf_size = [(8, 8), (4, 4)]
        cp.rf_stride = [(8, 8), (1, 1)]

        cp.num_conv_layers = 2
    else:
        cp.n_cluster_centers = 200

        cp.rf_size = (8, 8)
        cp.rf_stride = (8, 8)
        cp.num_conv_layers = 1

    tp = MultipleLayersParams()
    tp.n_cluster_centers = top_cc
    tp.sp_buffer_size = 3000
    tp.sp_batch_size = 1500  #
    tp.learning_rate = 0.15
    tp.cluster_boost_threshold = 1000
    tp.compute_reconstruction = True

    cf_easy = [1, 2, 3, 4]
    size = SeDatasetSize.SIZE_64
    size_int = (size.value, size.value, 3)

    params = [
        {
            'se_group': {'class_filter': cf_easy,
                         'image_size': size},
            'model': {'conv_layers_params': cp.change(opp=0),
                      'top_layer_params': tp,
                      'image_size': size_int}
        },
        {
            'se_group': {'class_filter': cf_easy,
                         'image_size': size},
            'model': {'conv_layers_params': cp.change(opp=0.05),
                      'top_layer_params': tp,
                      'image_size': size_int}
        },
        {
            'se_group': {'class_filter': cf_easy,
                         'image_size': size},
            'model': {'conv_layers_params': cp.change(opp=0.5),
                      'top_layer_params': tp,
                      'image_size': size_int}
        },
        {
            'se_group': {'class_filter': cf_easy,
                         'image_size': size},
            'model': {'conv_layers_params': cp.change(opp=0.95),
                      'top_layer_params': tp,
                      'image_size': size_int}
        },
        {
            'se_group': {'class_filter': cf_easy,
                         'image_size': size},
            'model': {'conv_layers_params': cp.change(opp=1),
                      'top_layer_params': tp,
                      'image_size': size_int}
        },
        # {
        #     'se_group': {'class_filter': cf_easy,
        #                  'image_size': size},
        #     'model': {'conv_layers_params': cp.change(opp=0.3),
        #               'top_layer_params': tp,
        #               'image_size': size_int}
        # },
        # {
        #     'se_group': {'class_filter': cf_easy,
        #                  'image_size': size},
        #     'model': {'conv_layers_params': cp.change(opp=0.7),
        #               'top_layer_params': tp,
        #               'image_size': size_int}
        # }
    ]

    exp_params.experiment_params.num_layers = num_conv_layers + 1  # needs to be there

    run_measurement(name, params, args, exp_params)
Exemple #7
0
def run_rf_size(args, exp_params, opp: float = 1.0):
    name = "rf_size"

    cp = MultipleLayersParams()
    cp.compute_reconstruction = False
    cp.conv_classes = ConvLayer
    cp.sp_buffer_size = 6000
    cp.sp_batch_size = 4000
    cp.learning_rate = 0.1
    cp.cluster_boost_threshold = 1000
    cp.max_encountered_seqs = 2000
    cp.max_frequent_seqs = 1000
    cp.seq_lookahead = 1
    cp.seq_length = 5
    cp.opp = opp

    cp.n_cluster_centers = 200

    cp.rf_size = (8, 8)
    cp.rf_stride = (8, 8)
    cp.num_conv_layers = 1

    tp = MultipleLayersParams()
    tp.n_cluster_centers = 150
    tp.sp_buffer_size = 3000
    tp.sp_batch_size = 2000
    tp.learning_rate = 0.15
    tp.cluster_boost_threshold = 1000
    tp.compute_reconstruction = True

    cf_easy = [1, 2, 3, 4]
    size = SeDatasetSize.SIZE_64
    size_int = (size.value, size.value, 3)

    params = [
        {
            'se_group': {'class_filter': cf_easy,
                         'image_size': size},
            'model': {'conv_layers_params': cp.change(rf_stride=([(8, 8)])),
                      'top_layer_params': tp,
                      'image_size': size_int}
        },
        {
            'se_group': {'class_filter': cf_easy,
                         'image_size': size},
            'model': {'conv_layers_params': cp.change(rf_stride=([(4, 4)])),
                      'top_layer_params': tp,
                      'image_size': size_int}
        },
        {
            'se_group': {'class_filter': cf_easy,
                         'image_size': size},
            'model': {'conv_layers_params': cp.change(rf_stride=([(2, 2)])),
                      'top_layer_params': tp,
                      'image_size': size_int}
        },
    ]

    exp_params.experiment_params.num_layers = 2  # needs to be there

    run_measurement(name, params, args, exp_params)
Exemple #8
0
    params = [{
        'se_group': {
            'class_filter': cf_easy
        },
        'model': {
            'conv_layers_params': cp,
            'top_layer_params': tp
        }
    }, {
        'se_group': {
            'class_filter': cf_easy
        },
        'model': {
            'conv_layers_params':
            cp.change(learning_rate=0.7,
                      sp_batch_size=30,
                      n_cluster_centers=300),
            'top_layer_params':
            tp.change(learning_rate=0.7,
                      sp_batch_size=15,
                      n_cluster_centers=200)
        }
    }]

    # TODO merging common params not supported yeat
    common_params = [{
        'conv_layers_params': cp,
        'top_layer_params': tp,
        'image_size': SeDatasetSize.SIZE_64,
        'class_filter': cf_easy,
        'model_seed': None,