Exemple #1
0
def normalize_datasets(datasets):
    datasets[0], mean, std, _ = normalize(datasets[0], remove_constant=False)
    datasets[1], _, _, _ = normalize(datasets[1],
                                     mean,
                                     std,
                                     remove_constant=False)
    datasets[2], _, _, _ = normalize(datasets[2],
                                     mean,
                                     std,
                                     remove_constant=False)
    if zshot:
        datasets[3], _, _, _ = normalize(datasets[3],
                                         mean,
                                         std,
                                         remove_constant=False)
    return datasets
Exemple #2
0
        if len(data.shape) > 2:
	    shape = reduce(mul, data.shape[1:], 1)
	    data = data.reshape([-1, shape])
        return data
    
    data = load_data()
	
    # Get training data
    n_train = int(len(data) * train_fract)
    data = data[:n_train] #reuse var to save memory        
    if gaps:
        gap_ids = np.load(os.path.join(data_dir, 'gap_ids.npy'))
        data = np.delete(data, gap_ids, 0)
    
    # Fit model to normalized training data
    data, m, s, fs = normalize(data)
    rng = np.random.RandomState(123)
    model = PCA(n_components=n_components, random_state=rng)
    model.fit(data)

    # Encode all (normalized) data
    data = load_data()
    data, _, _, _   = normalize(data, m, s, fs)
    data = model.transform(data) # codes, reuse var
    expl_var = np.array(np.sum(model.explained_variance_ratio_))

    # Save results   
    codes_dir = os.path.join(data_dir, 'codes/')
    f_name = os.path.join(codes_dir, "pca_{0}_{1}v".format(gaps, n_components))
    np.savez_compressed(f_name, codes=data, expl_var=expl_var)
    print("PCA values saved to {1}.".format(f_name))
