Exemple #1
0
def test_recon_error(mix_model, model, model_path, data_path,
                                save=True, save_path=""):
    M = mix_model.load_checkpoint(model, model_path)
    models = [M.model1, M.model2, M.model3, M.model4]
    test_data = Data.load(data_path)["data"]
    with torch.no_grad():
        recon_error_matrix = np.zeros((4,4))

        pairs = list(combinations_with_replacement(np.arange(len(test_data)), r=2))
        for (i, j) in pairs:
            for x1, y1 in test_data[i]:
                for x2, y2 in test_data[j]:

                    h1 = models[i].encode(x1)
                    h2 = models[j].encode(x2)

                    out11 = models[i].decode(h1)
                    out12 = models[i].decode(h2)
                    out22 = models[j].decode(h2)
                    out21 = models[j].decode(h1)

                    recon_loss_xx = Loss.mse_loss(out11, y1)
                    recon_loss_yy = Loss.mse_loss(out22, y2)
                    recon_loss_xy = Loss.mse_loss(out12, y1)
                    recon_loss_yx = Loss.mse_loss(out21, y2)

                    recon_error_matrix[i,i] = recon_loss_xx
                    recon_error_matrix[i,j] = recon_loss_xy
                    recon_error_matrix[j,j] = recon_loss_yy
                    recon_error_matrix[j,i] = recon_loss_yx
    if save:
        if not os.path.exists(save_path): os.mkdir(save_path)
        names = ["M1", "M2", "M3", "M4"]
        recon_df = pd.DataFrame(data=recon_error_matrix, index=names, columns=names)
        recon_df.to_csv(M.name + "_recon_error.csv")
Exemple #2
0
def test_recon_error_withLabel_withProb(mix_model, model, model_path, data_path,
                               save=True, save_path=""):
    M = mix_model.load_checkpoint(model, model_path)
    models = [M.model1, M.model2, M.model3, M.model4]
    test_data = Data.load(data_path)["data"]
    with torch.no_grad():
        recon_error_matrix = np.zeros((4,4))
        latent_error_matrix = np.zeros((4,4))
        kl_error_matrix = np.zeros((4,4))
        error_matrix = np.zeros((4,4))
        pairs = list(combinations_with_replacement(np.arange(len(test_data)), r=2))
        for (i, j) in pairs:
            for x1, y1 in test_data[i]:
                for x2, y2 in test_data[j]:
                    h1, l1, mu1, logvar1 = models[i].encode(x1)
                    h2, l2, mu2, logvar2 = models[j].encode(x2)

                    out11, _, _, _ = models[i].decode(h1, l1, mu1, logvar1)
                    out12, _, _, _ = models[i].decode(h2, l1, mu2, logvar2)
                    out22, _, _, _ = models[j].decode(h2, l2, mu2, logvar2)
                    out21, _, _, _ = models[j].decode(h1, l2, mu1, logvar1)

                    loss_xx, kl_loss_xx, recon_loss_xx = Loss.kl_loss(out11, y1, mu1, logvar1)
                    loss_yy, kl_loss_yy, recon_loss_yy = Loss.kl_loss(out22, y2, mu2, logvar2)
                    loss_xy, kl_loss_xy, recon_loss_xy = Loss.kl_loss(out12, y1, mu1, logvar1)
                    loss_yx, kl_loss_yx, recon_loss_yx = Loss.kl_loss(out21, y2, mu2, logvar2)

                    latent_loss = Loss.mse_loss(h1, h2)

                    recon_error_matrix[i,i] = recon_loss_xx
                    recon_error_matrix[i,j] = recon_loss_xy
                    recon_error_matrix[j,j] = recon_loss_yy
                    recon_error_matrix[j,i] = recon_loss_yx

                    error_matrix[i, i] = loss_xx
                    error_matrix[i, j] = loss_xy
                    error_matrix[j, j] = loss_yy
                    error_matrix[j, i] = loss_yx

                    latent_error_matrix[i,j] = latent_error_matrix[j,i] = latent_loss
                    kl_error_matrix[i,j] =  kl_loss_xy
                    kl_error_matrix[j, i] = kl_loss_yx

    if save:
        if not os.path.exists(save_path): os.mkdir(save_path)
        names = ["M1", "M2", "M3", "M4"]
        recon_df = pd.DataFrame(data=recon_error_matrix, index=names, columns=names)
        latent_df = pd.DataFrame(data=latent_error_matrix, index=names, columns=names)
        error_df = pd.DataFrame(data=error_matrix, index=names, columns=names)
        kl_df = pd.DataFrame(data=kl_error_matrix, index=names, columns=names)
        recon_df.to_csv(M.name + "_recon_error.csv")
        latent_df.to_csv(M.name + "_latent_error.csv")
        error_df.to_csv(M.name + "_error.csv")
        kl_df.to_csv(M.name + "_kl_error.csv")
Exemple #3
0
def test_single_model(model, model_path, data_path, save=True, save_path=""):
    model = model.load_checkpoint(model_path)
    test_data = Data.load(data_path)["data"][0]
    N = len(test_data)
    print(model, N)
    with torch.no_grad():
        recon_errors = np.zeros(N)

        for i, (x, y) in enumerate(test_data):
            h, l = model.encode(x)
            out = model.decode(h, l)

            recon_loss = Loss.mse_loss(out, y)
            recon_errors[i] = recon_loss

    if save:
        if not os.path.exists(save_path): os.mkdir(save_path)
        recon_df = pd.DataFrame(data=recon_errors, index=np.arange(N))
        recon_df.to_csv(model.name + "_recon_error.csv")
Exemple #4
0
def test_single_model(model, model_path, data_path,
                               save=True, save_path=""):
    model = model.load_checkpoint(model_path)
    test_data = Data.load(data_path)["data"][0]
    N = len(test_data)
    print(model, N)
    with torch.no_grad():
        recon_errors = np.zeros(N)

        for i, (x, y) in enumerate(test_data):
                    # models[j].to("cpu")
                    # h1, l1, mu1, logvar1 = models[i].encode(x1)
                    # start_time = time.time()
                    # h2, l2, mu2, logvar2 = models[j].encode(x2)
                    # time1 = time.time() - start_time
                    #
                    # # out11, _, _, _ = models[i].decode(h1, l1, mu1, logvar1)
                    # # out12, _, _, _ = models[i].decode(h2, l1, mu2, logvar2)
                    # start_time = time.time()
                    # out22, _, _, _ = models[j].decode(h2, l2, mu2, logvar2)
                    # time2 = time.time() - start_time
                    #
                    # print(models[j])
                    # print("time 1: ", time1)
                    # print("time 2:", time2)
                    # return
                    # out21, _, _, _ = models[j].decode(h1, l2, mu1, logvar1)
                    h, l = model.encode(x)
                    out = model.decode(h, l)

                    recon_loss = Loss.mse_loss(out,y)
                    recon_errors[i] = recon_loss

    if save:
        if not os.path.exists(save_path): os.mkdir(save_path)
        recon_df = pd.DataFrame(data=recon_errors, index=np.arange(N))
        recon_df.to_csv(model.name + "_recon_error.csv")