Пример #1
0
def test_tron():
    import py.test
    py.test.skip("WIP")
    game = "tron_10x10"
    generation = "test_1"

    man = get_manager()

    # create a nn
    model_conf = templates.nn_model_config_template(game)
    generation_descr = templates.default_generation_desc(
        game, generation, multiple_policy_heads=True)

    nn = man.create_new_network(game, model_conf, generation_descr)

    game_info = lookup.by_name(game)
    sm = game_info.get_sm()
    basestate = sm.get_initial_state()

    policy, scores = nn.predict_1(basestate.to_list())
    print policy, scores

    res = nn.predict_n([basestate.to_list(), basestate.to_list()])
    assert len(res) == 2 and len(res[0]) == 2 and len(res[1]) == 2
    print policy, scores
Пример #2
0
def speed_test():
    ITERATIONS = 3

    man = get_manager()

    # get data
    train_config = config()

    # get nn to test speed on
    transformer = man.get_transformer(train_config.game)
    trainer = train.TrainManager(train_config, transformer)

    nn_model_config = templates.nn_model_config_template(train_config.game, "small", transformer)
    generation_descr = templates.default_generation_desc(train_config.game)
    trainer.get_network(nn_model_config, generation_descr)

    data = trainer.gather_data()

    res = []

    batch_size = 4096
    sample_count = len(data.inputs)
    keras_model = trainer.nn.get_model()

    # warm up
    for i in range(2):
        idx, end_idx = i * batch_size, (i + 1) * batch_size
        print i, idx, end_idx
        inputs = np.array(data.inputs[idx:end_idx])
        res.append(keras_model.predict(inputs, batch_size=batch_size))
        print res[0]

    for _ in range(ITERATIONS):
        res = []
        times = []
        gc.collect()

        print 'Starting speed run'
        num_batches = sample_count / batch_size + 1
        print "batches %s, batch_size %s, inputs: %s" % (num_batches,
                                                         batch_size,
                                                         len(data.inputs))
        for i in range(num_batches):
            idx, end_idx = i * batch_size, (i + 1) * batch_size
            inputs = np.array(data.inputs[idx:end_idx])
            print "inputs", len(inputs)
            s = time.time()
            Y = keras_model.predict(inputs, batch_size=batch_size)
            times.append(time.time() - s)
            print "outputs", len(Y[0])

        print "times taken", times
        print "total_time taken", sum(times)
        print "predictions per second", sample_count / float(sum(times))
Пример #3
0
    def create_new_network(self, game, nn_model_conf=None, generation_descr=None):
        if generation_descr is None:
            generation_descr = templates.default_generation_desc(game)

        transformer = self.get_transformer(game, generation_descr)

        if isinstance(nn_model_conf, str):
            nn_model_conf = templates.nn_model_config_template(game,
                                                               network_size_hint=nn_model_conf,
                                                               transformer=transformer)

        elif nn_model_conf is None:
            nn_model_conf = templates.nn_model_config_template(game,
                                                               network_size_hint="small",
                                                               transformer=transformer)

        assert isinstance(nn_model_conf, confs.NNModelConfig)
        assert isinstance(generation_descr, datadesc.GenerationDescription)

        keras_model = get_network_model(nn_model_conf, generation_descr)
        return NeuralNetwork(transformer, keras_model, generation_descr)
Пример #4
0
def test_nn_model_config_template():
    game = "breakthrough"
    gen_prefix = "x1"
    prev_states = 1

    gen_desc = templates.default_generation_desc(
        game,
        gen_prefix,
        multiple_policy_heads=True,
        num_previous_states=prev_states)
    transformer = man.get_transformer(game, gen_desc)

    model = templates.nn_model_config_template("breakthrough", "small",
                                               transformer)
    attrutil.pprint(model)

    keras_model = get_network_model(model, gen_desc)
    network = NeuralNetwork(transformer, keras_model, gen_desc)
    print network
    network.summary()
