Пример #1
0
def get_validation_split(data_file, data_split=0.8, overwrite=False):
    if overwrite or not os.path.exists(config["training_file"]):
        print("Creating validation split...")
        nb_samples = data_file.root.data.shape[0]
        sample_list = range(nb_samples)
        training_list, testing_list = split_list(sample_list, split=data_split)
        pickle_dump(training_list, config["training_file"])
        pickle_dump(testing_list, config["testing_file"])
        return training_list, testing_list
    else:
        print("Loading previous validation split...")
        return pickle_load(config["training_file"]), pickle_load(
            config["testing_file"])
def _file2nnet(layers, set_layer_num = -1, filename='nnet.in', activation='sigmoid', withfinal=True, factor=1.0, gradients=False, factors=None):
    logger = logging.getLogger(__name__)
    logger.info("Loading "+filename)

    # if is KALDI binary
    if fileIsBinary(filename):
        print "Warning dropout factors ignored here"

        nnet = file2nnet_binary(filename)

        n_layers = len(nnet)
        if set_layer_num == -1:
            set_layer_num = n_layers - 1

        for i in xrange(set_layer_num):
            layers[i].params[0].set_value(factor * nnet[i]["weights"].astype(dtype=theano.config.floatX))
            layers[i].params[1].set_value(nnet[i]["bias"].astype(dtype=theano.config.floatX))

        if withfinal:
            #print nnet[-1]["weights"][0][0:10]
            layers[-1].params[0].set_value(nnet[-1]["weights"].astype(dtype=theano.config.floatX))
            layers[-1].params[1].set_value(nnet[-1]["bias"].astype(dtype=theano.config.floatX))

        return

    # else, it's pdnn format

    n_layers = len(layers)

    if factors is None:
        factors = [1.0 for l in layers]

    if len(factors) != n_layers:
        raise Exception("number of factors does not equal number of hidden + softmax")

    nnet_dict = {}
    if set_layer_num == -1:
        set_layer_num = n_layers - 1

    nnet_dict = utils.pickle_load(filename)

    for i in xrange(set_layer_num):
        logger.info("Loading hidden layer "+str(i))

        dict_key = str(i) + ' ' + activation + ' W'
        layers[i].params[0].set_value(factors[i] * factor * np.asarray(string_2_array(nnet_dict[dict_key]), dtype=theano.config.floatX))
        dict_key = str(i) + ' ' + activation + ' b' 
        layers[i].params[1].set_value(np.asarray(string_2_array(nnet_dict[dict_key]), dtype=theano.config.floatX))

        if gradients:
            dict_key = str(i) + ' ' + activation + ' dW'
            layers[i].delta_params[0].set_value(np.asarray(string_2_array(nnet_dict[dict_key]), dtype=theano.config.floatX))
            dict_key = str(i) + ' ' + activation + ' db' 
            layers[i].delta_params[1].set_value(np.asarray(string_2_array(nnet_dict[dict_key]), dtype=theano.config.floatX))            
        else:
            zero(layers[i].delta_params[0])
            zero(layers[i].delta_params[1])

        dict_key = str(i) + ' ' + activation + ' W_carry'
        if layers[i].kahan and dict_key in nnet_dict:
            logger.info("Loading hidden kahan")
            dict_key = str(i) + ' ' + activation + ' W_carry'
            layers[i].params_carry[0].set_value(np.asarray(string_2_array(nnet_dict[dict_key]), dtype=theano.config.floatX))
            dict_key = str(i) + ' ' + activation + ' b_carry' 
            layers[i].params_carry[1].set_value(np.asarray(string_2_array(nnet_dict[dict_key]), dtype=theano.config.floatX))            
            #dict_key = str(i) + ' ' + activation + ' dW_carry'
            #layers[i].delta_params_carry[0].set_value(np.asarray(string_2_array(nnet_dict[dict_key]), dtype=theano.config.floatX))
            #dict_key = str(i) + ' ' + activation + ' db_carry' 
            #layers[i].delta_params_carry[1].set_value(np.asarray(string_2_array(nnet_dict[dict_key]), dtype=theano.config.floatX))            

        if layers[i].sync:
            layers[i].params_sync[0].set_value(layers[i].params[0].get_value().astype('float32'))
            layers[i].params_sync[1].set_value(layers[i].params[1].get_value().astype('float32'))
            logger.info("Copy params to sync")

    if withfinal:
        logger.info("Loading final layer ")

        dict_key = 'logreg W'
        layers[-1].params[0].set_value(factors[-1] * np.asarray(string_2_array(nnet_dict[dict_key]), dtype=theano.config.floatX))
        dict_key = 'logreg b'
        layers[-1].params[1].set_value(np.asarray(string_2_array(nnet_dict[dict_key]), dtype=theano.config.floatX))
        if gradients:
            dict_key = 'logreg dW'
            layers[-1].delta_params[0].set_value(np.asarray(string_2_array(nnet_dict[dict_key]), dtype=theano.config.floatX))
            dict_key = 'logreg db'
            layers[-1].delta_params[1].set_value(np.asarray(string_2_array(nnet_dict[dict_key]), dtype=theano.config.floatX))
        else:
            zero(layers[-1].delta_params[0])
            zero(layers[-1].delta_params[1])

        dict_key = 'logreg W_carry'
        if layers[-1].kahan and dict_key in nnet_dict:
            logger.info("Loading softmax kahan")
            dict_key = 'logreg W_carry'
            layers[-1].params_carry[0].set_value(np.asarray(string_2_array(nnet_dict[dict_key]), dtype=theano.config.floatX))
            dict_key = 'logreg b_carry' 
            layers[-1].params_carry[1].set_value(np.asarray(string_2_array(nnet_dict[dict_key]), dtype=theano.config.floatX))            
            #dict_key = 'logreg dW_carry'
            #layers[-1].delta_params_carry[0].set_value(np.asarray(string_2_array(nnet_dict[dict_key]), dtype=theano.config.floatX))
            #dict_key = 'logreg db_carry' 
            #layers[-1].delta_params_carry[1].set_value(np.asarray(string_2_array(nnet_dict[dict_key]), dtype=theano.config.floatX))            

        if layers[-1].sync:
            layers[-1].params_sync[0].set_value(layers[-1].params[0].get_value().astype('float32'))
            layers[-1].params_sync[1].set_value(layers[-1].params[1].get_value().astype('float32'))
            logger.info("Copy softmax params to sync")

    if gradients:
        logger.info("Loading gradients")
    else:
        logger.info("Zero-ing gradients")
