Example #1
0
def main():
    # Utility object for reading, writing parameters, etc.
    utils = UTILS()

    # Reading parameters from para.dat file
    parameters = utils.read_parameter_file()

    # Command line specified parameters overide parameter file values
    utils.read_command_line_arg(parameters, sys.argv)

    parameters_nonint = parameters.copy()
    parameters_nonint['J'] = 0.0

    # Printing parameters for user
    utils.print_parameters(parameters)

    # Defining Hamiltonian
    H = HAMILTONIAN(**parameters)
    H_nonint = HAMILTONIAN(**parameters_nonint)

    # Defines the model, and precomputes evolution matrices given set of states
    model = MODEL(H, parameters)
    model_nonint = MODEL(H_nonint, parameters_nonint)

    # evolve with non-int H but starting and targeting interacting states
    model_nonint.psi_i = model.psi_i.copy()
    model_nonint.psi_target = model.psi_target.copy()
    model_nonint.H_target = model.H_target.copy()
    # model_nonint.param=model.param.copy()

    model = model_nonint
    parameters = parameters_nonint

    #print( abs(model.psi_i.T.dot(model.psi_target))**2 )

    #exit()

    root = 'data/non-int-evo/'
    #root='data/data_non-int/'

    # Run simulated annealing
    if parameters['task'] == 'SA':
        print("Simulated annealing")
        run_SA(parameters, model, utils, root)
    elif parameters['task'] == 'GB':
        print("Gibbs sampling")
        run_GS(parameters, model)
    elif parameters['task'] == 'SD' or parameters['task'] == 'SD2':
        print("Stochastic descent")
        run_SD(parameters, model, utils, root)
    elif parameters['task'] == 'ES':
        print("Exact spectrum")
        run_ES(parameters, model, utils, root)
    elif parameters['task'] == 'SASD':
        print("Simulating annealing followed by stochastic descent")
        run_SA(parameters, model, utils, root)

    exit()
Example #2
0
 def _load_model(self, network):
     """Model Loader Module
     Load model from `MODEL`
     """
     with tf.variable_scope('Model'):
         self.model = MODEL(**config_model)
         self.model.build_model(network=network)
Example #3
0
def test_one_dataset(params, file_name, test_q_data, test_qa_data):
    print("\n\nStart testing ......................")
    g_model = MODEL(n_question=params.n_question,
                    seqlen=params.seqlen,
                    batch_size=params.batch_size,
                    q_embed_dim=params.q_embed_dim,
                    qa_embed_dim=params.qa_embed_dim,
                    memory_size=params.memory_size,
                    memory_key_state_dim=params.memory_key_state_dim,
                    memory_value_state_dim=params.memory_value_state_dim,
                    final_fc_dim=params.final_fc_dim)
    # create a module by given a Symbol
    test_net = mx.mod.Module(symbol=g_model.sym_gen(),
                             data_names=['q_data', 'qa_data'],
                             label_names=['target'],
                             context=params.ctx)
    # cresate memory by given input shapes
    test_net.bind(data_shapes=[
        mx.io.DataDesc(name='q_data', shape=(params.seqlen, params.batch_size), layout='SN'),
        mx.io.DataDesc(name='qa_data', shape=(params.seqlen, params.batch_size), layout='SN')],
        label_shapes=[mx.io.DataDesc(name='target', shape=(params.seqlen, params.batch_size), layout='SN')])
    arg_params, aux_params = load_params(prefix=os.path.join('model', params.load, file_name),
                                         epoch=100)
    test_net.init_params(arg_params=arg_params, aux_params=aux_params,
                         allow_missing=False)
    test_loss, test_accuracy, test_auc = test(test_net, params, test_q_data, test_qa_data, label='Test')
    log_info = "\ntest_auc:\t{}\ntest_accuracy:\t{}\ntest_loss:\t{}\n".format(test_auc, test_accuracy, test_loss)
    print(log_info)
    f_save_log = open(os.path.join('result', params.save, file_name), 'a')
    f_save_log.write(log_info)
Example #4
0
def main():
    # Utility object for reading, writing parameters, etc. 
    utils = UTILS()

    # Reading parameters from para.dat file
    parameters = utils.read_parameter_file(file="../para.dat")
    parameters['root'] = "../data/"

    utils.read_command_line_arg(parameters,sys.argv)

    # Printing parameters for user
    utils.print_parameters(parameters)

    # Defining Hamiltonian
    H = HAMILTONIAN(**parameters)

    # Defines the model, and precomputes
    model = MODEL(H, parameters)

    # save interacting states
    if abs(parameters['J'] - 1.0) < 0.001 :
        with open('psi_L=2_J=1.pkl','wb') as f :
            pickle.dump([model.psi_i, model.psi_target], f)

    # load interacting states
    if abs(parameters['J']) < 0.0001:
        with open('psi_L=2_J=1.pkl','rb') as f :
            model.psi_i, model.psi_target = pickle.load(f)
    

    print(model.psi_i)
Example #5
0
def main(argv):
    manager = DataManager(FLAGS.data)
    manager.load()

    sess = tf.Session()

    normaliser = (FLAGS.latent_size / 10) * ((64 * 64) / manager.input_size)

    model = MODEL(latent_size=FLAGS.latent_size,
                  gamma=normaliser * FLAGS.gamma,
                  capacity_limit=FLAGS.capacity_limit,
                  capacity_change_duration=FLAGS.capacity_change_duration,
                  learning_rate=FLAGS.learning_rate,
                  n_channels=manager.n_channels)

    sess.run(tf.global_variables_initializer())

    saver = load_checkpoints(sess)

    if FLAGS.training:
        # Train
        train(sess, model, manager, saver)
    else:
        reconstruct_check_images = manager.get_random_images(10)
        # Image reconstruction check
        reconstruct_check(sess, model, reconstruct_check_images)
        # Disentangle check
        disentangle_check(sess, model, manager)
Example #6
0
def main(_):

    if not os.path.exists(conf["checkpoint_dir"]):
        os.makedirs(conf["checkpoint_dir"])
    if not os.path.exists(conf["output_dir"]):
        os.makedirs(conf["output_dir"])

    with tf.Session() as sess:
        srcnn = MODEL(sess,
                      mode=conf["mode"],
                      epoch=conf["epoch"],
                      batch_size=conf["batch_size"],
                      image_size=conf["image_size"],
                      label_size=conf["label_size"],
                      learning_rate=conf["learning_rate"],
                      color_dim=conf["color_dim"],
                      scale=conf["scale"],
                      train_extract_stride=conf["train_extract_stride"],
                      test_extract_stride=conf["test_extract_stride"],
                      checkpoint_dir=conf["checkpoint_dir"],
                      log_dir=conf["log_dir"],
                      output_dir=conf["output_dir"],
                      train_dir=conf["train_dir"],
                      test_dir=conf["test_dir"],
                      h5_dir=conf["h5_dir"],
                      train_h5_name=conf["train_h5_name"],
                      test_h5_name=conf["test_h5_name"],
                      ckpt_name=conf["ckpt_name"],
                      is_train=conf["is_train"],
                      model_ticket=conf["model_ticket"],
                      curr_epoch=conf["curr_epoch"])

        if conf["is_train"]:
            srcnn.train()
Example #7
0
def test_one_dataset(params, file_name, test_q_data, test_qa_data, best_epoch):
    print("\n\nStart testing ......................\n Best epoch:", best_epoch)
    val_best_epochs.append(best_epoch)
    g_model = MODEL(n_question=params.n_question,
                    seqlen=params.seqlen,
                    batch_size=params.batch_size,
                    q_embed_dim=params.q_embed_dim,
                    qa_embed_dim=params.qa_embed_dim,
                    memory_size=params.memory_size,
                    memory_key_state_dim=params.memory_key_state_dim,
                    memory_value_state_dim=params.memory_value_state_dim, 
                    final_fc_dim=params.final_fc_dim)
    # create a module by given a Symbol
    test_net = mx.mod.Module(symbol=g_model.sym_gen(),
                             data_names=['q_data', 'qa_data'],
                             label_names=['target'],
                             context=params.ctx)
    # cresate memory by given input shapes
    test_net.bind(data_shapes=[
        mx.io.DataDesc(name='q_data', shape=(params.seqlen, params.batch_size), layout='SN'),
        mx.io.DataDesc(name='qa_data', shape=(params.seqlen, params.batch_size), layout='SN')],
        label_shapes=[mx.io.DataDesc(name='target', shape=(params.seqlen, params.batch_size), layout='SN')])
    arg_params, aux_params = load_params(prefix=os.path.join('model', params.load, file_name),
                                         epoch=best_epoch)
    test_net.init_params(arg_params=arg_params, aux_params=aux_params,
                         allow_missing=False)
    test_loss, test_accuracy, test_auc = test(test_net, params, test_q_data, test_qa_data, label='Test')
    print("\ntest_auc\t", test_auc)
    print("test_accuracy\t", test_accuracy)
    print("test_loss\t", test_loss)
    val_auc_acc.append(test_auc)
    val_accuracy.append(test_accuracy)
    val_loss.append(test_loss)