Пример #5
0
def go():
    ITERATIONS = 3

    man = get_manager()

    # get data
    train_config = config()

    # get nn to test speed on
    transformer = man.get_transformer(train_config.game)
    trainer = train.TrainManager(train_config, transformer)

    nn_model_config = templates.nn_model_config_template(train_config.game, "small", transformer)
    generation_descr = templates.default_generation_desc(train_config.game)
    trainer.get_network(nn_model_config, generation_descr)

    data = trainer.gather_data()

    r = Runner(trainer.gather_data(), trainer.nn.get_model())
    r.warmup()
Пример #6
0
def get_nn_model(game, transformer, size="small"):
    config = templates.nn_model_config_template(game, size, transformer)

    config.cnn_filter_size = 128
    config.cnn_kernel_size = 3
    config.dropout_rate_policy = 0.25
    config.dropout_rate_value = 0.5
    config.input_channels = 3
    config.input_columns = 8
    config.input_rows = 8
    config.l2_regularisation = False
    config.multiple_policies = True
    config.policy_dist_count = [
        155,
        155
    ]
    config.residual_layers = 8
    config.role_count = 2
    config.value_hidden_size = 256
    config.leaky_relu = False

    return config
Пример #7
0
def test_save_load_net():
    man = get_manager()
    game = "breakthrough"
    generation = "gen_1"

    generation_descr = templates.default_generation_desc(game, generation)
    transformer = man.get_transformer(game, generation_descr)
    model_conf = templates.nn_model_config_template(game, "tiny", transformer)
    nn = man.create_new_network(game, model_conf, generation_descr)
    nn.summary()

    man.save_network(nn)

    assert man.can_load(game, generation)

    nn2 = man.load_network(game, generation)
    nn2.summary()

    assert nn is not nn2
    assert nn.generation_descr.name == generation
    assert nn.generation_descr.name == nn2.generation_descr.name
    assert nn.gdl_bases_transformer is nn2.gdl_bases_transformer
Пример #8
0
def test_net_sizes_with_l2():
    man = get_manager()

    for game in games:
        generation_descr = templates.default_generation_desc(game, name="L2_1")
        transformer = man.get_transformer(game, generation_descr)

        # create a nn
        for size in "tiny medium".split():
            print
            print size
            model_conf = templates.nn_model_config_template(
                game, size, transformer)
            model_conf.l2_regularisation = True
            model_conf.dropout_rate_value = -1
            model_conf.dropout_rate_policy = -1
            nn = man.create_new_network(game, model_conf, generation_descr)
            nn.summary()
            print
            # print "hit return to compile"
            # raw_input()
            nn.compile()
Пример #9
0
def get_nn_model(game, transformer, size="small"):
    config = templates.nn_model_config_template(game, size, transformer)
    assert config.multiple_policies
    assert config.cnn_kernel_size == 3
    assert not config.l2_regularisation

    # v1
    # config.cnn_filter_size = 64
    # config.residual_layers = 6
    # config.value_hidden_size = 128

    # abuse these for v2
    config.cnn_filter_size = 96
    config.residual_layers = -1
    config.value_hidden_size = 0

    config.dropout_rate_policy = 0.25
    config.dropout_rate_value = 0.5

    config.role_count = 2
    config.leaky_relu = False

    return config
Пример #10
0
def test_trainer_update_config():

    # we need the data for this test
    conf = get_conf_reversi()

    # create a transformer
    man = get_manager()
    generation_descr = templates.default_generation_desc(conf.game)
    generation_descr.num_previous_states = 2
    generation_descr.multiple_policy_heads = True
    transformer = man.get_transformer(conf.game, generation_descr)

    # create the manager
    trainer = train.TrainManager(conf, transformer, next_generation_prefix="x2test")

    nn_model_config = templates.nn_model_config_template(conf.game, "tiny", transformer)
    trainer.get_network(nn_model_config, generation_descr)

    data = trainer.gather_data()

    print data

    trainer.do_epochs(data)
    trainer.save()