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', )
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')
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]), )
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' )
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()
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]), )