Example #8
0
def test_one_dataset(params, file_name, test_q_data, test_qa_data, test_tf_data, best_epoch, user_id):
    # print("\n\nStart testing ......................\n best_epoch:", best_epoch)
    g_model = MODEL(n_question=params.n_question,
                    seqlen=params.seqlen,
                    batch_size=params.batch_size,
                    q_embed_dim=params.q_embed_dim,
                    qa_embed_dim=params.qa_embed_dim,
                    memory_size=params.memory_size,
                    memory_key_state_dim=params.memory_key_state_dim,
                    memory_value_state_dim=params.memory_value_state_dim,
                    final_fc_dim=params.final_fc_dim)
    # create a module by given a Symbol
    test_net = mx.mod.Module(symbol=g_model.sym_gen(),
                             data_names=['q_data', 'qa_data'],
                             label_names=['target'],
                             context=params.ctx)
    # create memory by given input shapes

    test_net.bind(data_shapes=[
        mx.io.DataDesc(name='q_data', shape=(params.seqlen, params.batch_size), layout='SN'),
        mx.io.DataDesc(name='qa_data', shape=(params.seqlen, params.batch_size), layout='SN')],
        label_shapes=[mx.io.DataDesc(name='target', shape=(params.seqlen, params.batch_size), layout='SN')])

    arg_params, aux_params = load_params(prefix=os.path.join('model', params.load, file_name), epoch=best_epoch)
    test_net.init_params(arg_params=arg_params, aux_params=aux_params, allow_missing=False)

    pred_list, target_list = run.test(test_net, params, test_q_data, test_qa_data, test_tf_data, label='Test')

    return pred_list, target_list
    def __init__(self):
        self.model = MODEL()
        self.transform = transforms.Compose([
            transforms.Resize((100, 100), interpolation=3),
            transforms.ToTensor(),
            transforms.Normalize(mean=[0.485, 0.456, 0.406],
                                 std=[0.229, 0.224, 0.225])
        ])

        self.optimizer = torch.optim.Adam(self.model.parameters(), lr=0.0001)
        self.logsoftmax = nn.LogSoftmax(dim=1)
Example #10
0
def excitations(Fspectrum, parameters):

    hopt_n10 = np.argmax(Fspectrum)

    print('L', 'T', 'dt', sep='\t')
    print(parameters['L'], parameters['T'], parameters['dt'], sep='\t')
    print('Optimal fidelity : %.8f' % Fspectrum[hopt_n10])

    # Defining Hamiltonian
    H = HAMILTONIAN(**parameters)

    # Defines the model, and precomputes evolution matrices given set of states
    model = MODEL(H, parameters)

    n_step = parameters['n_step']

    b2_array = lambda n10: np.array(list(np.binary_repr(n10, width=n_step)),
                                    dtype=np.int)

    exc_dict = {}  # sorting out excitations by they m and m_z

    hopt = b2_array(hopt_n10)  # optimal protcol in array base 2
    mag_opt = np.sum(
        hopt
    )  # same as spin 1/2 ... -> excitations are integer excitations, called spin-1 and spin-2 excitations

    for i in range(n_step):  # spin 1 excitations
        hopt[i] ^= 1
        mz = np.sum(hopt) - mag_opt
        if (1, mz) not in exc_dict.keys():
            exc_dict[(1, mz)] = []

        exc_dict[(1, mz)].append(bool2int(hopt))
        hopt[i] ^= 1

    # --------------------------------
    for i in range(n_step):  # spin 2 excitations
        for j in range(i):

            hopt[i] ^= 1
            hopt[j] ^= 1

            mz = np.sum(hopt) - mag_opt
            if (2, mz) not in exc_dict.keys():
                exc_dict[(2, mz)] = []
            exc_dict[(2, mz)].append(bool2int(hopt))

            hopt[i] ^= 1
            hopt[j] ^= 1

    return exc_dict
Example #11
0
def run():
    args = ARGPARSE()

    if args.is_list_mhcs() == True:
        if not args.is_no_trim_mhc_flag_set():
            for key, value in hla_sequences.items():
                print(key)
        else:
            for key, value in hla_sequences_180.items():
                print(key)
    else:
        # Load Rosetta database files
        init(options='')
        modeller = MODEL(args)
        modeller.model_mhc_for_each_peptide_beta2m_tcr_chaperone()
Example #12
0
def main():
    # Utility object for reading, writing parameters, etc.
    utils = UTILS()

    # Reading parameters from para.dat file
    parameters = utils.read_parameter_file()

    # Command line specified parameters overide parameter file values
    utils.read_command_line_arg(parameters, sys.argv)

    # Printing parameters for user
    utils.print_parameters(parameters)

    # Defining Hamiltonian
    H = HAMILTONIAN(**parameters)

    # Defines the model, and precomputes evolution matrices given set of states
    model = MODEL(H, parameters)

    #root='data/data_ES/'
    #root='data/data_SD/'
    root = 'data/data_GRAPE/'

    # Run simulated annealing
    if parameters['task'] == 'SA':
        print("Simulated annealing")
        run_SA(parameters, model, utils, root)
    elif parameters['task'] == 'GB':
        print("Gibbs sampling")
        run_GS(parameters, model)
    elif parameters['task'] == 'SD' or parameters['task'] == 'SD2':
        print("Stochastic descent")
        run_SD(parameters, model, utils, root)
    elif parameters['task'] == 'GRAPE':
        print("GRAPE")
        run_GRAPE(parameters, model, utils, root)
    elif parameters['task'] == 'ES':
        print("Exact spectrum")
        run_ES(parameters, model, utils, root)
    elif parameters['task'] == 'SASD':
        print("Simulating annealing followed by stochastic descent")
        run_SA(parameters, model, utils, root)

    exit()
Example #13
0
def _init_model(args, data_info):
    n_user = data_info[3]
    n_item = data_info[4]
    n_relation = data_info[5]
    n_entity = data_info[6]
    model = MODEL(args, n_user, n_item, n_relation, n_entity)
    if args.use_cuda:
        model.cuda()
    optimizer_kge = torch.optim.Adam(
        filter(lambda p: p.requires_grad, model.parameters()),
        lr=args.lr_kge,
        weight_decay=args.l2_weight,
    )
    optimizer_cf = torch.optim.Adam(
        filter(lambda p: p.requires_grad, model.parameters()),
        lr=args.lr_cf,
        weight_decay=args.l2_weight,
    )
    return model, optimizer_kge, optimizer_cf
Example #14
0
    def quick_setup(self, argv=[], file='para.dat'):

        argv_tmp = ['myfile.txt'] + argv
        from Hamiltonian import HAMILTONIAN
        from model import MODEL

        # Reading parameters from para.dat file
        parameters = self.read_parameter_file(file=file)

        # Command line specified parameters overide parameter file values
        self.read_command_line_arg(parameters, argv_tmp)

        # Printing parameters for user
        print(parameters)
        #utils.print_parameters(parameters)

        # Defining Hamiltonian
        H = HAMILTONIAN(**parameters)

        # Defines the model, and precomputes evolution matrices given set of states
        return MODEL(H, parameters)
Example #15
0
def run_cso_classifier(paper,
                       modules="both",
                       enhancement="first",
                       explanation=False):

    if modules not in ["syntactic", "semantic", "both"]:
        raise ValueError(
            "Error: Field modules must be 'syntactic', 'semantic' or 'both'")

    if enhancement not in ["first", "all", "no"]:
        raise ValueError(
            "Error: Field enhances must be 'first', 'all' or 'no'")

    if type(explanation) != bool:
        raise ValueError(
            "Error: Explanation must be set to either True or False")

    # Loading ontology and model
    cso = CSO()
    model = MODEL()
    t_paper = Paper(paper, modules)
    result = Result(explanation)

    # Passing parameters to the two classes (synt and sema) and actioning classifiers

    if modules == 'syntactic' or modules == 'both':
        synt_module = synt(cso, t_paper)
        result.set_syntactic(synt_module.classify_syntactic())
        if explanation:
            result.dump_temporary_explanation(synt_module.get_explanation())
    if modules == 'semantic' or modules == 'both':
        sema_module = sema(model, cso, t_paper)
        result.set_semantic(sema_module.classify_semantic())
        if explanation:
            result.dump_temporary_explanation(sema_module.get_explanation())

    result.set_enhanced(
        cso.climb_ontology(getattr(result, "union"), enhancement))

    return result.get_dict()
Example #16
0
def main():

    # Reading parameters from para.dat file
    parameters = utils.read_parameter_file()
    
    # Printing parameters for user
    utils.print_parameters(parameters)

    # Defining Hamiltonian
    H = HAMILTONIAN(**parameters)

    # Defines the model, and precomputes evolution matrices given set of states
    model = MODEL(H, parameters)
    
    L = 6
    T = 0.1
    n_step = 28 
    param = {'L' : L, 'T': T, 'n_step': n_step}
    file_name = make_file_name(param, root= "/projectnb/fheating/SGD/ES/dynamicQL/SA/ES/data/")

    with open(file_name, 'rb') as f:
	    fidelities=pickle.load(f)

    nfid=fidelities.shape[0]
    fid_and_energy=np.empty((nfid,2),dtype=np.float)

    for i,f in zip(range(nfid),fidelity):
        if i%10000 == 0: print(i)
        model.update_protocol(b2_array(i, w = 28))
        psi = model.compute_evolved_state()
        fid_and_energy[i][0]=model.compute_fidelity(psi_evolve = psi)
        fid_and_energy[i][1]=model.compute_energy(psi_evolve = psi)
        print(fid_and_energy[0],'\t',f)
        break

    with open("ES_L-06_T-0.500_n_step-28-test.pkl", ‘wb’) as f:
	    fidelities=pickle.dump(fid_and_energy,f, protocol=4)
