예제 #1
0
def predict(model, sols, setting, step):
    """

    :param model:
    :param sol:
    :param setting:
    :param step:
    :return:
    """
    if step <= 0:
        return
    elif step in [1, 2, 3]:
        Amat, fval = init_training(model, setting, step, delForce=0)
    else:
        print("ERROR: Unknown pred_step: ", step)
        exit(-1)

    errs = []
    for i in range(len(sols)):
        err = predict_holdout(Amat, fval[:, 0], sols[i])
        errs.append(err[0])
        print("  sol# %d: err= (%.2f%%) %f" % (i, err[0], err[1]))
        np.savetxt("%s_%d" % (setting['fval_out'], i), np.transpose(err[2:4]))
    print("+ Prediction done")
    return np.argmin(errs)
예제 #2
0
def predict(model, sols, setting, step):
    """
    :param model:
    :param sol:
    :param setting:
    :param step:
    :return:
    """
    if step <= 0:
        return
    elif step in [1, 2, 3]:
        Amat, fval = init_training(model, setting, step, delForce=0)
    else:
        print("ERROR: Unknown pred_step: ", step)
        exit(-1)

    print('\n')
    print('!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!')
    print('!!!!! PREDICTING USING FITTED RESULTS !!!!!!')
    print('!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!')
    print('\n')

    errs = []
    for i in range(len(sols)):
        err = predict_holdout(Amat, fval[:, 0], sols[i])
        err[2:4] += fval[:, 2:].T
        errs.append(err[0])
        print("  sol# %d: err= (%.2f%%) %f" % (i, err[0], err[1]))
        np.savetxt("%s_%d" % (setting['fval_out'], i), np.transpose(err[2:4]))
        if setting.getboolean('save_force_prediction',
                              True) and setting['corr_type'] == 'f':
            supercells = [
                y.split() for x, y in setting.items()
                if re.match('traindat.*', x)
            ]
            left = 0
            f_all = np.reshape(err[3], (-1, 3))
            for sc in supercells:
                nA = Poscar.from_file(sc[0]).structure.num_sites
                for subs in sc[1:]:
                    for f in sorted(glob.glob(subs)):
                        np.savetxt(f + '/force.txt_predicted',
                                   f_all[left:left + nA])
                        left += nA
    print("+ Prediction done")
    return np.argmin(errs)