Exemplo n.º 1
0
def plot_with_conf_intrv(out_predic,
                         exact_data,
                         x_field,
                         num_mc_trials,
                         num_points_in_each_data_set,
                         x_label,
                         y_label,
                         xlim=None,
                         ylim=None,
                         add_to_save=None):
    assert out_predic.shape[0] == num_points_in_each_data_set
    assert out_predic.shape[1] == num_mc_trials
    assert len(exact_data) == num_points_in_each_data_set
    std = np.std(out_predic, axis=1)
    mean = np.mean(out_predic, axis=1)
    assert len(std) == num_points_in_each_data_set
    assert len(mean) == num_points_in_each_data_set
    plt = plot_x_y(x_all=[x_field, x_field],
                   y_all=[mean, exact_data],
                   x_label=x_label,
                   y_label=y_label,
                   legend_all=['Mean Predictions', 'Experiment'],
                   add_leg=False,
                   plot_linestyle=['-', '--'],
                   plot_linecolor=['b', 'r'],
                   xlim=xlim,
                   ylim=ylim,
                   need_return_plt=True,
                   add_to_save=None)
    plt.fill_between(x_field,
                     mean - 1.96 * std,
                     mean + 1.96 * std,
                     color='b',
                     alpha=.3)  #std curves.
    plt.legend(loc="best", prop={'size': 28})
    plt.tight_layout()
    if add_to_save:
        plt.savefig(add_to_save)
        plt.close()
    else:
        plt.show()
        scaled_pred_data = scaler_exp.transform(scaled_pred_data)

        err = (scaled_exp_data - scaled_pred_data)**2
        err = np.sum(err, axis=0)
        temp = np.zeros(num_anns)
        for jj, sub_graph_output in enumerate(sub_graph_outputs):
            for ff in sub_graph_output:
                temp[jj] += err[features_pred_map[ff]]
        temp /= (num_out_feature_each_ann * num_loads)
        error_anns[j, :] = temp
    temp = root_folder + case['main_graph_name'] + '/data_postproc/'
    # sub grapg by subgraph
    for jj, sub_graph_output in enumerate(sub_graph_outputs):
        train_ecdf = error_anns[train_data_set_ids, jj]
        train_ecdf = np.array(train_ecdf)
        train_ecdf = np.sort(train_ecdf)
        y_train = np.array(range(len(train_ecdf))) / len(train_ecdf)

        test_ecdf = error_anns[test_data_set_ids, jj]
        test_ecdf = np.array(test_ecdf)
        test_ecdf = np.sort(test_ecdf)
        y_test = np.array(range(len(test_ecdf))) / len(test_ecdf)
        plot_x_y(x_all=[train_ecdf, test_ecdf],
                 y_all=[y_train, y_test],
                 x_label='scaled MSE',
                 y_label='eCDF',
                 legend_all=['Train', 'Test'],
                 add_to_save=temp +
                 'setwise_{}.png'.format(case['output_name'][jj]),
                 xscale='log')
    for i, case in enumerate(ann_cases):
        folder_add = root_folder + case['main_graph_name'] + '/data_postproc/'
        temp = np.load(folder_add + 'train_setwise_ecdf_{}.npy'.format(field))
        train_ecdf, y_train = temp[:, 0], temp[:, 1]
        train_ecdf_all_ann_cases.append(train_ecdf)
        y_train_all_ann_cases.append(y_train)
        temp = np.load(folder_add + 'test_setwise_ecdf_{}.npy'.format(field))
        test_ecdf, y_test = temp[:, 0], temp[:, 1]
        test_ecdf_all_ann_cases.append(test_ecdf)
        y_test_all_ann_cases.append(y_test)

    plot_x_y(
        x_all=[
            train_ecdf_all_ann_cases[0], test_ecdf_all_ann_cases[0],
            train_ecdf_all_ann_cases[1], test_ecdf_all_ann_cases[1]
        ],
        y_all=[
            y_train_all_ann_cases[0], y_test_all_ann_cases[0],
            y_train_all_ann_cases[1], y_test_all_ann_cases[1]
        ],
        x_label='Scaled MSE',
        y_label='eCDF',
        legend_all=[
            'train-no graph info', 'test-no graph info',
            'train-with graph info', 'test-with graph info'
        ],
        plot_linestyle=['-', '--', '-', '--'],
        plot_linecolor=['k', 'k', 'b', 'b'],
        xscale='log',
        add_to_save=folder_add + 'compare_setwise_ecdf_{}.png'.format(field),
    )
        p_exp = -(sig_eig1_exp + sig_eig2_exp + sig_eig3_exp) / 3.
        q1_exp = sig_eig1_exp - sig_eig3_exp
        q2_exp = sig_eig1_exp - sig_eig2_exp
        q3_exp = sig_eig2_exp - sig_eig3_exp

        p_pred = -(sig_eig1_pred + sig_eig2_pred + sig_eig3_pred) / 3.
        q1_pred = sig_eig1_pred - sig_eig3_pred
        q2_pred = sig_eig1_pred - sig_eig2_pred
        q3_pred = sig_eig2_pred - sig_eig3_pred

        folder_to_save = folder_add + 'figures/'
        if not os.path.exists(folder_to_save):
            os.system("mkdir {}".format(folder_to_save))
        plot_x_y([np.log10(p_exp), np.log10(p_pred)],
                 [void_ratio_exp, void_ratio_pred],
                 r'$\log10(p [\mathrm{KPa}] )$', 'Void Ratio',
                 ['Experiment', 'Prediction'],
                 folder_to_save + 'log10p_voidRatio.png')
        max_y = max(max(q1_exp), max(q2_exp), max(q3_exp))
        min_y = min(min(q1_exp), min(q2_exp), min(q3_exp))
        range_y = max_y - min_y
        plot_x_y([eps_11, eps_11], [q1_exp, q1_pred],
                 'Axial Strain',
                 r'$q_1 [\mathrm{KPa}]$', ['Experiment', 'Prediction'],
                 ylim=[min_y - 0.05 * range_y, max_y + 0.05 * range_y],
                 add_to_save=folder_to_save + 'eps1_q1.png')

        plot_x_y([eps_11, eps_11], [q2_exp, q2_pred],
                 'Axial Strain',
                 r'$q_2 [\mathrm{KPa}]$', ['Experiment', 'Prediction'],
                 ylim=[min_y - 0.05 * range_y, max_y + 0.05 * range_y],
    folder_add = root_folder + case['main_graph_name'] + '/data_postproc/'
    temp = np.load(folder_add + 'train_pointwise_ecdf_all.npy')
    train_ecdf, y_train = temp[:, 0], temp[:, 1]
    train_ecdf_all_ann_cases.append(train_ecdf)
    y_train_all_ann_cases.append(y_train)
    temp = np.load(folder_add + 'test_pointwise_ecdf_all.npy')
    test_ecdf, y_test = temp[:, 0], temp[:, 1]
    test_ecdf_all_ann_cases.append(test_ecdf)
    y_test_all_ann_cases.append(y_test)

plot_x_y(
    x_all=[
        train_ecdf_all_ann_cases[0], test_ecdf_all_ann_cases[0],
        train_ecdf_all_ann_cases[1], test_ecdf_all_ann_cases[1]
    ],
    y_all=[
        y_train_all_ann_cases[0], y_test_all_ann_cases[0],
        y_train_all_ann_cases[1], y_test_all_ann_cases[1]
    ],
    x_label='Scaled MSE',
    y_label='eCDF',
    legend_all=[
        'train-no graph info', 'test-no graph info', 'train-with graph info',
        'test-with graph info'
    ],
    plot_linestyle=['-', '--', '-', '--'],
    plot_linecolor=['k', 'k', 'r', 'r'],
    xscale='log',
    leg_loc='upper left',
    add_to_save=folder_add + 'compare_pointwise_ecdf_all.png',
)
Exemplo n.º 6
0
root_folder = './results/'
ann_cases = [
    # 'ANN_graphs_bulk_plasticity_classical_without_fabric',
    'ANN_graphs_bulk_plasticity_classical_with_fabric',
    # 'ANN_graphs_bulk_plasticity_new_fabric_with_classical_graph',
]
data_sets_to_analyze = np.array(range(59))
num_loads = 501

q123_exp = np.zeros((num_loads, 3))
q123_pred = np.zeros((num_loads, 3))
pq_exp = np.zeros((num_loads, 2))
pq_pred = np.zeros((num_loads, 2))
for i, case in enumerate(ann_cases):
    for data_set in data_sets_to_analyze:
        folder_add = root_folder + case + '/data_postproc/dataset_{}/'.format(
            data_set)
        exp_data = pd.read_csv(folder_add + 'data_experiment.csv',
                               delimiter=',')
        pred_data = pd.read_csv(folder_add + 'data_prediction_ave_over_1.csv',
                                delimiter=',')
        features_pred = list(pred_data.columns)
        folder_to_save = folder_add + 'figures/'
        if not os.path.exists(folder_to_save):
            os.system("mkdir {}".format(folder_to_save))
        for feature_name in features_pred:
            plot_x_y([range(num_loads), range(num_loads)],
                     [exp_data[feature_name], pred_data[feature_name]],
                     'load step', feature_name, ['experiment', 'prediction'],
                     folder_to_save + 'loadStep_{}.png'.format(feature_name))
        scaled_exp_data = scaler_exp.transform(scaled_exp_data)
        scaled_pred_data = scaler_exp.transform(scaled_pred_data)

        err = (scaled_exp_data - scaled_pred_data)**2
        err = np.sum(err, axis=1)
        err /= len(features_pred)
        ecdf_all.append(err)

    train_ecdf = []
    for i in train_data_set_ids:
        train_ecdf = train_ecdf + list(ecdf_all[i])
    train_ecdf = np.array(train_ecdf)
    train_ecdf = np.sort(train_ecdf)
    y_train = np.array(range(len(train_ecdf))) / len(train_ecdf)

    test_ecdf = []
    for i in test_data_set_ids:
        test_ecdf = test_ecdf + list(ecdf_all[i])
    test_ecdf = np.array(test_ecdf)
    test_ecdf = np.sort(test_ecdf)
    y_test = np.array(range(len(test_ecdf))) / len(test_ecdf)

    plot_x_y(x_all=[train_ecdf, test_ecdf],
             y_all=[y_train, y_test],
             x_label='mse',
             y_label='eCDF',
             legend_all=['train', 'test'],
             add_to_save=None,
             xscale='log')
Exemplo n.º 8
0
    for i in train_data_set_ids:
        train_ecdf = train_ecdf + list(ecdf_all[i])
    train_ecdf = np.array(train_ecdf)
    train_ecdf = np.sort(train_ecdf)
    y_train = np.array(range(len(train_ecdf))) / len(train_ecdf)

    test_ecdf = []
    for i in test_data_set_ids:
        test_ecdf = test_ecdf + list(ecdf_all[i])
    test_ecdf = np.array(test_ecdf)
    test_ecdf = np.sort(test_ecdf)
    y_test = np.array(range(len(test_ecdf))) / len(test_ecdf)
    ecdf_all_2.append(train_ecdf)
    ecdf_all_2.append(test_ecdf)
    y_all.append(y_train)
    y_all.append(y_test)

# plot_x_y(x_all=[train_ecdf, test_ecdf],y_all=[y_train, y_test], x_label='mse', y_label='eCDF', legend_all=['train', 'test'], add_to_save=None)
plot_x_y(x_all=ecdf_all_2,
         y_all=y_all,
         x_label='mse',
         y_label='eCDF',
         legend_all=[
             'train-no graph info', 'test-no graph info',
             'train-with graph info', 'test-with graph info'
         ],
         plot_linestyle=['-', '--', '-', '--'],
         plot_linecolor=['k', 'k', 'b', 'b'],
         xscale='log',
         add_to_save=None)
exit()
            temp = all_errors[test_id]
            temp = temp[:, ff_ids]
            temp = np.sum(temp, axis=1) / len(ff_ids)
            assert len(temp) == num_loads
            test_ecdf = test_ecdf + list(temp)
        test_ecdf = np.array(test_ecdf)
        test_ecdf = np.sort(test_ecdf)
        if len(test_ecdf) > 1: assert test_ecdf[0] <= test_ecdf[1]
        y_test = np.array(range(len(test_ecdf))) / len(test_ecdf)
        temp = np.zeros((len(train_ecdf), 2))
        temp[:, 0], temp[:, 1] = train_ecdf, y_train
        np.save(
            temp_root_folder +
            'train_pointwise_ecdf_{}.npy'.format(case['output_name'][jj]),
            temp)
        temp = np.zeros((len(test_ecdf), 2))
        temp[:, 0], temp[:, 1] = test_ecdf, y_test
        np.save(
            temp_root_folder +
            'test_pointwise_ecdf_{}.npy'.format(case['output_name'][jj]), temp)
        plot_x_y(
            x_all=[train_ecdf, test_ecdf],
            y_all=[y_train, y_test],
            x_label='mse',
            y_label='eCDF',
            legend_all=['train', 'test'],
            xscale='log',
            add_to_save=temp_root_folder +
            'pointwise_{}.png'.format(case['output_name'][jj]),
        )
Exemplo n.º 10
0
        fabric_pred = pred_data[target_fields].values

        folder_to_save = folder_add + 'figures/'
        if not os.path.exists(folder_to_save):
            os.system("mkdir {}".format(folder_to_save))

        temp_max = np.max(fabric_exp, axis=0)
        assert len(temp_max) == len(target_fields)
        temp_max = np.max(temp_max)

        temp_min = np.min(fabric_exp, axis=0)
        assert len(temp_min) == len(target_fields)
        temp_min = np.min(temp_min)

        range_val = abs(temp_max - temp_min)
        for col_id in range(fabric_exp.shape[1]):
            y_exp = fabric_exp[:, col_id]
            y_pred = fabric_pred[:, col_id]
            plot_x_y(
                [eps_11, eps_11],
                [y_exp, y_pred],
                'Axial Strain',
                'Fabric {}'.format(comp_mapped[col_id]),
                ['Experiment', 'Prediction'],
                ylim=[
                    temp_min - 0.05 * range_val, temp_max + 0.05 * range_val
                ],
                add_to_save=folder_to_save +
                'eps1_fab{}.png'.format(comp_mapped[col_id]),
            )
    for j, data_set in enumerate(data_sets_to_analyze):
        folder_add = root_folder + case['main_graph_name'] +'/data_postproc/dataset_{}/'.format(data_set)
        exp_data = pd.read_csv(folder_add + 'data_experiment.csv', delimiter=',')
        pred_data = pd.read_csv(folder_add + 'data_prediction_ave_over_1.csv', delimiter=',')
        # features_pred = list(pred_data.columns)
        num_rows = exp_data.shape[0]
        assert num_rows == num_loads
        scaled_exp_data = exp_data[features_pred].values
        scaled_pred_data = pred_data[features_pred].values
        
        scaled_exp_data = scaler_exp.transform(scaled_exp_data)
        scaled_pred_data = scaler_exp.transform(scaled_pred_data)
        
        err = (scaled_exp_data - scaled_pred_data)**2
        num_elem = err.shape[0] * err.shape[1]
        error_sets[j] = np.sum(err) / num_elem
    temp = root_folder + case['main_graph_name'] +'/data_postproc/'
    train_ecdf = error_sets[train_data_set_ids]
    train_ecdf = np.array(train_ecdf)
    train_ecdf = np.sort(train_ecdf)
    y_train = np.array(range(len(train_ecdf))) / len(train_ecdf)

    test_ecdf = error_sets[test_data_set_ids]
    test_ecdf = np.array(test_ecdf)
    test_ecdf = np.sort(test_ecdf)
    y_test = np.array(range(len(test_ecdf))) / len(test_ecdf)
    plot_x_y(x_all=[train_ecdf, test_ecdf],y_all=[y_train, y_test], x_label='scaled MSE', y_label='eCDF',
                legend_all=['Train', 'Test'],xscale='log',
                add_to_save=temp+'setwise_ecdf_all.png'
                )
    
Exemplo n.º 12
0
        np.save(
            temp_root_folder +
            'train_setwise_ecdf_{}.npy'.format(case['output_name'][jj]), temp)
        temp = np.zeros((len(test_ecdf), 2))
        temp[:, 0], temp[:, 1] = test_ecdf, y_test
        np.save(
            temp_root_folder +
            'test_setwise_ecdf_{}.npy'.format(case['output_name'][jj]), temp)

        add_to_save = temp_root_folder + 'setwise_ecdf_{}.png'.format(
            case['output_name'][jj])
        plt = plot_x_y(
            x_all=[train_ecdf, test_ecdf],
            y_all=[y_train, y_test],
            x_label='scaled MSE',
            y_label='eCDF',
            legend_all=['Train', 'Test'],
            xscale='log',
            need_return_plt=True,
            # add_to_save=add_to_save
        )
        # y_len = abs(plt.gca().get_ylim()[1] - plt.gca().get_ylim()[0])
        # x_len = abs(plt.gca().get_xlim()[1] - plt.gca().get_xlim()[0])
        # fig_size = plt.gcf().get_size_inches()
        for key, val in train_extra_point.items():
            plt.plot(val[0], val[1], 'ro')
            plt.text(val[0], val[1], '{}'.format(key), fontsize=22, c='r')
        for key, val in test_extra_point.items():
            plt.plot(val[0], val[1], 'ro')
            plt.text(val[0], val[1], '{}'.format(key), fontsize=22, c='r')
        plt.savefig(add_to_save)
        plt.close()
Exemplo n.º 13
0
    temp_root_folder = root_folder + case['main_graph_name'] +'/data_postproc/'
    train_ecdf = []
    for train_id in train_data_set_ids:
        temp = all_errors[train_id]
        train_ecdf = train_ecdf + list(temp)
    train_ecdf = np.array(train_ecdf)
    train_ecdf = np.sort(train_ecdf)
    if len(train_ecdf)>1: assert train_ecdf[0]<= train_ecdf[1]
    y_train = np.array(range(len(train_ecdf))) / len(train_ecdf)

    test_ecdf = []
    for test_id in test_data_set_ids:
        temp = all_errors[test_id]
        test_ecdf = test_ecdf + list(temp)
    test_ecdf = np.array(test_ecdf)
    test_ecdf = np.sort(test_ecdf)
    if len(test_ecdf)>1: assert test_ecdf[0]<= test_ecdf[1]
    y_test = np.array(range(len(test_ecdf))) / len(test_ecdf)
    
    temp = np.zeros((len(train_ecdf), 2))
    temp[:,0], temp[:,1] = train_ecdf, y_train
    np.save(temp_root_folder+'train_pointwise_ecdf_all.npy', temp)
    temp = np.zeros((len(test_ecdf), 2))
    temp[:,0], temp[:,1] = test_ecdf, y_test
    np.save(temp_root_folder+'test_pointwise_ecdf_all.npy', temp)

    plot_x_y(x_all=[train_ecdf, test_ecdf],y_all=[y_train, y_test], x_label='scaled MSE', y_label='eCDF',
                legend_all=['train', 'test'], xscale='log',
                add_to_save=temp_root_folder + 'pointwise_all.png',
                )
    
pq_pred = np.zeros((num_loads, 2))
for i, case in enumerate(ann_cases):
    for data_set in data_sets_to_analyze:
        folder_add = root_folder + case + '/data_postproc/dataset_{}/'.format(
            data_set)
        exp_data = pd.read_csv(folder_add + 'data_experiment.csv',
                               delimiter=',')
        pred_data = pd.read_csv(folder_add + 'data_prediction_ave_over_1.csv',
                                delimiter=',')
        eps_11 = -exp_data['eps11'].values

        fabric_exp = exp_data[target_fields].values
        fabric_pred = pred_data[target_fields].values

        folder_to_save = folder_add + 'figures/'
        if not os.path.exists(folder_to_save):
            os.system("mkdir {}".format(folder_to_save))

        for col_id in range(fabric_exp.shape[1]):
            y_exp = fabric_exp[:, col_id]
            y_pred = fabric_pred[:, col_id]
            plot_x_y(
                [eps_11, eps_11],
                [y_exp, y_pred],
                'Axial Strain',
                '{}'.format(comp_mapped[col_id]),
                ['Experiment', 'Prediction'],
                add_to_save=folder_to_save +
                'eps1_{}.png'.format(target_fields[col_id]),
            )