Пример #3
0
def _nnet2kaldi_main(nnet_spec, set_layer_num = -1, filein='nnet.in',
               fileout='nnet.out', activation='sigmoid', withfinal=True, maxout=False):
    elements = nnet_spec.split(':')
    layers = []
    for x in elements:
        layers.append(int(x))
    if set_layer_num == -1:
        layer_num = len(layers) - 1
    else:
        layer_num = set_layer_num + 1
    nnet_dict = {}
    nnet_dict = utils.pickle_load(filein)

    fout = open(fileout, 'wb')
    for i in xrange(layer_num - 1):
        input_size = int(layers[i])
        if maxout:
            output_size = int(layers[i + 1]) * pool_size
        else:
            output_size = int(layers[i + 1])
        W_layer = []
        b_layer = ''
        for rowX in xrange(output_size):
            W_layer.append('')

        dict_key = str(i) + ' ' + activation + ' W'
        matrix = string_2_array(nnet_dict[dict_key])

        for x in xrange(input_size):
            for t in xrange(output_size):
                W_layer[t] = W_layer[t] + str(matrix[x][t]) + ' '

        dict_key = str(i) + ' ' + activation + ' b'
        vector = string_2_array(nnet_dict[dict_key])
        for x in xrange(output_size):
            b_layer = b_layer + str(vector[x]) + ' '

        fout.write('<affinetransform> ' + str(output_size) + ' ' + str(input_size) + '\n')
        fout.write('[' + '\n')
        for x in xrange(output_size):
            fout.write(W_layer[x].strip() + '\n')
        fout.write(']' + '\n')
        fout.write('[ ' + b_layer.strip() + ' ]' + '\n')
        if maxout:
            fout.write('<maxout> ' + str(int(layers[i + 1])) + ' ' + str(output_size) + '\n')
        else:
            fout.write('<sigmoid> ' + str(output_size) + ' ' + str(output_size) + '\n')

    if withfinal:
        input_size = int(layers[-2])
        output_size = int(layers[-1])
        W_layer = []
        b_layer = ''
        for rowX in xrange(output_size):
            W_layer.append('')

        dict_key = 'logreg W'
        matrix = string_2_array(nnet_dict[dict_key])
        for x in xrange(input_size):
            for t in xrange(output_size):
                W_layer[t] = W_layer[t] + str(matrix[x][t]) + ' '


        dict_key = 'logreg b'
        vector = string_2_array(nnet_dict[dict_key])
        for x in xrange(output_size):
            b_layer = b_layer + str(vector[x]) + ' '

        fout.write('<affinetransform> ' + str(output_size) + ' ' + str(input_size) + '\n')
        fout.write('[' + '\n')
        for x in xrange(output_size):
            fout.write(W_layer[x].strip() + '\n')
        fout.write(']' + '\n')
        fout.write('[ ' + b_layer.strip() + ' ]' + '\n')
        fout.write('<softmax> ' + str(output_size) + ' ' + str(output_size) + '\n')

    fout.close();
