Spaces:
Sleeping
Sleeping
| import numpy as np | |
| import sys | |
| from modelguidedattacks import results | |
| results_list = results.load_all_results() | |
| filter = { | |
| "loss": results.in_set(["cvxproj"]), | |
| "model": results.eq("resnet50"), | |
| "k": results.eq(20), | |
| "binary_search_steps": results.eq(1), | |
| "unguided_iterations": results.eq(60), | |
| # "topk_loss_coef_upper": results.eq(20), | |
| # "unguided_lr": results.eq(0.002), | |
| "cvx_proj_margin": results.eq(0.2), | |
| "topk_loss_coef_upper": results.gte(12) | |
| # "seed": results.eq(10), | |
| } | |
| filtered_results = results.filter_results(filter, results_list) | |
| combined_results = {} | |
| for result in filtered_results: | |
| for key in result: | |
| if key not in combined_results: | |
| combined_results[key] = [] | |
| combined_results[key].append(result[key]) | |
| unique_runs = len(np.unique(combined_results["seed"])) | |
| print ("Stats from", len(filtered_results)) | |
| # assert len(combined_results["seed"]) == unique_runs | |
| for key, val in list(combined_results.items()): | |
| if key in ["ASR", "L1", "L2", "L_inf"]: | |
| val = np.array(val) | |
| combined_results[f"{key}_mean"] = np.mean(val[np.isfinite(val)]) | |
| combined_results[f"{key}_median"] = np.median(val[np.isfinite(val)]) | |
| # Coupled results | |
| best_asr_idx = np.argmax(combined_results["ASR"]) | |
| best_asr = combined_results["ASR"][best_asr_idx] | |
| best_l1 = combined_results["L1"][best_asr_idx] | |
| best_l2 = combined_results["L2"][best_asr_idx] | |
| best_linf = combined_results["L_inf"][best_asr_idx] | |
| combined_results["ASR_best"] = best_asr | |
| combined_results["L1_best"] = best_l1 | |
| combined_results["L2_best"] = best_l2 | |
| combined_results["L_inf_best"] = best_linf | |
| worst_asr_idx = np.argmin(combined_results["ASR"]) | |
| worst_asr = combined_results["ASR"][worst_asr_idx] | |
| worst_l1 = combined_results["L1"][worst_asr_idx] | |
| worst_l2 = combined_results["L2"][worst_asr_idx] | |
| worst_linf = combined_results["L_inf"][worst_asr_idx] | |
| combined_results["ASR_worst"] = worst_asr | |
| combined_results["L1_worst"] = worst_l1 | |
| combined_results["L2_worst"] = worst_l2 | |
| combined_results["L_inf_worst"] = worst_linf | |
| draw_keys = ["best", "mean", "worst"] | |
| val_keys = ["ASR", "L1", "L2", "L_inf"] | |
| print ("---------------") | |
| for draw_key in draw_keys: | |
| for val_key in val_keys: | |
| key = val_key + "_" + draw_key | |
| val = combined_results[key] | |
| print (key, val) | |
| print ("---------------") | |
| for draw_key in draw_keys: | |
| for val_key in val_keys: | |
| key = val_key + "_" + draw_key | |
| val = combined_results[key] | |
| if np.isinf(val): | |
| val = "N/A" | |
| sep = "&" | |
| if isinstance(val, str): | |
| sys.stdout.write(f"{val} {sep} ") | |
| elif "inf" in key: | |
| sys.stdout.write(f"{val:.3f} {sep} ") | |
| else: | |
| sys.stdout.write(f"{val:.2f} {sep} ") |