Exemple #3
0
def main():

    causal = False

    if causal:

        config_files = [
            "VAEConv2D_v2_CausalDsprite_ber_shape2_scale5_ld2",
            "VAEConv2D_v2_CausalDsprite_ber_shape2_scale5_ld3",
            "VAEConv2D_v2_CausalDsprite_ber_shape2_scale5_ld4",
            "VAEConv2D_v2_CausalDsprite_ber_shape2_scale5_ld6",
            "VAEConv2D_v2_CausalDsprite_ber_shape2_scale5_ld10"
        ]
        model_names = ["C-ld-2", "C-ld-3", "C-ld-4", "C-ld-6", "C-ld-10"]
        #checkpoint_files=["vae_checkpoint"+ str(i) + ".pth" for i in range(50)]
        checkpoint_files = ["vae_lastCheckpoint.pth"]

        dataset_zip = np.load(
            'datasets/dsprites_ndarray_co1sh3sc6or40x32y32_64x64.npz')

        print('Keys in the dataset:', dataset_zip.keys())
        imgs = dataset_zip['imgs']

        #get the idxs
        data_sets = []
        data_sets_true = []
        d_sprite_idx, X_true_data, _ = caus_utils.calc_dsprite_idxs(
            num_samples=10000,
            seed=12345,
            constant_factor=[0, 0],
            causal=causal,
            color=0,
            shape=2,
            scale=5)
        X_true_data = np.array(X_true_data)[:, :2]
        #add a random g dimesnoion?
        #r_gen_data=[]
        #for r in range(len(X_true_data)):
        #	r_gen_data.append(random.uniform(0, 1))
        #X_true_data=np.array(X_true_data)
        #r_gen_data=np.array(r_gen_data)
        #print(X_true_data.shape)
        #print(r_gen_data.shape)
        #X_true_data=np.c_[ X_true_data, r_gen_data]

        X_data = caus_utils.make_dataset_d_sprite(d_sprite_dataset=imgs,
                                                  dsprite_idx=d_sprite_idx,
                                                  img_size=256)
        print(len(X_data))
        X_data_t = X_data[8500:]
        X_data = X_data[:8500]
        X_true_data_t = X_true_data[8500:]
        X_true_data = X_true_data[:8500]

    if not causal:
        # the custem girls dataset
        #config_files=["VAE_NonCausalDsprite_ber_shape2_scale5_ld2","VAE_NonCausalDsprite_ber_shape2_scale5_ld3","VAE_NonCausalDsprite_ber_shape2_scale5_ld4"
        #,"VAE_NonCausalDsprite_ber_shape2_scale5_ld6","VAE_NonCausalDsprite_ber_shape2_scale5_ld10"]
        #model_names=["NC_ds_ld2","NC_ds_ld3","NC_ds_ld4","NC_ds_ld6","NC_ds_ld10",]

        config_files = [
            "VAEConv2D_v2_NonCausalDsprite_ber_shape2_scale5_ld2",
            "VAEConv2D_v2_NonCausalDsprite_ber_shape2_scale5_ld3",
            "VAEConv2D_v2_NonCausalDsprite_ber_shape2_scale5_ld4",
            "VAEConv2D_v2_NonCausalDsprite_ber_shape2_scale5_ld6",
            "VAEConv2D_v2_NonCausalDsprite_ber_shape2_scale5_ld10"
        ]
        model_names = ["NC-ld-2", "NC-ld-3", "NC-ld-4", "NC-ld-6", "NC-ld-10"]

        #checkpoint_files=["vae_checkpoint"+ str(i) + ".pth" for i in range(50)]
        checkpoint_files = ["vae_lastCheckpoint.pth"]

        dataset_zip = np.load(
            'datasets/dsprites_ndarray_co1sh3sc6or40x32y32_64x64.npz')

        print('Keys in the dataset:', dataset_zip.keys())
        imgs = dataset_zip['imgs']

        #get the idxs
        data_sets = []
        data_sets_true = []
        d_sprite_idx, X_true_data, _ = caus_utils.calc_dsprite_idxs(
            num_samples=20000,
            seed=12345,
            constant_factor=[0, 0, 0],
            causal=causal,
            color=0,
            shape=2,
            scale=5)
        d_sprite_idx_t, X_true_data_t, _ = caus_utils.calc_dsprite_idxs(
            num_samples=1500,
            seed=54321,
            constant_factor=[0, 0, 0],
            causal=causal,
            color=0,
            shape=2,
            scale=5)

        X_data = caus_utils.make_dataset_d_sprite(d_sprite_dataset=imgs,
                                                  dsprite_idx=d_sprite_idx,
                                                  img_size=256)
        X_data_t = caus_utils.make_dataset_d_sprite(d_sprite_dataset=imgs,
                                                    dsprite_idx=d_sprite_idx_t,
                                                    img_size=256)

    #split in train and test
    X_data_train = np.array(X_data)
    X_data_test = np.array(X_data_t)
    X_true_data_train, _, _, _ = normalize(np.array(X_true_data),
                                           remove_constant=False)
    X_true_data_test, _, _, _ = normalize(np.array(X_true_data_t),
                                          remove_constant=False)
    #swap to see

    #X_data_train[:,[0, 2]] = X_data_train[:,[2, 0]]
    #X_data_test[:,[0, 2]] = X_data_test[:,[2, 0]]
    #X_true_data_train[:,[0, 1]] = X_true_data_train[:,[1, 0]]
    #X_true_data_test[:,[0, 1]] = X_true_data_test[:,[1, 0]]

    zs_train_all = []
    zs_test_all = []
    for config_file in config_files:
        for checkpoint_file in checkpoint_files:
            print("obtaining representations (zs)")
            print(config_file)
            print(checkpoint_file)
            zs_train = obtain_representation(X_data_train, config_file,
                                             checkpoint_file)

            #plt.hist(zs_train, bins='auto')
            #plt.show()
            print(config_file)
            print("mean: " + str(np.mean(zs_train, axis=0)))
            print("std: " + str(np.std(zs_train, axis=0)))
            print("min: " + str(np.min(zs_train, axis=0)))
            print("max: " + str(np.max(zs_train, axis=0)))
            zs_test = obtain_representation(X_data_test, config_file,
                                            checkpoint_file)
            zs_train_n, _, _, _ = normalize(zs_train, remove_constant=False)
            zs_test_n, _, _, _ = normalize(zs_test, remove_constant=False)
            zs_train_all.append(zs_train_n)
            zs_test_all.append(zs_test_n)

    lasso(z_encodes_train=zs_train_all,
          z_encodes_test=zs_test_all,
          gt_labels_train=X_true_data_train,
          gt_labels_test=X_true_data_test,
          model_names=model_names)
    #random_forest(z_encodes_train=zs_train_all,z_encodes_test=zs_test_all,gt_labels_train=X_true_data_train,gt_labels_test=X_true_data_test,model_names=model_names)

    print("DONZO!")