Пример #4
0
def _nnet2kaldi_main(nnet_spec,
                     set_layer_num=-1,
                     filein='nnet.in',
                     fileout='nnet.out',
                     activation='sigmoid',
                     withfinal=True,
                     maxout=False):
    elements = nnet_spec.split(':')
    layers = []
    for x in elements:
        layers.append(int(x))
    if set_layer_num == -1:
        layer_num = len(layers) - 1
    else:
        layer_num = set_layer_num + 1
    nnet_dict = {}
    nnet_dict = utils.pickle_load(filein)

    fout = open(fileout, 'wb')
    for i in xrange(layer_num - 1):
        input_size = int(layers[i])
        if maxout:
            output_size = int(layers[i + 1]) * pool_size
        else:
            output_size = int(layers[i + 1])
        W_layer = []
        b_layer = ''
        for rowX in xrange(output_size):
            W_layer.append('')

        dict_key = str(i) + ' ' + activation + ' W'
        matrix = string_2_array(nnet_dict[dict_key])

        for x in xrange(input_size):
            for t in xrange(output_size):
                W_layer[t] = W_layer[t] + str(matrix[x][t]) + ' '

        dict_key = str(i) + ' ' + activation + ' b'
        vector = string_2_array(nnet_dict[dict_key])
        for x in xrange(output_size):
            b_layer = b_layer + str(vector[x]) + ' '

        fout.write('<affinetransform> ' + str(output_size) + ' ' +
                   str(input_size) + '\n')
        fout.write('[' + '\n')
        for x in xrange(output_size):
            fout.write(W_layer[x].strip() + '\n')
        fout.write(']' + '\n')
        fout.write('[ ' + b_layer.strip() + ' ]' + '\n')
        if maxout:
            fout.write('<maxout> ' + str(int(layers[i + 1])) + ' ' +
                       str(output_size) + '\n')
        else:
            fout.write('<sigmoid> ' + str(output_size) + ' ' +
                       str(output_size) + '\n')

    if withfinal:
        input_size = int(layers[-2])
        output_size = int(layers[-1])
        W_layer = []
        b_layer = ''
        for rowX in xrange(output_size):
            W_layer.append('')

        dict_key = 'logreg W'
        matrix = string_2_array(nnet_dict[dict_key])
        for x in xrange(input_size):
            for t in xrange(output_size):
                W_layer[t] = W_layer[t] + str(matrix[x][t]) + ' '

        dict_key = 'logreg b'
        vector = string_2_array(nnet_dict[dict_key])
        for x in xrange(output_size):
            b_layer = b_layer + str(vector[x]) + ' '

        fout.write('<affinetransform> ' + str(output_size) + ' ' +
                   str(input_size) + '\n')
        fout.write('[' + '\n')
        for x in xrange(output_size):
            fout.write(W_layer[x].strip() + '\n')
        fout.write(']' + '\n')
        fout.write('[ ' + b_layer.strip() + ' ]' + '\n')
        fout.write('<softmax> ' + str(output_size) + ' ' + str(output_size) +
                   '\n')

    fout.close()