Example #17
0
def train_one_dataset(params, file_name, train_q_data, train_qa_data,
                      valid_q_data, valid_qa_data):
    ### ================================== model initialization ==================================
    g_model = MODEL(n_question=params.n_question,
                    seqlen=params.seqlen,
                    batch_size=params.batch_size,
                    q_embed_dim=params.q_embed_dim,
                    qa_embed_dim=params.qa_embed_dim,
                    memory_size=params.memory_size,
                    memory_key_state_dim=params.memory_key_state_dim,
                    memory_value_state_dim=params.memory_value_state_dim,
                    final_fc_dim=params.final_fc_dim)
    # create a module by given a Symbol
    net = mx.mod.Module(symbol=g_model.sym_gen(),
                        data_names=['q_data', 'qa_data'],
                        label_names=['target'],
                        context=params.ctx)
    # create memory by given input shapes
    net.bind(data_shapes=[
        mx.io.DataDesc(name='q_data',
                       shape=(params.seqlen, params.batch_size),
                       layout='SN'),
        mx.io.DataDesc(name='qa_data',
                       shape=(params.seqlen, params.batch_size),
                       layout='SN')
    ],
             label_shapes=[
                 mx.io.DataDesc(name='target',
                                shape=(params.seqlen, params.batch_size),
                                layout='SN')
             ])
    # initial parameters with the default random initializer
    net.init_params(initializer=mx.init.Normal(sigma=params.init_std))
    # decay learning rate in the lr_scheduler
    lr_scheduler = mx.lr_scheduler.FactorScheduler(
        step=20 * (train_q_data.shape[0] / params.batch_size),
        factor=0.667,
        stop_factor_lr=1e-5)

    net.init_optimizer(optimizer='sgd',
                       optimizer_params={
                           'learning_rate': params.lr,
                           'momentum': params.momentum,
                           'lr_scheduler': lr_scheduler
                       })

    for parameters in net.get_params()[0]:
        print parameters, net.get_params()[0][parameters].asnumpy().shape
    print "\n"

    ### ================================== start training ==================================
    all_train_loss = {}
    all_train_accuracy = {}
    all_train_auc = {}
    all_valid_loss = {}
    all_valid_accuracy = {}
    all_valid_auc = {}
    best_valid_auc = 0

    for idx in xrange(params.max_iter):
        train_loss, train_accuracy, train_auc = train(net,
                                                      params,
                                                      train_q_data,
                                                      train_qa_data,
                                                      label='Train')
        valid_loss, valid_accuracy, valid_auc = test(net,
                                                     params,
                                                     valid_q_data,
                                                     valid_qa_data,
                                                     label='Valid')

        print 'epoch', idx + 1
        print "valid_auc\t", valid_auc, "\ttrain_auc\t", train_auc
        print "valid_accuracy\t", valid_accuracy, "\ttrain_accuracy\t", train_accuracy
        print "valid_loss\t", valid_loss, "\ttrain_loss\t", train_loss
        net.save_checkpoint(prefix=os.path.join('model', params.save,
                                                file_name),
                            epoch=idx + 1)
        # output the epoch with the best validation auc
        if valid_auc > best_valid_auc:
            best_valid_auc = valid_auc
            best_epoch = idx + 1

    f_save_log = open(os.path.join('result', params.save, file_name), 'w')
    f_save_log.write("valid_auc:\n" + str(all_valid_auc) + "\n\n")
    f_save_log.write("train_auc:\n" + str(all_train_auc) + "\n\n")
    f_save_log.write("valid_loss:\n" + str(all_valid_loss) + "\n\n")
    f_save_log.write("train_loss:\n" + str(all_train_loss) + "\n\n")
    f_save_log.write("valid_accuracy:\n" + str(all_valid_accuracy) + "\n\n")
    f_save_log.write("train_accuracy:\n" + str(all_train_accuracy) + "\n\n")
    f_save_log.close()
    return best_epoch
Example #18
0
            k += 1

    plt.savefig(filename, bbox_inches='tight')
    plt.close()


def generate_figure3(model, filename):
    pass


if __name__ == '__main__':
    # parse arguments
    args = parse_args()

    # instanciates the model
    model = MODEL(args, test_only=True)

    # trains the model
    model.load()

    # creates the figure directory
    file_dir = os.path.join("figures", model.dataset, model.model_type)
    if not os.path.exists(file_dir):
        os.makedirs(file_dir)

    # sets the random seed for reproducibility
    torch.manual_seed(args.seed)
    np.random.seed(args.seed)

    # generates the figures
    generate_figure1(model, filename=os.path.join(file_dir, "figure1.png"))
Example #19
0
            X_train = np.concatenate([X_train, new], axis=0)
            Y_train = np.concatenate([
                Y_train,
                convert_to_one_hot(np.array([int(f_a)]), len(file_all))
            ])
    print("X_train and Y_train concatenate finish!")
else:
    print("There is no new_data file.")
#%%

# create session
config = tf.ConfigProto(allow_soft_placement=True)
config.gpu_options.allow_growth = True

tf.reset_default_graph()
model = MODEL(LR, FILTER_NUM, BATCH_SIZE)
saver = tf.train.Saver(max_to_keep=1)
with tf.Session(config=config) as sess:
    #saver.restore(sess, './AOI/model/'+'0308'+'/tf_AOI_n2n_'+'1'+'.ckpt')
    #merged = tf.summary.merge_all()
    #writer = tf.summary.FileWriter("TensorBoard/", sess.graph)

    init_op = tf.global_variables_initializer()
    sess.run(init_op)

    #training
    print("Total steps: " + str(int(mnist.train.images.shape[0] / BATCH_SIZE)))
    for e in range(EPOCH):

        rand = np.random.randint(1000)
        np.random.seed(rand)