def main():

    causal = False

    nn = MLPRegressor(hidden_layer_sizes=(10, ),
                      activation='relu',
                      solver='adam',
                      alpha=0.001,
                      batch_size='auto',
                      learning_rate='constant',
                      learning_rate_init=0.01,
                      power_t=0.5,
                      max_iter=1000,
                      shuffle=True,
                      random_state=9,
                      tol=0.0001,
                      verbose=False,
                      warm_start=False,
                      momentum=0.9,
                      nesterovs_momentum=True,
                      early_stopping=False,
                      validation_fraction=0.1,
                      beta_1=0.9,
                      beta_2=0.999,
                      epsilon=1e-08)

    if causal:

        config_file = "VAEConv2D_v2_CausalDsprite_ber_shape2_scale5_ld3"
        model_name = "C-ld-3"
        #checkpoint_files=["vae_checkpoint"+ str(i) + ".pth" for i in range(50)]
        checkpoint_file = "vae_lastCheckpoint.pth"

        dataset_zip = np.load(
            'datasets/dsprites_ndarray_co1sh3sc6or40x32y32_64x64.npz')

        print('Keys in the dataset:', dataset_zip.keys())
        imgs = dataset_zip['imgs']

        #get the idxs
        data_sets = []
        data_sets_true = []
        #find corrsbonding axes X
        z_x = -1
        d_sprite_idx, X_true_data, _ = caus_utils.calc_dsprite_idxs(
            num_samples=1000,
            seed=7,
            constant_factor=[1, 0],
            causal=causal,
            color=0,
            shape=2,
            scale=5)
        X_data = caus_utils.make_dataset_d_sprite(d_sprite_dataset=imgs,
                                                  dsprite_idx=d_sprite_idx,
                                                  img_size=256)
        zs_train = obtain_representation(X_data, config_file, checkpoint_file)
        zs_train = np.array(zs_train)
        zs_std = np.std(zs_train, axis=0)
        z_x_idx = np.argmin(zs_std)
        print("X-CONSTANT: ")
        print(zs_std)

        #find corrsbonding axes X
        z_y = -1
        d_sprite_idx, Y_true_data, _ = caus_utils.calc_dsprite_idxs(
            num_samples=1000,
            seed=7,
            constant_factor=[0, 1],
            causal=causal,
            color=0,
            shape=2,
            scale=5)
        Y_data = caus_utils.make_dataset_d_sprite(d_sprite_dataset=imgs,
                                                  dsprite_idx=d_sprite_idx,
                                                  img_size=256)
        zs_train = obtain_representation(Y_data, config_file, checkpoint_file)
        zs_train = np.array(zs_train)
        zs_std = np.std(zs_train, axis=0)
        z_y_idx = np.argmin(zs_std)
        print("Y-CONSTANT: ")
        print(zs_std)

        if z_y_idx == z_x_idx:
            print("z_y: " + str(z_y_idx))
            print("z_x: " + str(z_x_idx))
            print("Fatal error! could not get unique g to z")
            a = 1 / 0

        #time to learn some causal relationships!!!!
        d_sprite_idx, true_data, _ = caus_utils.calc_dsprite_idxs(
            num_samples=10000,
            seed=12345,
            constant_factor=[0, 0],
            causal=causal,
            color=0,
            shape=2,
            scale=5)
        data = caus_utils.make_dataset_d_sprite(d_sprite_dataset=imgs,
                                                dsprite_idx=d_sprite_idx,
                                                img_size=256)
        zs_data = obtain_representation(data, config_file, checkpoint_file)

        #normalize data
        true_data_norm, _, _, _ = normalize(np.array(true_data),
                                            remove_constant=False)
        zs_data_norm, _, _, _ = normalize(np.array(zs_data),
                                          remove_constant=False)

        #train input predictor:
        input_x_y = true_data_norm[:, :2]
        input_o = np.array(true_data_norm[:, 2])

        n = nn.fit(input_x_y[:8500], input_o[:8500])
        test = nn.predict(input_x_y[8500:])
        input_mse = np.sum(np.square(test - input_o[8500:]))
        print("causal input mse: " + str(input_mse))

        #train latent predictor:
        z_x_y = np.array([zs_data_norm[:, z_x_idx], zs_data_norm[:,
                                                                 z_y_idx]]).T
        z_o_idx_t = [0, 1, 2]
        z_o_idx = -1
        for i in range(len(z_o_idx_t)):
            if not z_o_idx_t[i] == z_y_idx and not z_o_idx_t[i] == z_x_idx:
                z_o_idx = z_o_idx_t[i]

        z_o = zs_data_norm[:, z_o_idx]

        n = nn.fit(z_x_y[:8500], z_o[:8500])
        test = nn.predict(z_x_y[8500:])
        z_mse = np.sum(np.square(test - z_o[8500:]))
        print("causal latent mse: " + str(z_mse))

    if not causal:

        config_file = "VAEConv2D_v2_NonCausalDsprite_ber_shape2_scale5_ld3"
        model_name = "NC-ld-3"
        #checkpoint_files=["vae_checkpoint"+ str(i) + ".pth" for i in range(50)]
        checkpoint_file = "vae_lastCheckpoint.pth"

        dataset_zip = np.load(
            'datasets/dsprites_ndarray_co1sh3sc6or40x32y32_64x64.npz')

        print('Keys in the dataset:', dataset_zip.keys())
        imgs = dataset_zip['imgs']

        #get the idxs
        data_sets = []
        data_sets_true = []
        #find corrsbonding axes X
        z_x = -1
        d_sprite_idx, X_true_data, _ = caus_utils.calc_dsprite_idxs(
            num_samples=1000,
            seed=7,
            constant_factor=[1, 0, 0],
            causal=causal,
            color=0,
            shape=2,
            scale=5)
        X_data = caus_utils.make_dataset_d_sprite(d_sprite_dataset=imgs,
                                                  dsprite_idx=d_sprite_idx,
                                                  img_size=256)
        zs_train = obtain_representation(X_data, config_file, checkpoint_file)
        zs_train = np.array(zs_train)
        zs_std = np.std(zs_train, axis=0)
        z_x_idx = np.argmin(zs_std)
        print("X-CONSTANT: ")
        print(zs_std)

        #find corrsbonding axes X
        z_y = -1
        d_sprite_idx, Y_true_data, _ = caus_utils.calc_dsprite_idxs(
            num_samples=1000,
            seed=7,
            constant_factor=[0, 1, 0],
            causal=causal,
            color=0,
            shape=2,
            scale=5)
        Y_data = caus_utils.make_dataset_d_sprite(d_sprite_dataset=imgs,
                                                  dsprite_idx=d_sprite_idx,
                                                  img_size=256)
        zs_train = obtain_representation(Y_data, config_file, checkpoint_file)
        zs_train = np.array(zs_train)
        zs_std = np.std(zs_train, axis=0)
        z_y_idx = np.argmin(zs_std)
        print("Y-CONSTANT: ")
        print(zs_std)

        #find corrsbonding axes O
        z_y = -1
        d_sprite_idx, O_true_data, _ = caus_utils.calc_dsprite_idxs(
            num_samples=1000,
            seed=7,
            constant_factor=[0, 0, 1],
            causal=causal,
            color=0,
            shape=2,
            scale=5)
        O_data = caus_utils.make_dataset_d_sprite(d_sprite_dataset=imgs,
                                                  dsprite_idx=d_sprite_idx,
                                                  img_size=256)
        zs_train = obtain_representation(O_data, config_file, checkpoint_file)
        zs_train = np.array(zs_train)
        zs_std = np.std(zs_train, axis=0)
        z_o_idx = np.argmin(zs_std)
        print("O-CONSTANT: ")
        print(zs_std)

        if z_y_idx == z_x_idx or z_y_idx == z_o_idx or z_o_idx == z_x_idx:
            print("z_y: " + str(z_y_idx))
            print("z_x: " + str(z_x_idx))
            print("z_o: " + str(z_o_idx))
            print("Fatal error! could not get unique g to z")
            a = 1 / 0

        #time to learn some causal relationships!!!!
        d_sprite_idx, true_data, _ = caus_utils.calc_dsprite_idxs(
            num_samples=10000,
            seed=12345,
            constant_factor=[0, 0, 0],
            causal=causal,
            color=0,
            shape=2,
            scale=5)
        data = caus_utils.make_dataset_d_sprite(d_sprite_dataset=imgs,
                                                dsprite_idx=d_sprite_idx,
                                                img_size=256)
        zs_data = obtain_representation(data, config_file, checkpoint_file)

        #normalize data
        true_data_norm, _, _, _ = normalize(np.array(true_data),
                                            remove_constant=False)
        zs_data_norm, _, _, _ = normalize(np.array(zs_data),
                                          remove_constant=False)

        #train input predictor:
        input_x_y = true_data_norm[:, :2]
        input_o = np.array(true_data_norm[:, 2])

        n = nn.fit(input_x_y[:8500], input_o[:8500])
        test = nn.predict(input_x_y[8500:])
        input_mse = np.sum(np.square(test - input_o[8500:]))
        print("Non-causal input mse: " + str(input_mse))

        #train latent predictor:
        z_x_y = np.array([zs_data_norm[:, z_x_idx], zs_data_norm[:,
                                                                 z_y_idx]]).T

        z_o = zs_data_norm[:, z_o_idx]

        n = nn.fit(z_x_y[:8500], z_o[:8500])
        test = nn.predict(z_x_y[8500:])
        z_mse = np.sum(np.square(test - z_o[8500:]))
        print("Non-causal latent mse: " + str(z_mse))