Пример #5
0
def _file2nnet(layers, set_layer_num = -1, filename='nnet.in', activation='sigmoid', withfinal=True, factor=1.0, gradients=False, factors=None):
    logger = logging.getLogger(__name__)
    logger.info("Loading "+filename)

    # if is KALDI binary
    if fileIsBinary(filename):
        print("Warning dropout factors ignored here")

        nnet = file2nnet_binary(filename)

        n_layers = len(nnet)
        if set_layer_num == -1:
            set_layer_num = n_layers - 1

        for i in xrange(set_layer_num):
            layers[i].params[0].set_value(factor * nnet[i]["weights"].astype(dtype=theano.config.floatX))
            layers[i].params[1].set_value(nnet[i]["bias"].astype(dtype=theano.config.floatX))

        if withfinal:
            #print(nnet[-1]["weights"][0][0:10])
            layers[-1].params[0].set_value(nnet[-1]["weights"].astype(dtype=theano.config.floatX))
            layers[-1].params[1].set_value(nnet[-1]["bias"].astype(dtype=theano.config.floatX))

        return

    # else, it's pdnn format

    n_layers = len(layers)

    if factors is None:
        factors = [1.0 for l in layers]

    if len(factors) != n_layers:
        raise Exception("number of factors does not equal number of hidden + softmax")

    nnet_dict = {}
    if set_layer_num == -1:
        set_layer_num = n_layers - 1

    nnet_dict = utils.pickle_load(filename)

    for i in xrange(set_layer_num):
        logger.info("Loading hidden layer "+str(i))

        dict_key = str(i) + ' ' + activation + ' W'
        layers[i].params[0].set_value(factors[i] * factor * np.asarray(string_2_array(nnet_dict[dict_key]), dtype=theano.config.floatX))
        dict_key = str(i) + ' ' + activation + ' b'
        layers[i].params[1].set_value(np.asarray(string_2_array(nnet_dict[dict_key]), dtype=theano.config.floatX))

        if gradients:
            dict_key = str(i) + ' ' + activation + ' dW'
            layers[i].delta_params[0].set_value(np.asarray(string_2_array(nnet_dict[dict_key]), dtype=theano.config.floatX))
            dict_key = str(i) + ' ' + activation + ' db'
            layers[i].delta_params[1].set_value(np.asarray(string_2_array(nnet_dict[dict_key]), dtype=theano.config.floatX))
        else:
            zero(layers[i].delta_params[0])
            zero(layers[i].delta_params[1])

        dict_key = str(i) + ' ' + activation + ' W_carry'
        if layers[i].kahan and dict_key in nnet_dict:
            logger.info("Loading hidden kahan")
            dict_key = str(i) + ' ' + activation + ' W_carry'
            layers[i].params_carry[0].set_value(np.asarray(string_2_array(nnet_dict[dict_key]), dtype=theano.config.floatX))
            dict_key = str(i) + ' ' + activation + ' b_carry'
            layers[i].params_carry[1].set_value(np.asarray(string_2_array(nnet_dict[dict_key]), dtype=theano.config.floatX))
            #dict_key = str(i) + ' ' + activation + ' dW_carry'
            #layers[i].delta_params_carry[0].set_value(np.asarray(string_2_array(nnet_dict[dict_key]), dtype=theano.config.floatX))
            #dict_key = str(i) + ' ' + activation + ' db_carry'
            #layers[i].delta_params_carry[1].set_value(np.asarray(string_2_array(nnet_dict[dict_key]), dtype=theano.config.floatX))

        if layers[i].sync:
            layers[i].params_sync[0].set_value(layers[i].params[0].get_value().astype('float32'))
            layers[i].params_sync[1].set_value(layers[i].params[1].get_value().astype('float32'))
            logger.info("Copy params to sync")

    if withfinal:
        logger.info("Loading final layer ")

        dict_key = 'logreg W'
        layers[-1].params[0].set_value(factors[-1] * np.asarray(string_2_array(nnet_dict[dict_key]), dtype=theano.config.floatX))
        dict_key = 'logreg b'
        layers[-1].params[1].set_value(np.asarray(string_2_array(nnet_dict[dict_key]), dtype=theano.config.floatX))
        if gradients:
            dict_key = 'logreg dW'
            layers[-1].delta_params[0].set_value(np.asarray(string_2_array(nnet_dict[dict_key]), dtype=theano.config.floatX))
            dict_key = 'logreg db'
            layers[-1].delta_params[1].set_value(np.asarray(string_2_array(nnet_dict[dict_key]), dtype=theano.config.floatX))
        else:
            zero(layers[-1].delta_params[0])
            zero(layers[-1].delta_params[1])

        dict_key = 'logreg W_carry'
        if layers[-1].kahan and dict_key in nnet_dict:
            logger.info("Loading softmax kahan")
            dict_key = 'logreg W_carry'
            layers[-1].params_carry[0].set_value(np.asarray(string_2_array(nnet_dict[dict_key]), dtype=theano.config.floatX))
            dict_key = 'logreg b_carry'
            layers[-1].params_carry[1].set_value(np.asarray(string_2_array(nnet_dict[dict_key]), dtype=theano.config.floatX))
            #dict_key = 'logreg dW_carry'
            #layers[-1].delta_params_carry[0].set_value(np.asarray(string_2_array(nnet_dict[dict_key]), dtype=theano.config.floatX))
            #dict_key = 'logreg db_carry'
            #layers[-1].delta_params_carry[1].set_value(np.asarray(string_2_array(nnet_dict[dict_key]), dtype=theano.config.floatX))

        if layers[-1].sync:
            layers[-1].params_sync[0].set_value(layers[-1].params[0].get_value().astype('float32'))
            layers[-1].params_sync[1].set_value(layers[-1].params[1].get_value().astype('float32'))
            logger.info("Copy softmax params to sync")

    if gradients:
        logger.info("Loading gradients")
    else:
        logger.info("Zero-ing gradients")