Example #20
0
def main():
    # Utility object for reading, writing parameters, etc.
    utils = UTILS()

    # Reading parameters from para.dat file
    parameters = utils.read_parameter_file()

    # Command line specified parameters overide parameter file values
    utils.read_command_line_arg(parameters, sys.argv)

    # Printing parameters for user
    utils.print_parameters(parameters)

    # Defining Hamiltonian
    H = HAMILTONIAN(**parameters)

    # Defines the model, and precomputes evolution matrices given set of states
    model = MODEL(H, parameters)

    #n_step = parameters['n_step']
    #X,y=sample_m0(10000,n_step,model)
    #print(y[0:10])
    #plt.hist(y,bins=20)
    #plt.show()

    rob_vs_T = {}
    n_eval = {}
    fid = {}
    res = {}
    visit = {}
    T_list = np.arange(0.1, 4.01, 0.1)
    n_step = 100
    fid_list = []

    for T in T_list:
        parameters['T'] = T
        parameters['n_step'] = n_step
        parameters['dt'] = T / n_step
        file = utils.make_file_name(parameters, root='data/')
        res = parse_data(file, v=3)
        fid_list.append(np.mean(res['F']))
        #n_eval[(n_step,hash(T))]=res['n_fid']
        #fid[(n_step,hash(T))]=res['F']
        #visit[(n_step,hash(T))] = res['n_visit']
    plt.plot(T_list, fid_list)
    plt.xlabel('T')
    plt.ylabel('Fidelity')
    plt.show()
    exit()

    n_step_list = [40, 50, 60, 70, 80, 90, 100, 110]

    for T in T_list:
        for n_step in n_step_list:  #[40,50,60,70,80,90,100,110,120]:

            ##for T in np.arange(0.025,10.001,0.025):
            #    for n_step in [100,200,400] :
            parameters['T'] = T
            parameters['n_step'] = n_step
            parameters['dt'] = T / n_step

            file = utils.make_file_name(parameters, root='data/')
            res = parse_data(file)
            n_eval[(n_step, hash(T))] = res['n_fid']
            fid[(n_step, hash(T))] = res['F']
            visit[(n_step, hash(T))] = res['n_visit']
        '''    with open(file,'rb') as f:
                _, data = pickle.load(f)
                n_elem = len(data)
                n_eval[(n_step,hash(T))]=[]
                n_fid[(n_step,hash(T))]=[]
                for elem in data:
                    n_eval[(n_step,hash(T))].append(elem[0])
                    n_fid[(n_step,hash(T))].append(elem[1])'''

    #print(n_eval)
    #exit()
    n_eval_mean = {}
    fid_mean = {}
    visit_mean = {}
    #print(visit[(40,115292150460684704)])
    #exit()
    for n_step in n_step_list:
        n_eval_mean[n_step] = []
        fid_mean[n_step] = []
        visit_mean[n_step] = []
        for T in T_list:
            hT = hash(T)
            n_eval_mean[n_step].append(
                [T, np.mean(n_eval[(n_step, hT)]) / (n_step * n_step)])
            fid_mean[n_step].append([T, np.mean(fid[(n_step, hT)])])
            visit_mean[n_step].append(
                [T, np.mean(visit[(n_step, hT)]) / (n_step)])

    c_list = [
        '#d53e4f', '#f46d43', '#fdae61', '#fee08b', '#e6f598', '#abdda4',
        '#66c2a5', '#3288bd'
    ]
    for i, n_step in enumerate(n_step_list):
        x = np.array(n_eval_mean[n_step])
        plt.plot(x[:, 0], x[:, 1], c='black', zorder=0)
        plt.scatter(x[:, 0],
                    x[:, 1],
                    c=c_list[i],
                    marker='o',
                    s=5,
                    label='$N=%i$' % n_step,
                    zorder=1)

    plt.title('Number of fidelity evaluations vs. ramp time \n for 2 flip')
    plt.ylabel('$N_{eval}/N^2$')
    plt.xlabel('$T$')
    plt.legend(loc='best')
    plt.tight_layout()
    plt.show()

    for i, n_step in enumerate(n_step_list):
        x = np.array(visit_mean[n_step])
        plt.plot(x[:, 0], x[:, 1], c='black', zorder=0)
        plt.scatter(x[:, 0],
                    x[:, 1],
                    c=c_list[i],
                    marker='o',
                    s=5,
                    label='$N=%i$' % n_step,
                    zorder=1)

    plt.title('Number of visited states vs. ramp time \n for 2 flip')
    plt.ylabel('$N_{visit}/N$')
    plt.xlabel('$T$')
    plt.legend(loc='best')
    plt.tight_layout()
    plt.show()





    '''
Example #21
0
#%%
# Find and load model

# Find the model
files = listdir('input')
model_name = files[0]

# Load the model
with open(model_name, 'rb') as f:

    # Load checkpoint
    checkpoint = torch.load(f)

# Instantiate the model
model = MODEL(checkpoint['input_size'], checkpoint['output_size'], \
    checkpoint['hidden_size'], checkpoint['num_layers'], checkpoint['p'])
model.load_state_dict(checkpoint['state_dict'])

# Move to CUDA if availablr
if torch.cuda.is_available():
    model.cuda()

# Configure evaluation mode
model.eval()

# %%
# Export model
torch.onnx.export(
    model, (torch.randn(1, 1, 12, device='cuda'), model.init_hidden(1)),
    'output/forecast.onnx',
    input_names=['input', 'h0', 'c0'],
Example #22
0
import time

from inputData import INPUTDATA
from model import MODEL
from flow import FLOWINFO
from algs import ALGS
from dynamicBerths import DYNAMICBERTHS

if __name__ == '__main__':
    start = time.process_time()
    print('start: ', start)
    input_file = './input/'
    data_list = ['20200301-20200325', '20200402-20200408', '20200401-20200416','20200301-20200429']
    input_data = INPUTDATA(input_file + data_list[3] + '/')

    flow_info = FLOWINFO(input_data,False,False)
    model = MODEL(flow_info)
    algs = ALGS(model)
    algs.model.show_encoding()
    algs.model.show_fit()
    # encoding_record = algs.model.set_encoding_record()

    # dynamic loading berths
    dynamicBerths = DYNAMICBERTHS(input_data)
    # no NC functions
    dynamicBerths.no_NC_plots()
    # NC functions
    dynamicBerths.NC_plots()

    print('end: ', time.process_time() - start)
Example #23
0
def train_one_dataset(params, file_name, train_q_data, train_qa_data, valid_q_data, valid_qa_data):
    ### ================================== model initialization ==================================
    g_model = MODEL(n_question=params.n_question,
                    seqlen=params.seqlen,
                    batch_size=params.batch_size,
                    q_embed_dim=params.q_embed_dim,
                    qa_embed_dim=params.qa_embed_dim,
                    memory_size=params.memory_size,
                    memory_key_state_dim=params.memory_key_state_dim,
                    memory_value_state_dim=params.memory_value_state_dim,
                    final_fc_dim = params.final_fc_dim)
    # 创建模型
    # create a module by given a Symbol
    net = mx.mod.Module(symbol=g_model.sym_gen(),
                        data_names = ['q_data', 'qa_data'],
                        label_names = ['target'],
                        context=params.ctx)
    '''
        symbol:网络符号
        context:执行设备(设备列表)
        data_names:数据变量名称列表
        label_names:标签变量名称列表
    '''

    # 中间层接口
    # create memory by given input shapes 通过内存分配为计算搭建环境
    net.bind(data_shapes=[mx.io.DataDesc(name='q_data', shape=(params.seqlen, params.batch_size), layout='SN'),
                          mx.io.DataDesc(name='qa_data', shape=(params.seqlen, params.batch_size), layout='SN')],
             label_shapes=[mx.io.DataDesc(name='target', shape=(params.seqlen, params.batch_size), layout='SN')])
    # initial parameters with the default random initializer 初始化参数
    net.init_params(initializer=mx.init.Normal(sigma=params.init_std))
    # decay learning rate in the lr_scheduler
    lr_scheduler = mx.lr_scheduler.FactorScheduler(step=20*(train_q_data.shape[0]/params.batch_size), factor=0.667, stop_factor_lr=1e-5)

    # 初始化优化器
    net.init_optimizer(optimizer='sgd', optimizer_params={'learning_rate': params.lr, 'momentum':params.momentum,'lr_scheduler': lr_scheduler})

    for parameters in net.get_params()[0]:
        print(parameters, net.get_params()[0][parameters].asnumpy().shape)
    print("\n")

    ### ================================== start training ==================================
    all_train_loss = {}
    all_train_accuracy = {}
    all_train_auc = {}
    all_valid_loss = {}
    all_valid_accuracy = {}
    all_valid_auc = {}
    best_valid_auc = 0

    for idx in range(params.max_iter):
        train_loss, train_accuracy, train_auc = train(net, params, train_q_data, train_qa_data, label='Train')
        valid_loss, valid_accuracy, valid_auc = test(net, params, valid_q_data, valid_qa_data, label='Valid')

        print('epoch', idx + 1)
        print("valid_auc\t", valid_auc, "\ttrain_auc\t", train_auc)
        print("valid_accuracy\t", valid_accuracy, "\ttrain_accuracy\t", train_accuracy)
        print("valid_loss\t", valid_loss, "\ttrain_loss\t", train_loss)

        if not os.path.isdir('model'):
            os.makedirs('model')
        if not os.path.isdir(os.path.join('model', params.save)):
            os.makedirs(os.path.join('model', params.save))


        all_valid_auc[idx + 1] = valid_auc
        all_train_auc[idx + 1] = train_auc
        all_valid_loss[idx + 1] = valid_loss
        all_train_loss[idx + 1] = train_loss
        all_valid_accuracy[idx + 1] = valid_accuracy
        all_train_accuracy[idx + 1] = train_accuracy

        # output the epoch with the best validation auc
        if valid_auc > best_valid_auc :
            best_valid_auc = valid_auc
            best_epoch = idx+1
            # here the epoch is default, set to be 100
            # we only save the model in the epoch with the better results
            net.save_checkpoint(prefix=os.path.join('model', params.save, file_name), epoch=100)

    if not os.path.isdir('result'):
        os.makedirs('result')
    if not os.path.isdir(os.path.join('result', params.save)):
        os.makedirs(os.path.join('result', params.save))
    f_save_log = open(os.path.join('result', params.save, file_name), 'w')
    f_save_log.write("valid_auc:\n" + str(all_valid_auc) + "\n\n")
    f_save_log.write("train_auc:\n" + str(all_train_auc) + "\n\n")
    f_save_log.write("valid_loss:\n" + str(all_valid_loss) + "\n\n")
    f_save_log.write("train_loss:\n" + str(all_train_loss) + "\n\n")
    f_save_log.write("valid_accuracy:\n" + str(all_valid_accuracy) + "\n\n")
    f_save_log.write("train_accuracy:\n" + str(all_train_accuracy) + "\n\n")
    f_save_log.close()
    return best_epoch
Example #24
0
def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('--gpu',
                        type=int,
                        default=-1,
                        help='the gpu will be used, e.g "0,1,2,3"')
    parser.add_argument('--max_iter',
                        type=int,
                        default=10,
                        help='number of iterations')
    parser.add_argument('--decay_epoch',
                        type=int,
                        default=20,
                        help='number of iterations')
    parser.add_argument('--test',
                        type=bool,
                        default=False,
                        help='enable testing')
    parser.add_argument('--train_test',
                        type=bool,
                        default=True,
                        help='enable testing')
    parser.add_argument('--show',
                        type=bool,
                        default=True,
                        help='print progress')
    parser.add_argument('--init_std',
                        type=float,
                        default=0.1,
                        help='weight initialization std')
    parser.add_argument('--init_lr',
                        type=float,
                        default=0.01,
                        help='initial learning rate')
    parser.add_argument('--lr_decay',
                        type=float,
                        default=0.75,
                        help='learning rate decay')
    parser.add_argument(
        '--final_lr',
        type=float,
        default=1E-5,
        help='learning rate will not decrease after hitting this threshold')
    parser.add_argument('--momentum',
                        type=float,
                        default=0.9,
                        help='momentum rate')
    parser.add_argument('--max_grad_norm',
                        type=float,
                        default=3.0,
                        help='maximum gradient norm')
    parser.add_argument('--hidden_dim',
                        type=int,
                        default=128,
                        help='hidden layer dimension')
    parser.add_argument('--n_hidden',
                        type=int,
                        default=2,
                        help='hidden numbers')

    dataset = 'assist2009_updated'

    if dataset == 'oj':
        parser.add_argument('--batch_size',
                            type=int,
                            default=5,
                            help='the batch size')
        parser.add_argument('--qa_embed_dim',
                            type=int,
                            default=100,
                            help='answer and question embedding dimensions')
        parser.add_argument(
            '--n_question',
            type=int,
            default=68,
            help='the number of unique questions in the dataset')
        parser.add_argument('--seqlen',
                            type=int,
                            default=200,
                            help='the allowed maximum length of a sequence')
        parser.add_argument('--data_dir',
                            type=str,
                            default='./data/oj',
                            help='data directory')
        parser.add_argument('--data_name',
                            type=str,
                            default='oj',
                            help='data set name')
        parser.add_argument('--load',
                            type=str,
                            default='oj',
                            help='model file to load')
        parser.add_argument('--save',
                            type=str,
                            default='oj',
                            help='path to save model')

    elif dataset == 'assistments':
        parser.add_argument('--batch_size',
                            type=int,
                            default=32,
                            help='the batch size')
        parser.add_argument('--qa_embed_dim',
                            type=int,
                            default=200,
                            help='answer and question embedding dimensions')
        parser.add_argument(
            '--n_question',
            type=int,
            default=124,
            help='the number of unique questions in the dataset')
        parser.add_argument('--seqlen',
                            type=int,
                            default=200,
                            help='the allowed maximum length of a sequence')
        parser.add_argument('--data_dir',
                            type=str,
                            default='./data/assistments',
                            help='data directory')
        parser.add_argument('--data_name',
                            type=str,
                            default='assistments',
                            help='data set name')
        parser.add_argument('--load',
                            type=str,
                            default='assistments',
                            help='model file to load')
        parser.add_argument('--save',
                            type=str,
                            default='assistments',
                            help='path to save model')

    elif dataset == 'assist2009_updated':
        parser.add_argument('--batch_size',
                            type=int,
                            default=32,
                            help='the batch size')
        parser.add_argument('--qa_embed_dim',
                            type=int,
                            default=200,
                            help='answer and question embedding dimensions')
        parser.add_argument(
            '--n_question',
            type=int,
            default=110,
            help='the number of unique questions in the dataset')
        parser.add_argument('--seqlen',
                            type=int,
                            default=200,
                            help='the allowed maximum length of a sequence')
        parser.add_argument('--data_dir',
                            type=str,
                            default='../../dataset/assist2009_updated',
                            help='data directory')
        parser.add_argument('--data_name',
                            type=str,
                            default='assist2009_updated',
                            help='data set name')
        parser.add_argument('--load',
                            type=str,
                            default='assist2009_updated',
                            help='model file to load')
        parser.add_argument('--save',
                            type=str,
                            default='assist2009_updated',
                            help='path to save model')

    elif dataset == 'STATICS':
        parser.add_argument('--batch_size',
                            type=int,
                            default=10,
                            help='the batch size')
        parser.add_argument('--qa_embed_dim',
                            type=int,
                            default=100,
                            help='answer and question embedding dimensions')
        parser.add_argument(
            '--n_question',
            type=int,
            default=1223,
            help='the number of unique questions in the dataset')
        parser.add_argument('--seqlen',
                            type=int,
                            default=800,
                            help='the allowed maximum length of a sequence')
        parser.add_argument('--data_dir',
                            type=str,
                            default='./data/STATICS',
                            help='data directory')
        parser.add_argument('--data_name',
                            type=str,
                            default='STATICS',
                            help='data set name')
        parser.add_argument('--load',
                            type=str,
                            default='STATICS',
                            help='model file to load')
        parser.add_argument('--save',
                            type=str,
                            default='STATICS',
                            help='path to save model')

    params = parser.parse_args()
    params.lr = params.init_lr

    print(params)

    dat = DataLoader(',', params.seqlen, 1, 0)
    # dat = DATA(n_question=params.n_question, seqlen=params.seqlen, separate_char=',')
    # train_data_path = params.data_dir + "/" + "builder_train.csv"
    # valid_data_path = params.data_dir + "/" + "builder_test.csv"

    train_data_path = params.data_dir + "/" + params.data_name + "_train1.csv"
    valid_data_path = params.data_dir + "/" + params.data_name + "_valid1.csv"
    # test_data_path = params.data_dir + "/" + params.data_name + "_test.csv"

    max_length, min_length, max_q_id = dat.scan_file(train_data_path)
    train_q_data, train_q_t_data, train_answer_data = dat.prepare_model_data(
        train_data_path, max_q_id)
    train_q_data = np.array(train_q_data)
    print(train_q_data.shape)
    train_q_t_data = np.array(train_q_t_data)
    train_answer_data = np.array(train_answer_data)

    valid_q_data, valid_q_t_data, valid_answer_data = dat.prepare_model_data(
        valid_data_path, max_q_id)
    valid_q_data = np.array(valid_q_data)
    valid_q_t_data = np.array(valid_q_t_data)
    valid_answer_data = np.array(valid_answer_data)
    # train_q_data, train_q_t_data, train_answer_data = dat.load_data(train_data_path)
    # valid_q_data, valid_q_t_data, valid_answer_data = dat.load_data(valid_data_path)
    # test_q_data, test_q_t_data, test_answer_data = dat.load_data(test_data_path)

    model = MODEL(n_question=params.n_question,
                  hidden_dim=params.hidden_dim,
                  x_embed_dim=params.qa_embed_dim,
                  hidden_layers=params.n_hidden,
                  gpu=params.gpu)

    model.init_embeddings()
    model.init_params()
    # model = torch.load(params.data_dir + "/save/"+params.save)
    # optimizer = optim.SGD(params=model.parameters(), lr=params.lr, momentum=params.momentum)
    optimizer = optim.Adam(params=model.parameters(),
                           lr=params.lr,
                           betas=(0.9, 0.9))

    if params.gpu >= 0:
        print('device: ' + str(params.gpu))
        torch.cuda.set_device(params.gpu)
        model.cuda()

    all_train_loss = {}
    all_train_accuracy = {}
    all_train_auc = {}
    all_valid_loss = {}
    all_valid_accuracy = {}
    all_valid_auc = {}
    best_valid_auc = 0

    for idx in range(params.max_iter):
        train_loss, train_accuracy, train_auc = train(model, idx, params,
                                                      optimizer, train_q_data,
                                                      train_q_t_data,
                                                      train_answer_data)
        print(
            'Epoch %d/%d, loss : %3.5f, auc : %3.5f, accuracy : %3.5f' %
            (idx + 1, params.max_iter, train_loss, train_auc, train_accuracy))
        valid_loss, valid_accuracy, valid_auc = test(model, params, optimizer,
                                                     valid_q_data,
                                                     valid_q_t_data,
                                                     valid_answer_data)
        print('Epoch %d/%d, valid auc : %3.5f, valid accuracy : %3.5f' %
              (idx + 1, params.max_iter, valid_auc, valid_accuracy))
        # test_loss, test_accuracy, test_auc = test(model, params, optimizer, test_q_data, test_q_t_data,
        #                                           test_answer_data)
        # print('Epoch %d/%d, test auc : %3.5f, test accuracy : %3.5f' % (
        #     idx + 1, params.max_iter, test_auc, test_accuracy))
        all_train_auc[idx + 1] = train_auc
        all_train_accuracy[idx + 1] = train_accuracy
        all_train_loss[idx + 1] = train_loss
        all_valid_loss[idx + 1] = valid_loss
        all_valid_accuracy[idx + 1] = valid_accuracy
        all_valid_auc[idx + 1] = valid_auc
        #
        # output the epoch with the best validation auc
        if valid_auc > best_valid_auc:
            print('%3.4f to %3.4f' % (best_valid_auc, valid_auc))
            best_valid_auc = valid_auc
Example #25
0
def train(args):

    log_file=open('./data/logs/log.txt','a')
    log_file.write('\n'+'\n')
    log_file.write('-------------------------------------------\n')
    log_file.write(str(args)+'\n')
    log_file.write('-------------------------------------------\n')
    
    print('model initializing..')
    model = MODEL(args)
    # CUDA_VISIBLE_DEVICES=args.GPU_DEVICE

    with tf.compat.v1.Session() as sess:
        sess.run(tf.compat.v1.global_variables_initializer())
        sess.run(tf.compat.v1.local_variables_initializer())

        saver = tf.compat.v1.train.Saver(write_version=tf.compat.v1.train.SaverDef.V2, max_to_keep=10)

        print('loading data..')
        
        load_file = args.file_directory+str(args.first_train_file)
        train_data = load_data(args,load_file)

        load_file = args.file_directory+str(args.first_test_file)
        test_data = load_data(args,load_file)

        for step in range(args.n_epochs):
            # training
            print('epoch:'+str(step))
            args.is_train=True
            if step != 0:
                for i in range(args.train_file_num):
                    start_list = list(range(0, train_data.size, args.batch_size))
                    np.random.shuffle(start_list)
                    for start in start_list:
                        end = start + args.batch_size
                        model.train(sess, get_feed_dict(model, train_data, start, end))

            args.is_train=False

            train_loss = 0
            train_time_loss = 0
            train_batchs = 0
            train_labels = []
            train_scores = []
            train_time_true = []
            train_time_pre = []
            for i in range(args.train_file_num):
                #load_file=args.file_directory+str(args.first_train_file+i)
                #train_data=load_data(args,load_file)
                start_list = list(range(0, train_data.size, args.batch_size*10))
                train_batchs = train_batchs + len(start_list)
                for start in start_list:
                    end = start + args.batch_size*10
                    loss, labels, scores, time_loss, time_pre, time_true, time_label = model.test(sess, get_feed_dict(model, train_data, start, end))
                    train_labels.extend(labels)
                    train_scores.extend(scores)
                    for k in range(len(time_label)):
                        if time_label[k] == 0:
                            continue
                        train_time_true.append(time_true[k])
                        train_time_pre.append(time_pre[k])
                    train_loss = train_loss+loss
                    train_time_loss = train_time_loss + time_loss
            train_auc, train_f1, train_pre, train_recall, train_time_f1 = model.eval(args, train_labels, train_scores, train_time_true, train_time_pre)
            train_loss = train_loss / train_batchs
            train_time_loss = train_time_loss/train_batchs

            time_stamp = datetime.datetime.now().strftime('%Y.%m.%d-%H:%M:%S')

            log_str = 'time:' + time_stamp + '  epoch %d \ntrain_loss:%.4f train_time_loss:%.4f train_time_f1:%.4f train_auc:%.4f train_f1_score:%.4f'\
                                       % (step, train_loss, train_time_loss, train_time_f1, train_auc, train_f1)
            print(log_str)
            log_file.write(log_str)
            log_file.write('\n')

    log_file.close()
Example #26
0
def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('--gpu', type=int, default=0)
    parser.add_argument('--max_iter', type=int, default=30, help='number of iterations')
    parser.add_argument('--decay_epoch', type=int, default=20, help='number of iterations')
    parser.add_argument('--test', type=bool, default=False, help='enable testing')
    parser.add_argument('--train_test', type=bool, default=True, help='enable testing')
    parser.add_argument('--show', type=bool, default=True, help='print progress')
    parser.add_argument('--init_std', type=float, default=0.1, help='weight initialization std')
    parser.add_argument('--init_lr', type=float, default=0.01, help='initial learning rate')
    parser.add_argument('--lr_decay', type=float, default=0.75, help='learning rate decay')
    parser.add_argument('--final_lr', type=float, default=1E-5,
                        help='learning rate will not decrease after hitting this threshold')
    parser.add_argument('--momentum', type=float, default=0.9, help='momentum rate')
    parser.add_argument('--max_grad_norm', type=float, default=3.0, help='maximum gradient norm')
    parser.add_argument('--hidden_dim', type=int, default=64, help='hidden layer dimension')
    parser.add_argument('--n_hidden', type=int, default=2, help='hidden numbers')
    parser.add_argument('--dataset', type=str, default='assist2009_updated')
    parser.add_argument('--batch_size', type=int, default=32, help='the batch size')
    parser.add_argument('--qa_embed_dim', type=int, default=200, help='answer and question embedding dimensions')
    parser.add_argument('--dropout_rate', type=float, default=0.6)


    if parser.parse_args().dataset == 'assist2009_updated':
        # parser.add_argument('--batch_size', type=int, default=32, help='the batch size')
        # parser.add_argument('--qa_embed_dim', type=int, default=200, help='answer and question embedding dimensions')
        parser.add_argument('--n_question', type=int, default=110, help='the number of unique questions in the dataset')
        parser.add_argument('--seqlen', type=int, default=200, help='the allowed maximum length of a sequence')
        parser.add_argument('--data_dir', type=str, default='../dataset/assist2009_updated', help='data directory')
        parser.add_argument('--data_name', type=str, default='assist2009_updated', help='data set name')
        parser.add_argument('--load', type=str, default='assist2009_updated', help='model file to load')
        parser.add_argument('--save', type=str, default='assist2009_updated', help='path to save model')

    elif parser.parse_args().dataset == 'assist2015':
        # parser.add_argument('--batch_size', type=int, default=32, help='the batch size')
        # parser.add_argument('--qa_embed_dim', type=int, default=200, help='answer and question embedding dimensions')
        parser.add_argument('--n_question', type=int, default=100, help='the number of unique questions in the dataset')
        parser.add_argument('--seqlen', type=int, default=200, help='the allowed maximum length of a sequence')
        parser.add_argument('--data_dir', type=str, default='../dataset/assist2015', help='data directory')
        parser.add_argument('--data_name', type=str, default='assist2015', help='data set name')
        parser.add_argument('--load', type=str, default='assist2015', help='model file to load')
        parser.add_argument('--save', type=str, default='assist2015', help='path to save model')

    elif parser.parse_args().dataset == 'STATICS':
        # parser.add_argument('--batch_size', type=int, default=32, help='the batch size')
        # parser.add_argument('--qa_embed_dim', type=int, default=100, help='answer and question embedding dimensions')
        parser.add_argument('--n_question', type=int, default=1223,
                            help='the number of unique questions in the dataset')
        parser.add_argument('--seqlen', type=int, default=200, help='the allowed maximum length of a sequence')
        parser.add_argument('--data_dir', type=str, default='../dataset/STATICS', help='data directory')
        parser.add_argument('--data_name', type=str, default='STATICS', help='data set name')
        parser.add_argument('--load', type=str, default='STATICS', help='model file to load')
        parser.add_argument('--save', type=str, default='STATICS', help='path to save model')

    elif parser.parse_args().dataset == 'synthetic':
        # parser.add_argument('--batch_size', type=int, default=32, help='the batch size')
        # parser.add_argument('--qa_embed_dim', type=int, default=100, help='answer and question embedding dimensions')
        parser.add_argument('--n_question', type=int, default=50,
                            help='the number of unique questions in the dataset')
        parser.add_argument('--seqlen', type=int, default=200, help='the allowed maximum length of a sequence')
        parser.add_argument('--data_dir', type=str, default='../dataset/synthetic', help='data directory')
        parser.add_argument('--data_name', type=str, default='synthetic', help='data set name')
        parser.add_argument('--load', type=str, default='synthetic', help='model file to load')
        parser.add_argument('--save', type=str, default='synthetic', help='path to save model')

    elif parser.parse_args().dataset == 'assist2017':
        # parser.add_argument('--batch_size', type=int, default=32, help='the batch size')
        # parser.add_argument('--qa_embed_dim', type=int, default=100, help='answer and question embedding dimensions')
        parser.add_argument('--n_question', type=int, default=102,
                            help='the number of unique questions in the dataset')
        parser.add_argument('--seqlen', type=int, default=200, help='the allowed maximum length of a sequence')
        parser.add_argument('--data_dir', type=str, default='../dataset/assist2017/train_valid_test', help='data directory')
        parser.add_argument('--data_name', type=str, default='assist2017', help='data set name')
        parser.add_argument('--load', type=str, default='assist2017', help='model file to load')
        parser.add_argument('--save', type=str, default='assist2017', help='path to save model')

    params = parser.parse_args()
    params.lr = params.init_lr

    print(params)

    dat = DATA(n_question=params.n_question, seqlen=params.seqlen, separate_char=',')
    if params.dataset != 'synthetic':
        train_data_path = params.data_dir + "/" + params.data_name + "_train1.csv"
        valid_data_path = params.data_dir + "/" + params.data_name + "_valid1.csv"
        test_data_path = params.data_dir + "/" + params.data_name + "_test.csv"
    else:
        train_data_path = params.data_dir + "/" + "naive_c5_q50_s4000_v0_train1.csv"
        valid_data_path = params.data_dir + "/" + "naive_c5_q50_s4000_v0_valid1.csv"
        test_data_path = params.data_dir + "/" + "naive_c5_q50_s4000_v0_test.csv"

    train_q_data, train_q_t_data, train_answer_data, train_repeated_time_gap, train_past_trail_counts,\
    train_seq_time_gap = dat.load_data(train_data_path)
    valid_q_data, valid_q_t_data, valid_answer_data, valid_repeated_time_gap, valid_past_trail_counts,\
    valid_seq_time_gap  = dat.load_data(valid_data_path)
    test_q_data, test_q_t_data, test_answer_data, test_repeated_time_gap, test_past_trail_counts,\
    test_seq_time_gap = dat.load_data(test_data_path)

    model = MODEL(batch_size=params.batch_size,
                  seqlen=params.seqlen,
                  n_question=params.n_question,
                  hidden_dim=params.hidden_dim,
                  x_embed_dim=params.qa_embed_dim,
                  hidden_layers=params.n_hidden,
                  dropout_rate=params.dropout_rate,
                  gpu=params.gpu)

    model.init_embeddings()
    model.init_params()
    optimizer = optim.Adam(params=model.parameters(), lr=params.lr, betas=(0.9, 0.9))

    if params.gpu >= 0:
        print('device: ' + str(params.gpu))
        torch.cuda.set_device(params.gpu)
        model.cuda()

    # all_train_loss = {}
    # all_train_accuracy = {}
    # all_train_auc = {}
    # all_valid_loss = {}
    # all_valid_accuracy = {}
    # all_valid_auc = {}
    # all_test_loss = {}
    # all_test_accuracy = {}
    # all_test_auc = {}
    best_valid_auc = 0
    cur_test_auc = 0
    cur_train_auc = 0

    for idx in range(params.max_iter):
        train_loss, train_accuracy, train_auc = train(model, params, optimizer, train_q_data, train_q_t_data,
                                                      train_answer_data, train_repeated_time_gap,\
                                                      train_past_trail_counts, train_seq_time_gap)
        print('Epoch %d/%d, loss : %3.5f, auc : %3.5f, accuracy : %3.5f' % (
            idx + 1, params.max_iter, train_loss, train_auc, train_accuracy))
        valid_loss, valid_accuracy, valid_auc = test(model, params, optimizer, valid_q_data, valid_q_t_data,
                                                     valid_answer_data, valid_repeated_time_gap,\
                                                     valid_past_trail_counts, valid_seq_time_gap)
        print('Epoch %d/%d, valid auc : %3.5f, valid accuracy : %3.5f' % (
            idx + 1, params.max_iter, valid_auc, valid_accuracy))
        test_loss, test_accuracy, test_auc = test(model, params, optimizer, test_q_data, test_q_t_data,
                                                  test_answer_data, test_repeated_time_gap,
                                                  test_past_trail_counts, test_seq_time_gap)
        print('Epoch %d/%d, test auc : %3.5f, test accuracy : %3.5f' % (
            idx + 1, params.max_iter, test_auc, test_accuracy))

        # all_train_auc[idx + 1] = train_auc
        # all_train_accuracy[idx + 1] = train_accuracy
        # all_train_loss[idx + 1] = train_loss
        # all_valid_loss[idx + 1] = valid_loss
        # all_valid_accuracy[idx + 1] = valid_accuracy
        # all_valid_auc[idx + 1] = valid_auc
        # all_test_loss[idx + 1] = test_loss
        # all_test_accuracy[idx + 1] = test_accuracy
        # all_test_auc[idx + 1] = test_auc

        if valid_auc > best_valid_auc:
            print('%3.4f to %3.4f' % (best_valid_auc, valid_auc))
            best_valid_auc = valid_auc
            cur_test_auc = test_auc
            cur_train_auc = train_auc

    print('DATASET: {}, TRAIN AUC: {}, BEST VALID AUC: {}, TEST AUC: {}'.format(params.data_name, cur_train_auc, \
                                                                                best_valid_auc, cur_test_auc))
def cross_clustering_single_image(clusters_save_path, model_path):
    '''
        Will combine clusters from a single image using cluster centers for smaller subsets
    :return:
    '''
    full_test_site_shape = (3663, 5077)
    stride = 400
    full_test_site_used_shape = (stride * (full_test_site_shape[0] // stride),
                                 stride * (full_test_site_shape[1] // stride))
    # print(full_test_site_used_shape)
    n_clusters = 400
    n_iterations = 30
    all_cluster_centers = None
    all_cluster_labels = np.zeros(full_test_site_used_shape[0] *
                                  full_test_site_used_shape[1])

    full_clustered_image = np.zeros(
        shape=(stride * int(full_test_site_shape[0] / stride),
               stride * int(full_test_site_shape[1] / stride)))

    # row and column wise stride on the entire image
    # count = -1
    for row in range(0, full_test_site_shape[0] // stride):
        for col in range(0, full_test_site_shape[1] // stride):
            # count += 1
            this_cluster_save_path = os.path.join(
                clusters_save_path,
                '{}_{}_{}_{}.pkl'.format(row * stride, (row + 1) * stride,
                                         col * stride, (col + 1) * stride))
            print("log: Reading rows {}-{}, columns {}-{}".format(
                row * stride, (row + 1) * stride, col * stride,
                (col + 1) * stride))
            with open(this_cluster_save_path, 'rb') as read_this_one:
                kmeans_subset = pkl.load(read_this_one)
                if all_cluster_centers is not None:
                    all_cluster_centers = np.dstack(
                        (all_cluster_centers, kmeans_subset.cluster_centers_))
                else:
                    all_cluster_centers = kmeans_subset.cluster_centers_
                array = kmeans_subset.labels_.reshape(stride, stride)
                full_clustered_image[row * stride:(row + 1) * stride,
                                     col * stride:(col + 1) * stride] = array
                # bad bad bad
                # all_cluster_labels[count*stride**2:count*stride**2+stride**2] = np.asarray(array.reshape(-1) +
                #                                                                            10*count, dtype=np.uint16)

    pl.imshow(full_clustered_image)
    pl.title('Input image')
    pl.show()

    # verified that this doesn't work
    # reshaping loop (because I feel insecure with this thing)
    all_cluster_labels = full_clustered_image.reshape((-1, 108))
    # print(another == all_cluster_labels)
    # print(np.unique(all_cluster_labels), all_cluster_labels.dtype)

    all_cluster_centers = all_cluster_centers.transpose((2, 1, 0))
    all_cluster_centers = all_cluster_centers.reshape((-1, 13))

    # update labels to new values to keep them separated
    for i in range(all_cluster_labels.shape[1]):
        all_cluster_labels[:, i] += 10 * i

    # cluster cluster-centers now
    print('log: Clustering now...')
    kmeans = call_kmeans(samples_vec=all_cluster_centers,
                         n_clusters=n_clusters,
                         n_iterations=n_iterations,
                         pickle_file=None)
    print('log: done clustering')
    # print(kmeans.labels_.shape)
    # we should have n_clusters unique labels now
    # now we assign classes to clusters on the bases of their classification results
    # because we have 108 subsets, each having their own 0-9 cluster labels
    print('log: assigning new labels...')
    # for i in range(108):
    for i in range(all_cluster_labels.shape[1]):
        for j in range(10):
            all_cluster_labels[all_cluster_labels == i * 10 +
                               j] = kmeans.labels_[i * 10 + j]

    # check
    # show_image = all_cluster_labels.reshape(full_test_site_used_shape)
    # pl.imshow(show_image)
    # pl.title('Classified image')
    # pl.show()
    # return

    ########### classification starts now ...
    # load model for inference
    model = MODEL(in_channels=13)
    model.load_state_dict(torch.load(model_path))
    print('log: loaded saved model {}'.format(model_path))
    model.eval()

    outer_kmeans_centers = np.expand_dims(kmeans.cluster_centers_, 2)
    outer_kmeans_centers_tensor = torch.Tensor(outer_kmeans_centers)
    out_x, pred = model(outer_kmeans_centers_tensor)
    pred_arr = pred.numpy()

    # now we assign classes to clusters on the bases of their classification results
    all_cluster_labels = all_cluster_labels.reshape(-1)
    for u in range(n_clusters):  # because we n_clusters now
        # u is the cluster number
        all_cluster_labels[all_cluster_labels == u] = pred_arr[u]
        pass

    show_image = all_cluster_labels.reshape(full_test_site_used_shape)
    pl.imshow(show_image)
    pl.title('Classified image')
    pl.show()

    all_labels = {
        'new_signature_lowvegetation': 0,
        'new_signature_forest': 1,
        'new_signature_urban': 2,
        'new_signature_cropland': 3,
        'new_signature_waterbody': 4
    }
    reversed_labels = {v: k for k, v in all_labels.items()}
    classes_found = np.unique(show_image)
    for p in classes_found:
        pl.imshow(show_image == p)
        pl.title('Class {}'.format(reversed_labels[p]))
        pl.show()
    pass
def classify_cluster_arrays(example_path,
                            clusters_save_path,
                            model_path,
                            is_normalized=True):
    # we'll need the data for it too
    all_bands = []
    for i in range(1, 14):
        all_bands.append(
            np.load(os.path.join(example_path, '{}.npy'.format(i)),
                    mmap_mode='r'))

    full_test_site_shape = (3663, 5077)
    stride = 400
    # row and column wise stride on the entire image
    full_classified_image = np.zeros(
        shape=(stride * int(full_test_site_shape[0] / stride),
               stride * int(full_test_site_shape[1] / stride)))

    # load model for inference
    model = MODEL(in_channels=13)
    model.load_state_dict(torch.load(model_path))
    print('log: loaded saved model {}'.format(model_path))
    model.eval()

    for row in range(0, full_test_site_shape[0] // stride):
        for col in range(0, full_test_site_shape[1] // stride):
            this_cluster_save_path = os.path.join(
                clusters_save_path,
                '{}_{}_{}_{}.pkl'.format(row * stride, (row + 1) * stride,
                                         col * stride, (col + 1) * stride))
            print("rows {}-{}, columns {}-{}".format(row * stride,
                                                     (row + 1) * stride,
                                                     col * stride,
                                                     (col + 1) * stride))
            with open(this_cluster_save_path, 'rb') as read_this_one:
                kmeans_subset = pkl.load(read_this_one)
                kmeans_subset_labels = kmeans_subset.labels_

                # predict classes after receiving the data
                full_array = combine_bands(
                    mapped_bands_list=all_bands,
                    coordinates=(row * stride, (row + 1) * stride,
                                 col * stride, (col + 1) * stride))
                samples_vec = full_array.reshape((-1, 13))
                samples_vec = np.nan_to_num(samples_vec)  # important nan save

                # pick 100 vectors for each cluster, classify and assign to clusters
                classified_mini_array = kmeans_subset_labels.copy()
                for u in range(
                        10):  # because we have ten clusters in each subset
                    test_these = samples_vec[kmeans_subset_labels == u]
                    if is_normalized:
                        test_these = 2 * (test_these / 4096.).clip(
                            0, 1) - 1  # if normalization is used
                    test_vectors = np.expand_dims(test_these[random.sample(
                        range(len(test_these)), 100)],
                                                  axis=2)
                    test_tensor = torch.Tensor(test_vectors)
                    # print(test_tensor.shape)
                    out_x, pred = model(test_tensor)
                    pred_numpy = pred.numpy()
                    vals, counts = np.unique(pred_numpy, return_counts=True)
                    this_index = np.argmax(counts)
                    classified_mini_array[classified_mini_array ==
                                          u] = vals[this_index]

                # convert classified array to image
                mini_image_array = classified_mini_array.reshape(
                    stride, stride)
                full_classified_image[row * stride:(row + 1) * stride,
                                      col * stride:(col + 1) *
                                      stride] = mini_image_array

    pl.imshow(full_classified_image, cmap='tab10', alpha=1.0)
    pl.show()
    pass
Example #29
0
def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('--gpu', type=int, default=0, help='the gpu will be used, e.g "0,1,2,3"')
    parser.add_argument('--max_iter', type=int, default=50, help='number of iterations')
    parser.add_argument('--decay_epoch', type=int, default=20, help='number of iterations')
    parser.add_argument('--test', type=bool, default=False, help='enable testing')
    parser.add_argument('--train_test', type=bool, default=True, help='enable testing')
    parser.add_argument('--show', type=bool, default=True, help='print progress')
    parser.add_argument('--init_std', type=float, default=0.1, help='weight initialization std')
    parser.add_argument('--init_lr', type=float, default=0.01, help='initial learning rate')
    parser.add_argument('--lr_decay', type=float, default=0.75, help='learning rate decay')
    parser.add_argument('--final_lr', type=float, default=1E-5,
                        help='learning rate will not decrease after hitting this threshold')
    parser.add_argument('--momentum', type=float, default=0.9, help='momentum rate')
    parser.add_argument('--max_grad_norm', type=float, default=50.0, help='maximum gradient norm')
    # parser.add_argument('--final_fc_dim', type=float, default=200, help='hidden state dim for final fc layer')
    parser.add_argument('--first_k', type=int, default=8, help='first k question without loss calculation')
    parser.add_argument('--dataset', type=str, default='assist2009_updated')
    parser.add_argument('--train_set', type=int, default=1)

    parser.add_argument('--memory_size', type=int, default=20, help='memory size')
    parser.add_argument('--q_embed_dim', type=int, default=50, help='question embedding dimensions')
    parser.add_argument('--qa_embed_dim', type=int, default=200, help='answer and question embedding dimensions')
    
    if parser.parse_args().dataset == 'assist2009_updated':
        # memory_size: 20, q_embed_dim: 50, qa_embed_dim: 200
        parser.add_argument('--batch_size', type=int, default=128, help='the batch size')
        parser.add_argument('--n_question', type=int, default=110, help='the number of unique questions in the dataset')
        parser.add_argument('--seqlen', type=int, default=200, help='the allowed maximum length of a sequence')
        parser.add_argument('--data_dir', type=str, default='../dataset/assist2009_updated', help='data directory')
        parser.add_argument('--data_name', type=str, default='assist2009_updated', help='data set name')
        parser.add_argument('--load', type=str, default='assist2009_updated', help='model file to load')
        parser.add_argument('--save', type=str, default='assist2009_updated', help='path to save model')
        parser.add_argument('--final_fc_dim', type=float, default=110, help='hidden state dim for final fc layer')
    
    elif parser.parse_args().dataset == 'assist2015':
        # memory_size: 50, q_embed_dim: 50, qa_embed_dim: 200
        parser.add_argument('--batch_size', type=int, default=128, help='the batch size')
        parser.add_argument('--n_question', type=int, default=100, help='the number of unique questions in the dataset')
        parser.add_argument('--seqlen', type=int, default=200, help='the allowed maximum length of a sequence')
        parser.add_argument('--data_dir', type=str, default='../dataset/assist2015', help='data directory')
        parser.add_argument('--data_name', type=str, default='assist2015', help='data set name')
        parser.add_argument('--load', type=str, default='assist2015', help='model file to load')
        parser.add_argument('--save', type=str, default='assist2015', help='path to save model')
        parser.add_argument('--final_fc_dim', type=float, default=100, help='hidden state dim for final fc layer')
   
    elif parser.parse_args().dataset == 'assist2017':
        # memory_size: 20, q_embed_dim: 50, qa_embed_dim: 100
        parser.add_argument('--batch_size', type=int, default=32, help='the batch size')
        parser.add_argument('--n_question', type=int, default=102,
                            help='the number of unique questions in the dataset')
        parser.add_argument('--seqlen', type=int, default=200, help='the allowed maximum length of a sequence')
        parser.add_argument('--data_dir', type=str, default='../dataset/assist2017/train_valid_test/', help='data directory')
        parser.add_argument('--data_name', type=str, default='assist2017', help='data set name')
        parser.add_argument('--load', type=str, default='assist2017', help='model file to load')
        parser.add_argument('--save', type=str, default='assist2017', help='path to save model')
        parser.add_argument('--final_fc_dim', type=float, default=102, help='hidden state dim for final fc layer')

    elif parser.parse_args().dataset == 'STATICS':
        # memory_size: 50, q_embed_dim: 50, qa_embed_dim: 100
        parser.add_argument('--batch_size', type=int, default=32, help='the batch size')
        parser.add_argument('--n_question', type=int, default=1223, help='the number of unique questions in the dataset')
        parser.add_argument('--seqlen', type=int, default=200, help='the allowed maximum length of a sequence')
        parser.add_argument('--data_dir', type=str, default='../dataset/STATICS', help='data directory')
        parser.add_argument('--data_name', type=str, default='STATICS', help='data set name')
        parser.add_argument('--load', type=str, default='STATICS', help='model file to load')
        parser.add_argument('--save', type=str, default='STATICS', help='path to save model')
        parser.add_argument('--final_fc_dim', type=float, default=1223, help='hidden state dim for final fc layer')

    elif parser.parse_args().dataset == 'synthetic':
        # memory_size: 20, q_embed_dim: 50, qa_embed_dim: 100
        parser.add_argument('--batch_size', type=int, default=128, help='the batch size')
        parser.add_argument('--n_question', type=int, default=50,
                            help='the number of unique questions in the dataset')
        parser.add_argument('--seqlen', type=int, default=200, help='the allowed maximum length of a sequence')
        parser.add_argument('--data_dir', type=str, default='../dataset/synthetic/', help='data directory')
        parser.add_argument('--data_name', type=str, default='synthetic', help='data set name')
        parser.add_argument('--load', type=str, default='synthetic', help='model file to load')
        parser.add_argument('--save', type=str, default='synthetic', help='path to save model')
        parser.add_argument('--final_fc_dim', type=float, default=50, help='hidden state dim for final fc layer')

    params = parser.parse_args()
    params.lr = params.init_lr
    params.memory_key_state_dim = params.q_embed_dim
    params.memory_value_state_dim = params.qa_embed_dim

    print(params)

    dat = DATA(n_question=params.n_question, seqlen=params.seqlen, separate_char=',')
    if params.dataset != 'synthetic':
        train_data_path = params.data_dir + "/" + params.data_name + "_train" + str(params.train_set) + ".csv"
        valid_data_path = params.data_dir + "/" + params.data_name + "_valid" + str(params.train_set) + ".csv"
        test_data_path = params.data_dir + "/" + params.data_name + "_test.csv"
    else:
        train_data_path = params.data_dir + "/" + "naive_c5_q50_s4000_v0_train" + str(params.train_set) + ".csv"
        valid_data_path = params.data_dir + "/" + "naive_c5_q50_s4000_v0_valid" + str(params.train_set) + ".csv"
        test_data_path = params.data_dir + "/" + "naive_c5_q50_s4000_v0_test.csv"

    train_q_data, train_qa_data, train_a_data = dat.load_data(train_data_path)
    valid_q_data, valid_qa_data, valid_a_data = dat.load_data(valid_data_path)
    test_q_data, test_qa_data, test_a_data = dat.load_data(test_data_path)

    params.memory_key_state_dim = params.q_embed_dim
    params.memory_value_state_dim = params.qa_embed_dim

    model = MODEL(n_question=params.n_question,
                  batch_size=params.batch_size,
                  q_embed_dim=params.q_embed_dim,
                  qa_embed_dim=params.qa_embed_dim,
                  memory_size=params.memory_size,
                  memory_key_state_dim=params.memory_key_state_dim,
                  memory_value_state_dim=params.memory_value_state_dim,
                  final_fc_dim=params.final_fc_dim,
                  first_k=params.first_k,
                  gpu=params.gpu)


    model.init_embeddings()
    model.init_params()
    optimizer = optim.Adam(params=model.parameters(), lr=params.lr, betas=(0.9, 0.9))

    if params.gpu >= 0:
        print('device: ' + str(params.gpu))
        torch.cuda.set_device(params.gpu)
        model.cuda()

    best_valid_auc = 0
    correspond_train_auc = 0
    correspond_test_auc = 0

    for idx in range(params.max_iter):
        train_loss, train_accuracy, train_auc = train(model, params, optimizer, train_q_data, train_qa_data, train_a_data)
        print('Epoch %d/%d, loss : %3.5f, auc : %3.5f, accuracy : %3.5f' % (idx + 1, params.max_iter, train_loss, train_auc, train_accuracy))
        valid_loss, valid_accuracy, valid_auc = test(model, params, optimizer, valid_q_data, valid_qa_data, valid_a_data)
        print('Epoch %d/%d, valid auc : %3.5f, valid accuracy : %3.5f' % (idx + 1, params.max_iter, valid_auc, valid_accuracy))
        test_loss, test_accuracy, test_auc = test(model, params, optimizer, test_q_data, test_qa_data, test_a_data)
        print('Epoch %d/%d, test auc : %3.5f, test accuracy : %3.5f' % (idx + 1, params.max_iter, test_auc, test_accuracy))

        # output the epoch with the best validation auc
        if valid_auc > best_valid_auc:
            print('%3.4f to %3.4f' % (best_valid_auc, valid_auc))
            best_valid_auc = valid_auc
            correspond_train_auc = train_auc
            correspond_test_auc = test_auc

    print("DATASET: {}, MEMO_SIZE: {}, Q_EMBED_SIZE: {}, QA_EMBED_SIZE: {}, LR: {}".format(params.data_name, params.memory_size, params.q_embed_dim, params.qa_embed_dim, params.init_lr))
    print("BEST VALID AUC: {}, CORRESPOND TRAIN AUC: {}, CORRESPOND TEST AUC: {}".format(best_valid_auc, correspond_train_auc, correspond_test_auc))
def classify_cluster_centers(clusters_save_path, model_path, save_image=None):
    full_test_site_shape = (3663, 5077)
    stride = 400
    # row and column wise stride on the entire image
    full_classified_image = np.zeros(
        shape=(stride * int(full_test_site_shape[0] / stride),
               stride * int(full_test_site_shape[1] / stride)))

    # load model for inference
    model = MODEL(in_channels=13)
    model.load_state_dict(torch.load(model_path))
    print('log: loaded saved model {}'.format(model_path))
    model.eval()

    for row in range(0, full_test_site_shape[0] // stride):
        for col in range(0, full_test_site_shape[1] // stride):
            this_cluster_save_path = os.path.join(
                clusters_save_path,
                '{}_{}_{}_{}.pkl'.format(row * stride, (row + 1) * stride,
                                         col * stride, (col + 1) * stride))
            print("rows {}-{}, columns {}-{}".format(row * stride,
                                                     (row + 1) * stride,
                                                     col * stride,
                                                     (col + 1) * stride))
            with open(this_cluster_save_path, 'rb') as read_this_one:
                kmeans_subset = pkl.load(read_this_one)
                kmeans_subset_labels = kmeans_subset.labels_
                kmeans_subset_cluster_centers = np.expand_dims(
                    kmeans_subset.cluster_centers_, 2)
                kmeans_subset_cluster_centers_tensor = torch.Tensor(
                    kmeans_subset_cluster_centers)
                out_x, pred = model(kmeans_subset_cluster_centers_tensor)
                pred_arr = pred.numpy()

                # now we assign classes to clusters on the bases of their classification results
                classified_mini_array = kmeans_subset_labels.copy()
                for u in range(
                        10):  # because we have ten clusters in each subset
                    # u is the cluster number
                    classified_mini_array[kmeans_subset_labels ==
                                          u] = pred_arr[u]

                # convert classified array to image
                mini_image_array = classified_mini_array.reshape(
                    stride, stride)
                full_classified_image[row * stride:(row + 1) * stride,
                                      col * stride:(col + 1) *
                                      stride] = mini_image_array
    # apply median filter for clearer results
    full_classified_image = ndimage.median_filter(full_classified_image,
                                                  size=5)
    print(full_classified_image.shape)
    pl.imshow(full_classified_image, cmap='tab10', alpha=1.0)
    pl.show()
    if save_image:
        # new array for saving rgb image
        image = np.zeros(shape=(full_classified_image.shape[0],
                                full_classified_image.shape[1], 3))
        for j in range(5):
            image[full_classified_image == j, :] = color_mapping[j]
        pl.imsave(save_image, image)
        print('log: Saved {}'.format(save_image))
    pass