Пример #6
0
def main():
    np.set_printoptions(precision=2, linewidth=128, suppress=True)
    path = 'test'
    config.device = torch.device('cuda:1')
    config.set_device(-1)
    model = Model('model_201912080009')
    model.restore()

    files = os.listdir('gen/%s/' % path)
    files.sort(key=lambda k: k.split('_')[0], reverse=True)
    # print(files[-1])
    file = np.random.choice(files[:100])
    # file = '201912101326_85d94af6fe1a588b.pkl'

    print(file)
    data = pickle_load('gen/%s/%s' % (path, file))
    # data = pickle_load('gen/test/' + files[-2])
    # np.random.shuffle(data)

    player = 2

    init, actions, _v = [None, [], -1.0]

    init = [[2, 1, 2, 1, 0, 1, 3, 1, 2, 1, 0, 1, 2, 0, 0],
            [2, 1, 1, 2, 1, 1, 0, 3, 1, 2, 0, 2, 0, 0, 1],
            [0, 1, 1, 1, 3, 2, 0, 0, 1, 1, 3, 1, 2, 1, 0]]
    actions = [
        352, 352, 353, 338, 343, 347, 123, 0, 0, 20, 22, 23, 24, 26, 0, 28, 0,
        29, 0, 0, 39, 0, 0, 116, 0, 0, 76, 324, 0, 0, 41, 42, 0, 0, 92, 317,
        320, 0, 0, 31, 42, 0, 0, 15, 18
    ]
    init = np.array(init, dtype=np.int32)

    # actions = [353, 352, 352, 339, 349, 349, 15]

    # init = [[2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 0, 0, 0, 0, 0],
    # 		[2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 0, 0, 0, 0, 0],
    # 		[0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 4, 4, 4, 1, 1]]
    # init = np.array(init, dtype=np.int32)
    # actions = [353, 352, 352, 344, 345, 346, 151]

    # init, actions, _v = data[player]
    print(_v, player)
    print(init)
    print(actions)
    print('=============================================')
    print('player:', player)

    histories = unpack(init, actions, player)
    histories, lengths = history_regularize(histories)
    histories, lengths = to_cuda(histories, lengths)

    vs, ps, _ = model(histories, lengths, None)

    env = GameEnv(False)
    env.load(init)
    game = Game(env, player)
    for v, p, action in zip(vs, ps, actions):
        print('----------------------------------')
        print('my_player: %d, curr_player: %d' % (player, game.curr_player()))
        # for action, _dist in enumerate(dist):
        # 	print(action, _dist)
        idx = np.argsort(p)[::-1]
        for i in range(8):
            print(game.could_move(idx[i]), end=' ')
            print('(%d, %.2f%%)' % (idx[i], p[idx[i]] * 100), end='\n')
        print('action: %d, %.2f%%' % (action, p[action] * 100))

        if idx[0] == 60 and p[idx[0]] > 0.3:
            print(game)
            print(game.policy())
            print(game.hand_cards_num())
            print(game.bottom())
            print(game.curr_player(), game.lord_player())
            return 0

        # model_input = game.to_model_input()
        # for channel in range(26, 28):
        # 	print(channel)
        # 	print(model_input[channel])
        print('%.1f, %.3f' % (_v, v[0]))

        game.move(action)
        print(game)
        print('Gauss:', game.gauss())
Пример #7
0
def get_test_indices():
    return pickle_load(config["testing_file"])