From 1b5fd5daeca1e59bd0629a941409b9c438633c0d Mon Sep 17 00:00:00 2001 From: divyat09 Date: Mon, 4 Oct 2021 21:25:11 +0000 Subject: [PATCH] Updates to readme and notebooks; ready for merge with the master branch --- README.rst | 18 +- docs/notebooks/ChestXRay_Translate.ipynb | 121 +-- docs/notebooks/Spur_Rotated_MNIST.ipynb | 4 +- docs/notebooks/{ => beta}/HParam_Plots.ipynb | 634 ------------- docs/notebooks/{ => beta}/adult_dataset.ipynb | 157 +--- docs/notebooks/{ => beta}/mnist_results.ipynb | 204 ----- docs/notebooks/helper_plots.ipynb | 39 +- docs/notebooks/images/0.jpg | Bin 569 -> 447 bytes docs/notebooks/images/15.jpg | Bin 632 -> 470 bytes docs/notebooks/images/30.jpg | Bin 629 -> 542 bytes docs/notebooks/images/45.jpg | Bin 655 -> 507 bytes docs/notebooks/images/60.jpg | Bin 622 -> 480 bytes docs/notebooks/images/75.jpg | Bin 598 -> 460 bytes docs/notebooks/images/90.jpg | Bin 561 -> 450 bytes docs/notebooks/images/Merged.png | Bin 100706 -> 0 bytes docs/notebooks/images/t_sne.png | Bin 72758 -> 96555 bytes docs/notebooks/privacy_plots.ipynb | 286 ++++++ ..._results.ipynb => reproduce_results.ipynb} | 0 .../reproducing_results_matchdg_paper.ipynb | 359 -------- docs/notebooks/robustdg_getting_started.ipynb | 47 +- docs/notebooks/usenix_results.ipynb | 857 ------------------ evaluation/t_sne.py | 2 +- misc_scripts/acc_pacs.sh | 29 - misc_scripts/{untitled.txt => adult.txt} | 0 misc_scripts/adv_attack.sh | 33 - misc_scripts/chex.sh | 72 -- misc_scripts/domainbed.sh | 11 - misc_scripts/mnist_abl.sh | 16 - misc_scripts/pacs_ctr.sh | 15 - misc_scripts/privacy.txt | 36 - misc_scripts/privacy_chest.sh | 104 --- misc_scripts/privacy_mnist.sh | 39 - misc_scripts/privacy_pacs.sh | 24 - misc_scripts/reproduce.txt | 104 --- misc_scripts/reproduce_paper.sh | 39 - misc_scripts/run_domainbed.sh | 16 - misc_scripts/slab-run.sh | 112 --- misc_scripts/t3.sh | 3 - misc_scripts/temp.sh | 39 - misc_scripts/temp2.sh | 19 - misc_scripts/untitled1.txt | 44 - 41 files changed, 377 insertions(+), 3106 deletions(-) rename docs/notebooks/{ => beta}/HParam_Plots.ipynb (72%) rename docs/notebooks/{ => beta}/adult_dataset.ipynb (88%) rename docs/notebooks/{ => beta}/mnist_results.ipynb (99%) delete mode 100644 docs/notebooks/images/Merged.png create mode 100644 docs/notebooks/privacy_plots.ipynb rename docs/notebooks/{beta_reproduce_results.ipynb => reproduce_results.ipynb} (100%) delete mode 100644 docs/notebooks/reproducing_results_matchdg_paper.ipynb delete mode 100644 docs/notebooks/usenix_results.ipynb delete mode 100644 misc_scripts/acc_pacs.sh rename misc_scripts/{untitled.txt => adult.txt} (100%) delete mode 100644 misc_scripts/adv_attack.sh delete mode 100644 misc_scripts/chex.sh delete mode 100644 misc_scripts/domainbed.sh delete mode 100644 misc_scripts/mnist_abl.sh delete mode 100644 misc_scripts/pacs_ctr.sh delete mode 100644 misc_scripts/privacy.txt delete mode 100644 misc_scripts/privacy_chest.sh delete mode 100644 misc_scripts/privacy_mnist.sh delete mode 100644 misc_scripts/privacy_pacs.sh delete mode 100644 misc_scripts/reproduce.txt delete mode 100644 misc_scripts/reproduce_paper.sh delete mode 100644 misc_scripts/run_domainbed.sh delete mode 100644 misc_scripts/slab-run.sh delete mode 100644 misc_scripts/t3.sh delete mode 100644 misc_scripts/temp.sh delete mode 100644 misc_scripts/temp2.sh delete mode 100644 misc_scripts/untitled1.txt diff --git a/README.rst b/README.rst index a478cfa..35d00fc 100644 --- a/README.rst +++ b/README.rst @@ -4,7 +4,7 @@ Toolkit for Building Robust ML models that generalize to unseen domains (RobustD `Shruti Tople `_, `Amit Sharma `_ -`ICML 2020 Paper `_ | `MatchDG paper `_ | `Privacy & DG Connection paper `_ +` Privacy & Causal Learning (ICML 2020) `_ | ` MatchDG: Causal View of DG (ICML 2021) `_ | `Privacy & DG Connection paper `_ For machine learning models to be reliable, they need to generalize to data beyond the train distribution. In addition, ML models should be robust to @@ -28,8 +28,7 @@ Let's first load the rotatedMNIST dataset in a suitable format for the resnet18 .. code:: shell - cd data/ - python data_gen.py resnet18 + python data/data_gen_mnist.py --dataset rot_mnist --model resnet18 --img_h 224 --img_w 224 --subset_size 2000 **Train and evaluate ML model** @@ -37,13 +36,14 @@ The following commands would train and evalute the MatchDG method on the Rotated .. code:: shell - python train.py --dataset rot_mnist --method_name matchdg_ctr --match_case 0.01 --match_flag 1 --epochs 100 --batch_size 256 --pos_metric cos + + python train.py --dataset rot_mnist --method_name matchdg_ctr --match_case 0.0 --match_flag 1 --epochs 50 --batch_size 64 --pos_metric cos --match_func_aug_case 1 - python train.py --dataset rot_mnist --method_name matchdg_erm --match_case -1 --penalty_ws 0.1 --epochs 25 --ctr_match_case 0.01 --ctr_match_flag 1 --ctr_match_interrupt 5 --ctr_model_name resnet18 - - python test.py --dataset rot_mnist --method_name matchdg_erm --match_case -1 --penalty_ws 0.1 --epochs 25 --ctr_match_case 0.01 --ctr_match_flag 1 --ctr_match_interrupt 5 --ctr_model_name resnet18 --test_metric acc + python train.py --dataset rot_mnist --method_name matchdg_erm --penalty_ws 0.1 --match_case -1 --ctr_match_case 0.0 --ctr_match_flag 1 --ctr_match_interrupt 5 --ctr_model_name resnet18 --epochs 25 - python test.py --dataset rot_mnist --method_name matchdg_ctr --match_case 0.01 --match_flag 1 --pos_metric cos --test_metric match_score + python test.py --dataset rot_mnist --method_name matchdg_erm --penalty_ws 0.1 --match_case -1 --ctr_match_case 0.0 --ctr_match_flag 1 --ctr_match_interrupt 5 --ctr_model_name resnet18 --epochs 25 --test_metric acc + + python test.py --dataset rot_mnist --method_name matchdg_ctr --match_case 0.0 --match_flag 1 --pos_metric cos --test_metric match_score Demo @@ -51,7 +51,7 @@ Demo A quick introduction on how to use our repository can be accessed here in the `Getting Started notebook `_. -If you are interested in reproducing results from the MatchDG paper, check out the `Reproducing results notebook `_. +If you are interested in reproducing results from the MatchDG paper, check out the `Reproducing results notebook `_. Roadmap ------- diff --git a/docs/notebooks/ChestXRay_Translate.ipynb b/docs/notebooks/ChestXRay_Translate.ipynb index 3e4b25a..a03cfaf 100644 --- a/docs/notebooks/ChestXRay_Translate.ipynb +++ b/docs/notebooks/ChestXRay_Translate.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -38,7 +38,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -53,7 +53,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -79,7 +79,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -149,7 +149,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -176,44 +176,9 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Lung Lesion doesn't exist. Adding nans instead.\n", - "Fracture doesn't exist. Adding nans instead.\n", - "Lung Opacity doesn't exist. Adding nans instead.\n", - "Enlarged Cardiomediastinum doesn't exist. Adding nans instead.\n", - "{'Pleural Other', 'Support Devices'} will be dropped\n", - "Infiltration doesn't exist. Adding nans instead.\n", - "Emphysema doesn't exist. Adding nans instead.\n", - "Fibrosis doesn't exist. Adding nans instead.\n", - "Pleural_Thickening doesn't exist. Adding nans instead.\n", - "Nodule doesn't exist. Adding nans instead.\n", - "Mass doesn't exist. Adding nans instead.\n", - "Hernia doesn't exist. Adding nans instead.\n", - "Atelectasis doesn't exist. Adding nans instead.\n", - "Consolidation doesn't exist. Adding nans instead.\n", - "Infiltration doesn't exist. Adding nans instead.\n", - "Pneumothorax doesn't exist. Adding nans instead.\n", - "Edema doesn't exist. Adding nans instead.\n", - "Emphysema doesn't exist. Adding nans instead.\n", - "Fibrosis doesn't exist. Adding nans instead.\n", - "Effusion doesn't exist. Adding nans instead.\n", - "Pleural_Thickening doesn't exist. Adding nans instead.\n", - "Cardiomegaly doesn't exist. Adding nans instead.\n", - "Nodule doesn't exist. Adding nans instead.\n", - "Mass doesn't exist. Adding nans instead.\n", - "Hernia doesn't exist. Adding nans instead.\n", - "Lung Lesion doesn't exist. Adding nans instead.\n", - "Fracture doesn't exist. Adding nans instead.\n", - "Enlarged Cardiomediastinum doesn't exist. Adding nans instead.\n" - ] - } - ], + "outputs": [], "source": [ "d_nih = xrv.datasets.NIH_Dataset(imgpath=root_dir + \"/data/datasets/NIH/images_224/\",\n", " views=[\"PA\",\"AP\"], unique_patients=False)\n", @@ -233,7 +198,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -362,28 +327,9 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "(112120,)\n", - "torch.Size([800, 3, 224, 224]) torch.Size([800, 3, 224, 224]) torch.Size([800]) 400 400\n", - "torch.Size([200, 3, 224, 224]) torch.Size([200, 3, 224, 224]) torch.Size([200]) 100 100\n", - "torch.Size([400, 3, 224, 224]) torch.Size([400, 3, 224, 224]) torch.Size([400]) 200 200\n", - "(191010,)\n", - "torch.Size([800, 3, 224, 224]) torch.Size([800, 3, 224, 224]) torch.Size([800]) 400 400\n", - "torch.Size([200, 3, 224, 224]) torch.Size([200, 3, 224, 224]) torch.Size([200]) 100 100\n", - "torch.Size([400, 3, 224, 224]) torch.Size([400, 3, 224, 224]) torch.Size([400]) 200 200\n", - "(26684,)\n", - "torch.Size([800, 3, 224, 224]) torch.Size([800, 3, 224, 224]) torch.Size([800]) 400 400\n", - "torch.Size([200, 3, 224, 224]) torch.Size([200, 3, 224, 224]) torch.Size([200]) 100 100\n", - "torch.Size([400, 3, 224, 224]) torch.Size([400, 3, 224, 224]) torch.Size([400]) 200 200\n" - ] - } - ], + "outputs": [], "source": [ "base_dir=root_dir + '/data/datasets/chestxray/'\n", " \n", @@ -466,28 +412,9 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "(112120,)\n", - "torch.Size([800, 3, 224, 224]) torch.Size([800, 3, 224, 224]) torch.Size([800]) 400 400\n", - "torch.Size([200, 3, 224, 224]) torch.Size([200, 3, 224, 224]) torch.Size([200]) 100 100\n", - "torch.Size([400, 3, 224, 224]) torch.Size([400, 3, 224, 224]) torch.Size([400]) 200 200\n", - "(191010,)\n", - "torch.Size([800, 3, 224, 224]) torch.Size([800, 3, 224, 224]) torch.Size([800]) 400 400\n", - "torch.Size([200, 3, 224, 224]) torch.Size([200, 3, 224, 224]) torch.Size([200]) 100 100\n", - "torch.Size([400, 3, 224, 224]) torch.Size([400, 3, 224, 224]) torch.Size([400]) 200 200\n", - "(26684,)\n", - "torch.Size([800, 3, 224, 224]) torch.Size([800, 3, 224, 224]) torch.Size([800]) 400 400\n", - "torch.Size([200, 3, 224, 224]) torch.Size([200, 3, 224, 224]) torch.Size([200]) 100 100\n", - "torch.Size([400, 3, 224, 224]) torch.Size([400, 3, 224, 224]) torch.Size([400]) 200 200\n" - ] - } - ], + "outputs": [], "source": [ "base_dir=root_dir + '/data/datasets/chestxray/'\n", " \n", @@ -565,29 +492,9 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "(112120,)\n", - "Error:\n", - "torch.Size([800, 3, 224, 224]) torch.Size([800, 3, 224, 224]) torch.Size([800]) 400 400\n", - "torch.Size([200, 3, 224, 224]) torch.Size([200, 3, 224, 224]) torch.Size([200]) 100 100\n", - "torch.Size([400, 3, 224, 224]) torch.Size([400, 3, 224, 224]) torch.Size([400]) 200 200\n", - "(191010,)\n", - "torch.Size([800, 3, 224, 224]) torch.Size([800, 3, 224, 224]) torch.Size([800]) 400 400\n", - "torch.Size([200, 3, 224, 224]) torch.Size([200, 3, 224, 224]) torch.Size([200]) 100 100\n", - "torch.Size([400, 3, 224, 224]) torch.Size([400, 3, 224, 224]) torch.Size([400]) 200 200\n", - "(26684,)\n", - "torch.Size([800, 3, 224, 224]) torch.Size([800, 3, 224, 224]) torch.Size([800]) 400 400\n", - "torch.Size([200, 3, 224, 224]) torch.Size([200, 3, 224, 224]) torch.Size([200]) 100 100\n", - "torch.Size([400, 3, 224, 224]) torch.Size([400, 3, 224, 224]) torch.Size([400]) 200 200\n" - ] - } - ], + "outputs": [], "source": [ "base_dir=root_dir + '/data/datasets/chestxray/'\n", " \n", diff --git a/docs/notebooks/Spur_Rotated_MNIST.ipynb b/docs/notebooks/Spur_Rotated_MNIST.ipynb index 4daaf9c..a205121 100644 --- a/docs/notebooks/Spur_Rotated_MNIST.ipynb +++ b/docs/notebooks/Spur_Rotated_MNIST.ipynb @@ -157,9 +157,9 @@ ], "metadata": { "kernelspec": { - "display_name": "main-envs", + "display_name": "matchdg-env", "language": "python", - "name": "main-envs" + "name": "matchdg-env" }, "language_info": { "codemirror_mode": { diff --git a/docs/notebooks/HParam_Plots.ipynb b/docs/notebooks/beta/HParam_Plots.ipynb similarity index 72% rename from docs/notebooks/HParam_Plots.ipynb rename to docs/notebooks/beta/HParam_Plots.ipynb index cd65385..500a0a8 100644 --- a/docs/notebooks/HParam_Plots.ipynb +++ b/docs/notebooks/beta/HParam_Plots.ipynb @@ -804,640 +804,6 @@ "plt.savefig('results/slab_dataset.jpg')" ] }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "a= np.ones(2,3)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import torch\n", - "torch.randint(0, 1, (5, 1))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import random\n", - "l=[[0, 1], [2, 3], [9, 8], [0, 2]]\n", - "random.shuffle(l)\n", - "print(l)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import numpy as np\n", - "x=np.array([1, 2, 3])\n", - "y=x" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "x[0]= 10\n", - "print(x, y)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import torch \n", - "import copy\n", - "a= torch.tensor([1, 2])\n", - "b= copy.deepcopy(a)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "a[0]=3\n", - "print(a, b)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "a=[1, 2, 3, 5, 6]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "random.choice(a)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "a=torch.tensor([7, 9, 3, 6, 8, 4, 9])\n", - "b, c= torch.sort(a)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "print(b)\n", - "print(c)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "torch.argmin(a)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "a[c[:3]]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "(a ==9).nonzero()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "a=torch.rand(2,3,4)\n", - "b= a.flatten(start_dim=0, end_dim=1)\n", - "print(a.shape, b.shape)\n", - "\n", - "c= torch.stack(torch.split(b, a.shape[1]))\n", - "\n", - "print(a==c)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "a" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "b" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "c" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import numpy as np\n", - "n= np.array(range(1, 100))\n", - "c1= 181 \n", - "c2= -180\n", - "c3= -40\n", - "c4= -4\n", - "x= c1*(n**np.log2(5)) + c2*(n**2)+ c3*(np.log2(n))*(n**2) + c4*((np.log2(n))**2)*(n**2)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "x" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "181*np.log2(5) - 448" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "5*109+64*9" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "n= np.array(range(1, 1000))\n", - "y= 181*np.log2(5)*(n**(np.log2(5)-1)) -400*n - 88*(n)*(np.log2(n)) - 8*n*(np.log2(n)**2)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "print(y)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "181*np.log2(5)*(2**(np.log2(5)-1))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "np.log(n)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "n= np.array(range(1, 100))\n", - "z= 10*n**(np.log2(5)) - (n**2)*(np.log2(n))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "z" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "n=[1/100*np.array(range(1, 10))]\n", - "print(np.cos(n))\n", - "print(np.sin(n))\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "n= np.array(range(1, 10))\n", - "a=[]\n", - "for item in n:\n", - " a.append( np.math.factorial(item) )\n", - "a=np.array(a)\n", - "\n", - "a= np.log2(a)\n", - "b= 0.5*x*np.log2(n)\n", - "print(a >= b)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "plt.scatter(a, b)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "print(a)\n", - "print(b)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "n= np.array(range(1, 100))\n", - "a= 2**(np.log2(n)**2)\n", - "b= n**2\n", - "print(a >= b)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "plt.plot(n, a, '--')\n", - "plt.plot(n, b, '.')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "n=10\n", - "x=np.array(range(1, n+1))\n", - "f=[]\n", - "for item in x:\n", - " f.append(item*(n+1-item))\n", - "f=np.array(f)\n", - "print(f >= n)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "k=222\n", - "n=5023" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "s=0\n", - "for i in range(k, n+1):\n", - " s+= i\n", - "b= 0.5*(n**2 + n - k*(k-1))\n", - "print(s, b)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import torch" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "f1='data/datasets/mnist/rot_mnist_lenet/train/seed_0_domain_15_data.pt'\n", - "f2='data/datasets/mnist_2/rot_mnist_lenet/train/seed_0_domain_15_data.pt'\n", - "\n", - "a= torch.load(f1)\n", - "b= torch.load(f2)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "torch.sum(torch.eq(a, b))/(1000*32*32)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 36, - "metadata": {}, - "outputs": [], - "source": [ - "import torch\n", - "import torchvision\n", - "from torch import nn, optim\n", - " \n", - "from opacus.dp_model_inspector import DPModelInspector\n", - "from opacus.utils import module_modification" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "model= torchvision.models.resnet18(1)" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Parameter containing:\n", - "tensor([[-0.0185, -0.0705, -0.0518, ..., -0.0390, 0.1735, -0.0410],\n", - " [-0.0818, -0.0944, 0.0174, ..., 0.2028, -0.0248, 0.0372],\n", - " [-0.0332, -0.0566, -0.0242, ..., -0.0344, -0.0227, 0.0197],\n", - " ...,\n", - " [-0.0103, 0.0033, -0.0359, ..., -0.0279, -0.0115, 0.0128],\n", - " [-0.0359, -0.0353, -0.0296, ..., -0.0330, -0.0110, -0.0513],\n", - " [ 0.0021, -0.0248, -0.0829, ..., 0.0417, -0.0500, 0.0663]],\n", - " requires_grad=True)" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "model.fc.weight" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "metadata": {}, - "outputs": [], - "source": [ - "class GroupNorm(torch.nn.GroupNorm):\n", - " def __init__(self, num_channels, num_groups=32, **kwargs):\n", - " super().__init__(num_groups, num_channels, **kwargs)" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "metadata": {}, - "outputs": [], - "source": [ - "model= torchvision.models.resnet18(0, norm_layer=GroupNorm)" - ] - }, - { - "cell_type": "code", - "execution_count": 35, - "metadata": {}, - "outputs": [], - "source": [ - "opt= optim.SGD([ {'params': filter(lambda p: p.requires_grad, model.parameters()) }, \n", - " ], lr= 0.001, weight_decay= 0.0005, momentum= 0.9, nesterov=True )" - ] - }, - { - "cell_type": "code", - "execution_count": 41, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Linear(in_features=512, out_features=1000, bias=True)" - ] - }, - "execution_count": 41, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "model.fc" - ] - }, - { - "cell_type": "code", - "execution_count": 86, - "metadata": {}, - "outputs": [], - "source": [ - "import torch" - ] - }, - { - "cell_type": "code", - "execution_count": 87, - "metadata": {}, - "outputs": [], - "source": [ - "a=torch.rand(3)" - ] - }, - { - "cell_type": "code", - "execution_count": 88, - "metadata": {}, - "outputs": [], - "source": [ - "b=a\n", - "c=a.clone().detach()" - ] - }, - { - "cell_type": "code", - "execution_count": 89, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "tensor([0.7193, 0.8302, 0.5062])\n", - "tensor([0.7193, 0.8302, 0.5062])\n", - "tensor([0.7193, 0.8302, 0.5062])\n" - ] - } - ], - "source": [ - "print(a)\n", - "print(b)\n", - "print(c)" - ] - }, - { - "cell_type": "code", - "execution_count": 90, - "metadata": {}, - "outputs": [], - "source": [ - "b[2]=-10\n", - "b[1]=-10" - ] - }, - { - "cell_type": "code", - "execution_count": 91, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "tensor([ 0.7193, -10.0000, -10.0000])\n", - "tensor([ 0.7193, -10.0000, -10.0000])\n", - "tensor([0.7193, 0.8302, 0.5062])\n" - ] - } - ], - "source": [ - "print(a)\n", - "print(b)\n", - "print(c)" - ] - }, - { - "cell_type": "code", - "execution_count": 93, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "tensor(2)" - ] - }, - "execution_count": 93, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "(b == -10).nonzero()[1,0]" - ] - }, { "cell_type": "code", "execution_count": null, diff --git a/docs/notebooks/adult_dataset.ipynb b/docs/notebooks/beta/adult_dataset.ipynb similarity index 88% rename from docs/notebooks/adult_dataset.ipynb rename to docs/notebooks/beta/adult_dataset.ipynb index fdcb4d6..686e379 100644 --- a/docs/notebooks/adult_dataset.ipynb +++ b/docs/notebooks/beta/adult_dataset.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -17,7 +17,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -340,7 +340,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -349,42 +349,9 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " age workclass education marital_status occupation race sex \\\n", - "0 39 Government Bachelors Single White-Collar White Male \n", - "1 50 Self-Employed Bachelors Married White-Collar White Male \n", - "2 38 Private HS-grad Divorced Blue-Collar White Male \n", - "3 53 Private School Married Blue-Collar Other Male \n", - "4 28 Private Bachelors Married Professional Other Female \n", - "\n", - " hours_per_week income \n", - "0 40 0 \n", - "1 13 0 \n", - "2 40 0 \n", - "3 40 0 \n", - "4 40 0 \n", - " age workclass education marital_status occupation race sex \\\n", - "0 39 Government Bachelors Single White-Collar White Male \n", - "1 50 Self-Employed Bachelors Married White-Collar White Male \n", - "2 38 Private HS-grad Divorced Blue-Collar White Male \n", - "3 53 Private School Married Blue-Collar Other Male \n", - "4 28 Private Bachelors Married Professional Other Female \n", - "\n", - " hours_per_week income \n", - "0 40 0 \n", - "1 13 0 \n", - "2 40 0 \n", - "3 40 0 \n", - "4 40 0 \n" - ] - } - ], + "outputs": [], "source": [ "continuous_features=['age', 'hours_per_week']\n", "outcome_name='income'\n", @@ -401,7 +368,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -416,49 +383,9 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['age',\n", - " 'hours_per_week',\n", - " 'workclass_Government',\n", - " 'workclass_Other/Unknown',\n", - " 'workclass_Private',\n", - " 'workclass_Self-Employed',\n", - " 'education_Assoc',\n", - " 'education_Bachelors',\n", - " 'education_Doctorate',\n", - " 'education_HS-grad',\n", - " 'education_Masters',\n", - " 'education_Prof-school',\n", - " 'education_School',\n", - " 'education_Some-college',\n", - " 'marital_status_Divorced',\n", - " 'marital_status_Married',\n", - " 'marital_status_Separated',\n", - " 'marital_status_Single',\n", - " 'marital_status_Widowed',\n", - " 'occupation_Blue-Collar',\n", - " 'occupation_Other/Unknown',\n", - " 'occupation_Professional',\n", - " 'occupation_Sales',\n", - " 'occupation_Service',\n", - " 'occupation_White-Collar',\n", - " 'race_Other',\n", - " 'race_White',\n", - " 'sex_Female',\n", - " 'sex_Male',\n", - " 'income']" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "columns" ] @@ -601,19 +528,9 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Gender Stats: (21790, 30) (10771, 30)\n", - "Male: (15128, 30) (6662, 30)\n", - "Female: (9592, 30) (1179, 30)\n" - ] - } - ], + "outputs": [], "source": [ "#train_data_vae= train_data_vae[ train_data_vae['income']==0 ]\n", "#train_data_vae.drop('income', axis=1, inplace=True)\n", @@ -636,53 +553,9 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Domain: 0\n", - "Train Size for each group: 405 Val Size for each group: 45\n", - "Data: train Gender: male Income : low 122\n", - "Data: train Gender: male Income : high 283\n", - "Data: train Gender: female Income : low 284\n", - "Data: train Gender: female Income : high 121\n", - "torch.Size([810, 30]) torch.Size([810])\n", - "Data: val Gender: male Income : low 14\n", - "Data: val Gender: male Income : high 31\n", - "Data: val Gender: female Income : low 32\n", - "Data: val Gender: female Income : high 13\n", - "torch.Size([90, 30]) torch.Size([90])\n", - "\n", - "\n", - "Domain: 1\n", - "Train Size for each group: 405 Val Size for each group: 45\n", - "Data: train Gender: male Income : low 162\n", - "Data: train Gender: male Income : high 243\n", - "Data: train Gender: female Income : low 243\n", - "Data: train Gender: female Income : high 162\n", - "torch.Size([810, 30]) torch.Size([810])\n", - "Data: val Gender: male Income : low 18\n", - "Data: val Gender: male Income : high 27\n", - "Data: val Gender: female Income : low 27\n", - "Data: val Gender: female Income : high 18\n", - "torch.Size([90, 30]) torch.Size([90])\n", - "\n", - "\n", - "Domain: 2\n", - "Train Size for each group: 90 Val Size for each group: 10\n", - "Data: test Gender: male Income : low 81\n", - "Data: test Gender: male Income : high 9\n", - "Data: test Gender: female Income : low 9\n", - "Data: test Gender: female Income : high 81\n", - "torch.Size([180, 30]) torch.Size([180])\n", - "\n", - "\n" - ] - } - ], + "outputs": [], "source": [ "#Two groups (Male, Female) equally represented in each domain\n", "total_domains= 3 \n", @@ -1021,9 +894,9 @@ ], "metadata": { "kernelspec": { - "display_name": "envs", + "display_name": "matchdg-env", "language": "python", - "name": "envs" + "name": "matchdg-env" }, "language_info": { "codemirror_mode": { @@ -1035,7 +908,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.7" + "version": "3.7.9" } }, "nbformat": 4, diff --git a/docs/notebooks/mnist_results.ipynb b/docs/notebooks/beta/mnist_results.ipynb similarity index 99% rename from docs/notebooks/mnist_results.ipynb rename to docs/notebooks/beta/mnist_results.ipynb index a15a460..a7f053f 100644 --- a/docs/notebooks/mnist_results.ipynb +++ b/docs/notebooks/beta/mnist_results.ipynb @@ -2645,210 +2645,6 @@ "# fig.savefig('a.jpg')" ] }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "True" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import os\n", - "os.path.exists(save_path+'.pth')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "" - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "metadata": {}, - "outputs": [], - "source": [ - "x= torch.rand((2,3))\n", - "y= torch.rand((2,1))" - ] - }, - { - "cell_type": "code", - "execution_count": 36, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "tensor([[0.4583, 0.4527, 0.3075, 0.8617],\n", - " [0.5896, 0.9299, 0.6985, 0.5716]])" - ] - }, - "execution_count": 36, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "torch.cat((x,y), dim=1)" - ] - }, - { - "cell_type": "code", - "execution_count": 44, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "torch.Size([6, 1])" - ] - }, - "execution_count": 44, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "torch.cat( (torch.zeros((3,1)), torch.ones((3,1))), dim=0).shape" - ] - }, - { - "cell_type": "code", - "execution_count": 47, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "tensor([1., 1., 0., 0., 0.])" - ] - }, - "execution_count": 47, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "x=torch.tensor([1,2,3,4,5])\n", - "y=1.0*(x<3)\n", - "y" - ] - }, - { - "cell_type": "code", - "execution_count": 50, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "tensor([3]) tensor([4])\n" - ] - } - ], - "source": [ - "x=torch.tensor([1,2,3])\n", - "y=torch.tensor([1,2,4])\n", - "print(x[x!=y], y[x!=y])" - ] - }, - { - "cell_type": "code", - "execution_count": 51, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "1" - ] - }, - "execution_count": 51, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "1%10" - ] - }, - { - "cell_type": "code", - "execution_count": 52, - "metadata": {}, - "outputs": [ - { - "ename": "TypeError", - "evalue": "unsupported operand type(s) for +: 'int' and 'range'", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0;36m1\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m10\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[0;31mTypeError\u001b[0m: unsupported operand type(s) for +: 'int' and 'range'" - ] - } - ], - "source": [ - "1+range(1,10)" - ] - }, - { - "cell_type": "code", - "execution_count": 53, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[101, 102, 103, 104, 105, 106, 107, 108, 109, 110]" - ] - }, - "execution_count": 53, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "arr= 100+ np.array(list(range(1, 11)))\n", - "arr.tolist()" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "2.0" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import numpy as np\n", - "x=[1,2,3]\n", - "np.mean(x)" - ] - }, { "cell_type": "code", "execution_count": null, diff --git a/docs/notebooks/helper_plots.ipynb b/docs/notebooks/helper_plots.ipynb index 8dfa38b..d31b326 100644 --- a/docs/notebooks/helper_plots.ipynb +++ b/docs/notebooks/helper_plots.ipynb @@ -9,7 +9,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -34,11 +34,11 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ - "data_obj= datasets.MNIST('../../data/rot_mnist',\n", + "data_obj= datasets.MNIST('../../data/datasets/mnist/',\n", " train=True,\n", " download=False,\n", " transform=transforms.ToTensor()\n", @@ -55,7 +55,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -67,7 +67,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -80,7 +80,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -89,13 +89,34 @@ " img.save('../../results/rot_mnist/images/' + str(angles[counter]) + '.jpg')\n", " counter+=1" ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "matchdg-env", "language": "python", - "name": "python3" + "name": "matchdg-env" }, "language_info": { "codemirror_mode": { @@ -107,7 +128,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.7" + "version": "3.7.9" } }, "nbformat": 4, diff --git a/docs/notebooks/images/0.jpg b/docs/notebooks/images/0.jpg index d51f6f63b5aa8330e63dad09dc9083ae1907f72a..edc1ed5eb2c3b78651c05f8944da550492a4a835 100644 GIT binary patch delta 127 zcmV-_0D%9w1iu5YNC9{G{<_T%*xZ@o2&lo(N z6j!PI2aH|#zg4i5lWldR%#xr#cy2-cO?hP$SEqaizPGdZl#yIGPqtc1ZiKKOG1|a$ h>$H!l73W%v32Uj{+sB=eOz62h;4uQLQAHG2|Jip=LF51c delta 250 zcmVXOc^4H#Ats1Oh^@I8YBk&|{zz`DML;Y}yRcV^t!>Ui=*ZcC;{;kXbnkO|y&Go7@^CWrLykK%i%yQ4j>4G`yUO!5z&cRd`VsHQ%B-g)uD)>CsR}kyI zEP~iHh^=8~G06@_;Lf~cfDg)j^MWgs_?>Owad)cS!Qw4PR`Dd0gn03o<6*)1%7DnA zZ2%H}?>Gj$uADNC(Ym@ZS5uW`I3W6p(bRlLt?JgX+Ugp$?aj1hOmIsx7|^Qi1SW6@ M9A_T2nMHs9*-Pl7qW}N^ diff --git a/docs/notebooks/images/30.jpg b/docs/notebooks/images/30.jpg index d46cb04d94a9753e4ccf64d3a4a1ecf7e6e471f2..863df74d5f36d5cd22e3ce4351087712fb0997bf 100644 GIT binary patch delta 222 zcmV<403rYN1fB%2NdbRrJ4vtat?ccTH1`rLQK?{{vm61EKpdW=;;w7{9o2jWsUVM`tja0zOC%Dcu{%d1Fl2N%Dn}rL*w?RkUt2#E^ee9i_=;th zT8<{0NWYU}9m=B-5*KkD&H*el(`e6<-r3KmU))&TN9EkxO3+rynFnjBAdHR=AoQpx ztJ*%TccE)Gnx%||E^TEJp~(Q_vB3ufWD%Z0BD-&iI{yHNJYi|4c#6tZgI<|LT7`&N Y4l%d~-c%{zD8R-u-?yF7MHE;6*>Q(zEdT%j delta 310 zcmV-60m=TJ1oZ^4NdbS|BS+MA?MfXxO0$;k?otBB8t1=KdH_3y*J?1tP!Gk ztHoM=k9{%O6`7VcZRJ}TJFo`e2e}LfP-~0v--GUa58{cmdFJ!bBFhZ>LiwnB?F8eH z!vyyCu4=aQ4;AWu8n?bpEu)5ezc2kLFYlq)+5Ovp4st>4LB)S(`S<#kryPxOH21Q| zp=FX%T(<#!Vt$JrZnQ>#I!Y9ju$m}zPA-gxJNM~Z0JI!H5&Rh5CrAdZ9@^i6x> pgg!0sclLjXbac4Zp#fmjVPKg99J=F^)bW9n*b)z%QAHG2|JiC~Sz`bI delta 336 zcmV-W0k8i11CIr;NdbS04LXsh^9ip~} zSn)lMovPhopwr53k&uoUg33WHk&I)Y$R`8Lwapgy!`jW(m41P4E!?9OIac=v(Efh7 zJXU>oUI_8TUI@`OJBtXTZF1$-6=`C~5MYzF!N?)PJ{ess+3pKrak+`-J3{vRyAM{c zCL;$2trfN5Eec-}__IvW;zHkPomKJK2QGgF1pXE8{{R^Lb7|p=Te}S!;6vgoSNjM+@Tz`oE9r&Zd!R6Gn zxjxDms@+0FkvQiJ2c>v?670XdYc6L7%d}C#%Hk@^Dwb~i5#>?1J;~bNmxFqs( P&Uy~R6~<9T6j%S*9Gg*Z delta 304 zcmV-00nh&61MUQ{NCAKFYdbrgLh>t1J9#cHW?-?!5|(B@fC}|#z5;4%p)}Cy_VR0K zZ|6y*ZC&bcq^{uSCz1ii2`ke%9#3^^J(b+nw^2Md5V?+6++mS{!327PQCFvYKDyF; zDd3H3#urx6-0I?CW2Olr4j_|e;^XH8bzHUq7~q}64pT?*hOK{R<4F8M`izlXOLQi> zl@tK^KR!?l9t&}f{8ylOtKrq(jJ_w$CWeq(>Dq;aI+{+(RwPGI03}laivn;no=!>5 zJbq+Y=aMv)Wkq5ZL<9!_^%(%*`+#YgIL3H10h58&zL)XmiKFoU0Kpw97GL<8YTA4d zAthLmu?(AoIc6vuct3b#fZcidqKYd1t*vTW?aX&NrR=wJM;M7@l;ng2kUvvYEC1Px Cs*l_N diff --git a/docs/notebooks/images/75.jpg b/docs/notebooks/images/75.jpg index def1b6a9a4708bfee85effb279a1d74e95f5ffea..bd03e12e3994e5e87eecbc007ffb3d45270f4eb1 100644 GIT binary patch delta 141 zcmV;80CNA<1k3}lNCAKO{)#BB!@zzX@W#6>^LU%YLrIF+Rii)vX~7McjykO^b zbYs9j4>c+0O*7&&R>BuMzTa=OGM~B>lAE!El08QQx=rv4#t4XQ=F+aoCvbx3{GBnK v$~yDY(!92cD%3ia{k^cZhW6$t1fFP#C1qXs#_R)(-~pd%t3?GAQD6VrmnujE delta 280 zcmV+z0q6eA1J(qvNCAKFtusu$)^#g=J5IKe=I-IPM-*cupYQ`Do`3>tyVrgRc*jE1 z8vU*9?@?O~9h0<@D&U>Pc8)mho}#?yf~0~7BZ3cVO7#B#g#Q3%(KNpj_|ivIywWYz zEEaYG8D)`QDtZ=gm2eb;&%JYg81eqO;m;FAt0nBxsXJ$eMlydR#z@NGpJ9$iL0+*Z z!tEaO#oCXGout)#GjU@sq!2g{EQ|>uSTF|%Ey-LG2RJ6ae62e@cIwMQ)O2)69@hEd zl20~0%#53`$bW?4h$pTqGQNTE?~CM5*|SuV;`!F%)IOaH#-q#|wuD|!KP%&K!3qum eE6>l=QBwV;b8ZkV{OLT9bLH-?%qkB7exG|fGyz4(s}%!4E)lq%)0Gk~F(=jw4@ kQC4j=3)>Gf?01(I-fHcW$(56M^f)|@O;)0cD58r0*%_ihi~s-t delta 242 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 diff --git a/docs/notebooks/images/t_sne.png b/docs/notebooks/images/t_sne.png index cc938150c348e44758e2f07f1632f4b5be89f2ba..8160e0e1ce1a7fdde3551c0ff2877f8286b0b782 100644 GIT binary patch literal 96555 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 W6IQXTN9}lqUqINh6 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

rm6@?};6fK_ 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

vw6Cmc4T*iSbzMqB0&15S=uZx^V|a^dP#) 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∾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 literal 72758 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.A^oK*_8?u;n8w#%LwiEY#K8=R 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%0ARJ9@x?r@ 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" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "matplotlib.rcParams.update({'errorbar.capsize': 2})\n", + "fig, ax = plt.subplots(1, 2, figsize=(27, 11))\n", + "fontsize=50\n", + "fontsize_lgd= fontsize/1.2\n", + "marker_list = ['o', '^']\n", + "color_list= ['tab:blue', 'tab:red']\n", + "\n", + "#OOD Accuracy\n", + "ax[0].tick_params(labelsize=fontsize)\n", + "# ax[0].set_xticklabels(x, rotation=25)\n", + "ax[0].set_ylabel('Cross Entropy: $-log(p)$', fontsize=fontsize)\n", + "ax[0].set_xlabel('Classification Probability: $p$', fontsize=fontsize)\n", + "ax[0].set_title('Method $A$', fontsize= fontsize)\n", + "ax[0].set(xlim=(0,1), ylim=(0,1.5))\n", + "ax[0].grid()\n", + "# ax[0].fill_between([0.60, 1.0], 0.0 , 0.50, color='grey' )\n", + "\n", + "p_train= np.random.normal(0.85, 0.05, 100)\n", + "p_test= np.random.normal(0.75, 0.05, 70)\n", + "p_test_inc= np.random.normal(0.35, 0.05, 30)\n", + "\n", + "ax[0].scatter( p_train, -np.log(p_train), c= color_list[0], s=200*7, label='Train Domain', alpha=0.3, edgecolors='none' )\n", + "ax[0].scatter( p_test, -np.log(p_test), c= color_list[1], s=200*5, label='Test Domain', alpha=0.3, edgecolors='none' )\n", + "ax[0].scatter( p_test_inc, -np.log(p_test_inc), c=color_list[1], s=200*7, alpha=0.3, edgecolors='none' )\n", + "ax[0].axhline(-np.log(0.85), ls='--', color='tab:purple', label='Attack Threshold', linewidth=4)\n", + "ax[0].axvline(0.5, ls='--', color='tab:orange', label='Classification Threshold', linewidth=4)\n", + "# ax[0].legend(fontsize= fontsize)\n", + "\n", + "#MI Attack\n", + "ax[1].tick_params(labelsize=fontsize)\n", + "# ax[1].set_xticklabels(x, rotation=25)\n", + "ax[1].set_ylabel('Cross Entropy: $-log(p)$', fontsize=fontsize)\n", + "ax[1].set_xlabel('Classification Probability: $p$', fontsize=fontsize)\n", + "ax[1].set_title('Method $B$', fontsize= fontsize)\n", + "ax[1].set(xlim=(0,1), ylim=(0, 1.5))\n", + "ax[1].grid()\n", + "\n", + "p_train= np.random.normal(0.85, 0.05, 100)\n", + "p_test= np.random.normal(0.60, 0.015, 90)\n", + "p_test_inc= np.random.normal(0.35, 0.05, 10)\n", + "\n", + "ax[1].scatter( p_train, -np.log(p_train), c= color_list[0], s=200*7, label='Train Domain', alpha=0.3, edgecolors='none' )\n", + "ax[1].scatter( p_test, -np.log(p_test), c= color_list[1], s=200*6, label='Test Domain', alpha=0.3, edgecolors='none' )\n", + "ax[1].scatter( p_test_inc, -np.log(p_test_inc), c=color_list[1], s=200*7, alpha=0.3, edgecolors='none' )\n", + "ax[1].axhline(-np.log(0.85), ls='--', color='tab:purple', label='Attack Threshold', linewidth=4)\n", + "ax[1].axvline(0.5, ls='--', color='tab:orange', label='Classification Threshold', linewidth=4)\n", + "# ax[1].legend(fontsize= fontsize)\n", + "\n", + "lines, labels = fig.axes[-1].get_legend_handles_labels() \n", + "lgd= fig.legend(lines, labels, loc=\"lower center\", bbox_to_anchor=(0.5, -0.30), fontsize=fontsize, ncol=2)\n", + " \n", + "plt.tight_layout()\n", + "plt.savefig('../../results/counterexample.pdf', bbox_extra_artists=(lgd,), bbox_inches='tight', dpi=600)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "matchdg-env", + "language": "python", + "name": "matchdg-env" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.9" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/docs/notebooks/beta_reproduce_results.ipynb b/docs/notebooks/reproduce_results.ipynb similarity index 100% rename from docs/notebooks/beta_reproduce_results.ipynb rename to docs/notebooks/reproduce_results.ipynb diff --git a/docs/notebooks/reproducing_results_matchdg_paper.ipynb b/docs/notebooks/reproducing_results_matchdg_paper.ipynb deleted file mode 100644 index 7f3d17e..0000000 --- a/docs/notebooks/reproducing_results_matchdg_paper.ipynb +++ /dev/null @@ -1,359 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Reproducing results\n", - "\n", - "\n", - "The following code reproduces results for Slab dataset, Rotated MNIST and Fashion-MNIST dataset, and PACS dataset corresponding to Tables 1, 2, 3, 4, 5, 6 in the main paper.\n", - "\n", - "### Slab Dataset\n", - "\n", - "We provide the exact commands for the slab dataset, follow the section 'Table 1' below to reproduce the results.\n", - "\n", - "### RotMNIST & FashionMNIST\n", - "\n", - "For convenience, we provide the exact commands for Rotated MNIST dataset with training domains set to [15, 30, 45, 60, 75] and the test domains set to [0, 90]. \n", - "\n", - "To obtain results for the FashionMNIST dataset, change the dataset parameter `--dataset` from `rot_mnist` to `fashion_mnist`.\n", - "\n", - "To obtain results for the different set of training domains in the paper, change the input to the parameter `--train_domains` with the list of training domains: `--train_domains [30, 45]` or `--train_domains [30, 45, 60]`\n", - "\n", - "### PACS\n", - "\n", - "For convenience, we provide the exact commands for ResNet-18 evaluation for the test domain Photo.\n", - "\n", - "To obtain results for ResNet-50, AlexNet, change the model_name parameter `--model_name` from `resnet18` to `resnet50`, `alexnet` and change the other hyperparameters accordingly (Details for hyperparameters in Section C.3, Supplementary materials)\n", - "\n", - "To obtain results on different domains than Photo, change the parameters `--train_domains`, `--test_domains` accordingly and change the other hyperparameters accordingly (Details for hyperparameters in Section C.3, Supplementary materials)\n", - "\n", - "## Chest X-ray\n", - "\n", - "Please perform the following step before running the code\n", - "\n", - " -Follow the steps in the Preprocess.ipynb notebook to download and process the Chest X-Ray datasets\n", - " -Then follow the steps in the ChestXRay_Translate.ipynb notebook to perform image translations\n", - "\n", - "### Note regarding hardware requirements\n", - "\n", - "The code requires a GPU device, also the batch size for MatchDG Phase 1 training might need to be adjusted according to the memory limits of the GPU device. In case of CUDA of out of memory issues, try with a smaller batch size." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Installing Libraries\n", - "\n", - "List of all the required packages are mentioned in the file 'requirements.txt'\n", - "\n", - "You may install them as follows: pip install -r requirements.txt" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Table 1: Slab Dataset\n", - "\n", - "From the directory `slab`, run the following command\n", - "\n", - "bash final_res.sh" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This will save the results/logs for all the approaches inside the directory `slab/checkpoints/slab/` " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Table 2, 3: RotMNIST & Fashion MNIST\n", - "\n", - "## Prepare Data for Rot MNIST & Fashion MNIST\n", - "\n", - "From the directory `data`, run the following command" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "python data_gen.py resnet18" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Table 2\n", - "Now move back to the root directory.\n", - "\n", - "* ERM: " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "python train.py --dataset rot_mnist --method_name erm_match --match_case 0.01 --penalty_ws 0.0 --epochs 25" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "* ERM_RandomMatch:" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "python train.py --dataset rot_mnist --method_name erm_match --match_case 0.01 --penalty_ws 0.1 --epochs 25" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "* ERM_PerfectMatch:" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "python train.py --dataset rot_mnist --method_name erm_match --match_case 1.0 --penalty_ws 0.1 --epochs 25" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "* MatchDG:" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "python train.py --dataset rot_mnist --method_name matchdg_ctr --match_case 0.01 --match_flag 1 --epochs 100 --batch_size 256 --pos_metric cos\n", - "\n", - "python train.py --dataset rot_mnist --method_name matchdg_erm --match_case -1 --penalty_ws 0.1 --epochs 25 --ctr_match_case 0.01 --ctr_match_flag 1 --ctr_match_interrupt 5 --ctr_model_name resnet18" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Table 3\n", - "\n", - "* ERM: " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "python test.py --dataset rot_mnist --method_name erm_match --match_case 0.01 --penalty_ws 0.0 --test_metric match_score " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "* MatchDG (Default):" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "python test.py --dataset rot_mnist --method_name matchdg_ctr --match_case 0.01 --match_flag 1 --pos_metric cos --test_metric match_score" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "* MatchDG (PerfMatch):" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "python train.py --dataset rot_mnist --method_name matchdg_ctr --match_case 1.0 --match_flag 1 --epochs 100 --batch_size 256 --pos_metric cos\n", - "\n", - "python test.py --dataset rot_mnist --method_name matchdg_ctr --match_case 1.0 --match_flag 1 --pos_metric cos --test_metric match_score " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Table 4, 5: PACS\n", - "\n", - "## Prepare Data for PACS\n", - "\n", - "Download the PACS dataset (https://drive.google.com/drive/folders/0B6x7gtvErXgfUU1WcGY5SzdwZVk) and place it in the directory '/data/datasets/pacs/' " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "* RandMatch: " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "python train.py --dataset pacs --method_name erm_match --match_case 0.01 --penalty_ws 0.1 --train_domains art_painting cartoon sketch --test_domains photo --out_classes 7 --perfect_match 0 --img_c 3 --pre_trained 1 --lr 0.001 --epochs 50 --model_name resnet18 --weight_decay 0.001 " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "* MatchDG:" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "python train.py --dataset pacs --method_name matchdg_ctr --match_case 0.01 --match_flag 1 --epochs 100 --batch_size 64 --pos_metric cos --train_domains art_painting cartoon sketch --test_domains photo --out_classes 7 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name resnet50" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "python train.py --dataset pacs --method_name matchdg_erm --match_case -1 --ctr_match_case 0.01 --ctr_match_flag 1 --ctr_match_interrupt 5 --ctr_model_name resnet50 --train_domains art_painting cartoon sketch --test_domains photo --out_classes 7 --perfect_match 0 --img_c 3 --pre_trained 1 --epochs 50 --lr 0.0005 --batch_size 16 --weight_decay 0.001 --penalty_ws 0.1 --model_name resnet18" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "* MDGHybrid:" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "python train.py --dataset pacs --method_name hybrid --match_case -1 --ctr_match_case 0.01 --ctr_match_flag 1 --ctr_match_interrupt 5 --ctr_model_name resnet50 --train_domains art_painting cartoon sketch --test_domains photo --out_classes 7 --perfect_match 0 --img_c 3 --pre_trained 1 --epochs 50 --lr 0.0005 --batch_size 16 --weight_decay 0.001 --penalty_ws 0.1 --penalty_aug 0.1 --model_name resnet18" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Table 6: Chest X-Ray" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - " -Follow the steps in the Preprocess.ipynb notebook to donwload and process the Chest X-Ray datasets\n", - " -Then follow the steps in the ChestXRay_Translate.ipynb notebook to perform image translations" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "* ERM: " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "python train.py --dataset chestxray --method_name erm_match --match_case 0.01 --train_domains nih_trans chex_trans --test_domains kaggle_trans --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --epochs 40 --lr 0.001 --batch_size 16 --penalty_ws 0.0 --model_name densenet121" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "* RandMatch: " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "python train.py --dataset chestxray --method_name erm_match --match_case 0.01 --train_domains nih_trans chex_trans --test_domains kaggle_trans --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --epochs 40 --lr 0.001 --batch_size 16 --penalty_ws 10.0 --model_name densenet121" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "* MatchDG: " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "python train.py --dataset chestxray --method_name matchdg_ctr --match_case 0.01 --match_flag 1 --epochs 100 --batch_size 64 --pos_metric cos --train_domains nih_trans chex_trans --test_domains kaggle_trans --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name densenet121" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "python train.py --dataset chestxray --method_name matchdg_erm --match_case -1 --ctr_match_case 0.01 --ctr_match_flag 1 --ctr_match_interrupt 5 --ctr_model_name densenet121 --model_name densenet121 --train_domains nih_trans kaggle_trans --test_domains chex_trans --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --epochs 40 --lr 0.001 --batch_size 16 --weight_decay 0.0005 --penalty_ws 50.0 --model_name densenet12" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "* MDGHybrid: " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "python train.py --dataset chestxray --method_name hybrid --match_case -1 --ctr_match_case 0.01 --ctr_match_flag 1 --ctr_match_interrupt 5 --ctr_model_name densenet121 --model_name densenet121 --train_domains nih_trans kaggle_trans --test_domains chex_trans --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --epochs 40 --lr 0.001 --batch_size 16 --weight_decay 0.0005 --penalty_ws 1.0 --penalty_aug 50.0 --model_name densenet12" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.7.9" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/docs/notebooks/robustdg_getting_started.ipynb b/docs/notebooks/robustdg_getting_started.ipynb index 4e9fde5..3481c48 100644 --- a/docs/notebooks/robustdg_getting_started.ipynb +++ b/docs/notebooks/robustdg_getting_started.ipynb @@ -50,11 +50,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Prepare Data for Rot MNIST & Fashion MNIST\n", + "### Prepare Data for Rot MNIST\n", "\n", - "From the directory `data`, run the following command\n", + "Run the following command\n", "\n", - " python data_gen.py resnet18 " + " python data/data_gen_mnist.py --dataset rot_mnist --model resnet18 --img_h 224 --img_w 224 --subset_size 2000 " ] }, { @@ -69,7 +69,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - " python train.py --dataset rot_mnist --method_name erm_match --match_case 0.01 --penalty_ws 0.0 --epochs 25 " + " python train.py --dataset rot_mnist --method_name erm_match --match_case 0.0 --penalty_ws 0.0 --epochs 25 " ] }, { @@ -78,7 +78,7 @@ "source": [ "### MatchDG: Domain generalization via causal matching\n", "\n", - "The MatchDG model regularize the ERM training objective by matching data samples across domains that were generated from the same base object. More details are in the [Arxiv paper](https://arxiv.org/abs/2006.07500).\n", + "The MatchDG model regularize the ERM training objective by matching data samples across domains that were generated from the same base object. More details are in the [paper](https://arxiv.org/abs/2006.07500).\n", "\n", "Train the MatchDG model on Rotated MNIST by executing the following command\n", "\n", @@ -91,7 +91,7 @@ "source": [ "#### Phase 1: Learning Match Function\n", "\n", - " python train.py --dataset rot_mnist --method_name matchdg_ctr --match_case 0.01 --match_flag 1 --epochs 100 --batch_size 256 --pos_metric cos\n", + " python train.py --dataset rot_mnist --method_name matchdg_ctr --match_case 0.0 --match_flag 1 --epochs 50 --batch_size 64 --pos_metric cos --match_func_aug_case 1\n", "" ] }, @@ -101,7 +101,7 @@ "source": [ "#### Phase 2: Learning Classifier regularised on the Match Function\n", "\n", - " python train.py --dataset rot_mnist --method_name matchdg_erm --match_case -1 --penalty_ws 0.1 --epochs 25 --ctr_match_case 0.01 --ctr_match_flag 1 --ctr_match_interrupt 5 --ctr_model_name resnet18 " + " python train.py --dataset rot_mnist --method_name matchdg_erm --penalty_ws 0.1 --match_case -1 --ctr_match_case 0.0 --ctr_match_flag 1 --ctr_match_interrupt 5 --ctr_model_name resnet18 --epochs 25 " ] }, { @@ -138,7 +138,7 @@ "source": [ "%%bash\n", "cd ../..\n", - "python test.py --test_metric acc --dataset rot_mnist --method_name erm_match --match_case 0.01 --penalty_ws 0.0" + "python test.py --test_metric acc --dataset rot_mnist --method_name erm_match --match_case 0.0 --penalty_ws 0.0" ] }, { @@ -158,14 +158,7 @@ "source": [ "%%bash\n", "cd ../..\n", - "python test.py --test_metric acc --dataset rot_mnist --method_name matchdg_erm --penalty_ws 0.1 --match_case -1 --ctr_match_case 0.01 --ctr_match_flag 1 --ctr_match_interrupt 5 --ctr_model_name resnet18" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The results indicate that MatchDG (96.1) outperforms ERM (93.9) on OOD accuracy by approximately 2 percent " + "python test.py --test_metric acc --dataset rot_mnist --method_name matchdg_erm --penalty_ws 0.1 --match_case -1 --ctr_match_case 0.0 --ctr_match_flag 1 --ctr_match_interrupt 5 --ctr_model_name resnet18" ] }, { @@ -192,7 +185,7 @@ "source": [ "%%bash\n", "cd ../..\n", - "python test.py --test_metric t_sne --dataset rot_mnist --method_name matchdg_ctr --match_case 0.01 --match_flag 1 --pos_metric cos" + "python test.py --test_metric t_sne --dataset rot_mnist --method_name matchdg_ctr --match_case 0.0 --match_flag 1 --pos_metric cos" ] }, { @@ -212,7 +205,7 @@ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", - "save_path= \"../../results/rot_mnist/matchdg_ctr/logit_match/train_['15', '30', '45', '60', '75']/Model_0.01_5_1_0_resnet18_label.json\"\n", + "save_path= \"../../results/rot_mnist/matchdg_ctr/logit_match/train_['15', '30', '45', '60', '75']/Model_0.0_5_1_0_resnet18_label.json\"\n", "with open(save_path) as f:\n", " data = json.load(f)\n", "\n", @@ -260,7 +253,7 @@ "source": [ "%%bash\n", "cd ../..\n", - "python test.py --test_metric mia --mia_logit 1 --mia_sample_size 2000 --batch_size 64 --dataset rot_mnist --method_name erm_match --match_case 0.01 --penalty_ws 0.0" + "python test.py --test_metric mia --mia_logit 1 --mia_sample_size 2000 --batch_size 64 --dataset rot_mnist --method_name erm_match --match_case 0.0 --penalty_ws 0.0" ] }, { @@ -278,22 +271,22 @@ "source": [ "%%bash\n", "cd ../..\n", - "python test.py --test_metric mia --mia_logit 1 --mia_sample_size 2000 --batch_size 64 --dataset rot_mnist --method_name matchdg_erm --penalty_ws 0.1 --match_case -1 --ctr_match_case 0.01 --ctr_match_flag 1 --ctr_match_interrupt 5" + "python test.py --test_metric mia --mia_logit 1 --mia_sample_size 2000 --batch_size 64 --dataset rot_mnist --method_name matchdg_erm --penalty_ws 0.1 --match_case -1 --ctr_match_case 0.0 --ctr_match_flag 1 --ctr_match_interrupt 5 --ctr_model_name resnet18" ] }, { - "cell_type": "markdown", + "cell_type": "code", + "execution_count": null, "metadata": {}, - "source": [ - "We evaluate ERM and MatchDG on MIA accuracy and observe a similar pattern to that of OOD accuracy; ERM gives test MIA accuracy of 57.2 percent, which gets imporved to 53.1 percent for MatchDG. MatchDG is able to improve the generalization, which makes it difficult for MIA to detemine samples derived from the train versus test distribution" - ] + "outputs": [], + "source": [] } ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "matchdg-env", "language": "python", - "name": "python3" + "name": "matchdg-env" }, "language_info": { "codemirror_mode": { @@ -305,7 +298,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.7" + "version": "3.7.9" } }, "nbformat": 4, diff --git a/docs/notebooks/usenix_results.ipynb b/docs/notebooks/usenix_results.ipynb deleted file mode 100644 index 32f3f8f..0000000 --- a/docs/notebooks/usenix_results.ipynb +++ /dev/null @@ -1,857 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "import numpy as np\n", - "import pandas as pd\n", - "import matplotlib.pyplot as plt\n", - "import pickle\n", - "import torch\n", - "import matplotlib\n", - "import matplotlib.pyplot as plt\n", - "from sklearn.manifold import TSNE" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Figure 1" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## RotMNIST" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "x=['ERM', 'Rand', 'MatchDG', 'CSD', 'IRM', 'Perf']\n", - "\n", - "acc_train=[99.9, 100.0, 99.9, 99.9, 100.0, 99.9]\n", - "acc_train_err=[0.02, 0.01, 0.01, 0.01, 0.00, 0.01]\n", - "\n", - "acc_test=[93.8, 95.9, 96.4, 95.1, 94.3, 97.3]\n", - "acc_test_err=[0.57, 0.08, 0.16, 0.55, 0.25, 0.01]\n", - "\n", - "mia=[67.7, 77.0, 72.3, 64.9, 69.7, 59.6]\n", - "mia_err=[0.40, 0.24, 0.53, 0.92, 0.48, 0.52]\n", - "\n", - "entropy=[63.9, 78.1, 65.2, 65.0, 65.9, 57.6]\n", - "entropy_err=[1.98, 0.40, 0.73, 1.34, 1.41, 0.29]\n", - "\n", - "loss=[66.4, 77.1, 68.8, 67.5, 67.8, 60.2]\n", - "loss_err=[1.74, 0.87, 1.37, 1.06, 1.09, 0.06]\n", - "\n", - "rank=[71.2, 85.1, 74.9, 70.4, 71.8, 18.2]\n", - "rank_err=[1.73, 0.56, 1.07, 2.01, 2.02, 0.85 ]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "for idx in range(3):\n", - " \n", - " matplotlib.rcParams.update({'errorbar.capsize': 2})\n", - " fig, ax = plt.subplots(1, 1, figsize=(10, 8))\n", - " fontsize=30\n", - " fontsize_lgd= fontsize/1.2\n", - " ax.tick_params(labelsize=fontsize)\n", - " ax.set_xticklabels(x, rotation=25)\n", - " \n", - " if idx == 0:\n", - " ax.errorbar(x, acc_train, yerr=acc_train_err, label='Train Accuracy', fmt='o--')\n", - " ax.errorbar(x, acc_test, yerr=acc_test_err, label='Test Accuracy', fmt='o--')\n", - "# ax.set_xlabel('Models', fontsize=fontsize)\n", - " ax.set_ylabel('OOD Accuracy of ML Model', fontsize=fontsize)\n", - " ax.legend(fontsize=fontsize_lgd)\n", - " \n", - " if idx == 1:\n", - " ax.errorbar(x, mia, yerr=mia_err, label='Classifier Attack', color='blue', fmt='o--') \n", - " ax.errorbar(x, entropy, yerr=entropy_err, label='Entropy Attack', color='red', fmt='o--')\n", - " ax.errorbar(x, loss, yerr=loss_err, label='Loss Attack', color='orange', fmt='o--')\n", - " ax.set_ylabel('MI Attack Accuracy', fontsize=fontsize)\n", - " ax.legend(fontsize=fontsize_lgd)\n", - "\n", - " if idx == 2:\n", - " ax.errorbar(x, rank, yerr=rank_err, fmt='o--', color='brown')\n", - "# ax.set_xlabel('Models', fontsize=fontsize)\n", - " ax.set_ylabel('Mean Rank of Perfect Match', fontsize=fontsize)\n", - "\n", - " plt.tight_layout()\n", - " plt.savefig('../../results/plots/privacy_rot_mnist_' + str(idx) + '.pdf', dpi=600)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Fashion MNIST" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "x=['ERM', 'Rand', 'MatchDG', 'CSD', 'IRM', 'Perf']\n", - "\n", - "acc_train=[99.1, 99.2, 99.4, 96.9, 99.3, 99.2]\n", - "acc_train_err=[0.05, 0.10, 0.15, 0.08, 0.03, 0.07]\n", - "\n", - "acc_test=[78.3, 79.9, 82.5, 81.4, 78.9, 85.6]\n", - "acc_test_err=[0.77, 0.51, 0.21, 0.59, 0.33, 0.90]\n", - "\n", - "mia=[72.3, 71.6, 71.0, 71.8, 72.9, 74.4]\n", - "mia_err=[0.20, 1.05, 0.16, 0.46, 0.41, 0.67]\n", - "\n", - "entropy=[56.4, 56.1, 54.6, 54.6, 56.4, 53.7]\n", - "entropy_err=[0.45, 0.28, 0.34, 0.43, 0.10, 0.51]\n", - "\n", - "loss= [61.3, 62.8, 60.6, 59.8, 61.0, 60.8 ]\n", - "loss_err= [0.78, 1.54, 0.27, 0.07, 0.22, 0.24 ]\n", - "\n", - "rank=[281.3, 348.9, 294.0, 272.8, 305.7, 202.0]\n", - "rank_err=[4.07, 11.51, 9.11, 3.42, 4.10, 15.6 ]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "for idx in range(3):\n", - " \n", - " matplotlib.rcParams.update({'errorbar.capsize': 2})\n", - " fig, ax = plt.subplots(1, 1, figsize=(10, 8))\n", - " fontsize=30\n", - " fontsize_lgd= fontsize/1.2\n", - " ax.tick_params(labelsize=fontsize)\n", - " ax.set_xticklabels(x, rotation=25)\n", - " \n", - " if idx == 0:\n", - " ax.errorbar(x, acc_train, yerr=acc_train_err, label='Train Accuracy', fmt='o--')\n", - " ax.errorbar(x, acc_test, yerr=acc_test_err, label='Test Accuracy', fmt='o--')\n", - "# ax.set_xlabel('Models', fontsize=fontsize)\n", - " ax.set_ylabel('OOD Accuracy of ML Model', fontsize=fontsize)\n", - " ax.legend(fontsize=fontsize_lgd)\n", - " \n", - " if idx == 1:\n", - " ax.errorbar(x, mia, yerr=mia_err, label='Classifier Attack', color='blue', fmt='o--') \n", - " ax.errorbar(x, entropy, yerr=entropy_err, label='Entropy Attack', color='red', fmt='o--')\n", - " ax.errorbar(x, loss, yerr=loss_err, label='Loss Attack', color='orange', fmt='o--')\n", - " ax.set_ylabel('MI Attack Accuracy', fontsize=fontsize)\n", - " ax.legend(fontsize=fontsize_lgd)\n", - "\n", - " if idx == 2:\n", - " ax.errorbar(x, rank, yerr=rank_err, fmt='o--', color='brown')\n", - "# ax.set_xlabel('Models', fontsize=fontsize)\n", - " ax.set_ylabel('Mean Rank of Perfect Match', fontsize=fontsize)\n", - "\n", - " plt.tight_layout()\n", - " plt.savefig('../../results/plots/privacy_fashion_mnist_' + str(idx) + '.pdf', dpi=600)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## ChestXRay" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "x=['ERM', 'Rand', 'MatchDG', 'CSD', 'IRM', 'Hybrid']\n", - "\n", - "acc_train=[83.4, 82.1, 80.5, 81.5, 83.6, 80.1]\n", - "acc_train_err=[1.39, 0.81, 0.67, 1.09, 1.08, 0.76]\n", - "\n", - "acc_test=[55.2, 57.4, 58.4, 60.5, 55.6, 62.6]\n", - "acc_test_err=[1.89, 1.01, 0.36, 0.47, 2.33, 0.83]\n", - "\n", - "mia=[75.9, 72.6, 65.3, 73.9, 75.6, 62.4]\n", - "mia_err=[0.05, 0.09, 0.04, 0.14, 0.10, 0.08]\n", - "\n", - "entropy=[76.5, 56.8, 53.3, 68.6, 75.7, 51.3]\n", - "entropy_err=[1.37, 2.81, 1.42, 1.26, 0.32, 1.04]\n", - "\n", - "loss=[78.1, 56.5, 53.1, 69.7, 77.7, 52.0]\n", - "loss_err=[1.41, 1.82, 1.42, 1.80, 0.54, 1.10]\n", - "\n", - "rank=[455.1, 447.4, 445.3, 449.9, 456.2, 440.8]\n", - "rank_err=[1.54, 2.05, 1.38, 0.30, 2.02, 1.51]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "for idx in range(3):\n", - " \n", - " matplotlib.rcParams.update({'errorbar.capsize': 2})\n", - " fig, ax = plt.subplots(1, 1, figsize=(10, 8))\n", - " fontsize=30\n", - " fontsize_lgd= fontsize/1.2\n", - " ax.tick_params(labelsize=fontsize)\n", - " ax.set_xticklabels(x, rotation=25)\n", - " \n", - " if idx == 0:\n", - " ax.errorbar(x, acc_train, yerr=acc_train_err, label='Train Accuracy', fmt='o--')\n", - " ax.errorbar(x, acc_test, yerr=acc_test_err, label='Test Accuracy', fmt='o--')\n", - "# ax.set_xlabel('Models', fontsize=fontsize)\n", - " ax.set_ylabel('OOD Accuracy of ML Model', fontsize=fontsize)\n", - " ax.legend(fontsize=fontsize_lgd)\n", - " \n", - " if idx == 1:\n", - " ax.errorbar(x, mia, yerr=mia_err, label='Classifier Attack', color='blue', fmt='o--') \n", - " ax.errorbar(x, entropy, yerr=entropy_err, label='Entropy Attack', color='red', fmt='o--')\n", - " ax.errorbar(x, loss, yerr=loss_err, label='Loss Attack', color='orange', fmt='o--')\n", - " ax.set_ylabel('MI Attack Accuracy', fontsize=fontsize)\n", - " ax.legend(fontsize=fontsize_lgd)\n", - "\n", - " if idx == 2:\n", - " ax.errorbar(x, rank, yerr=rank_err, fmt='o--', color='brown')\n", - "# ax.set_xlabel('Models', fontsize=fontsize)\n", - " ax.set_ylabel('Mean Rank of Perfect Match', fontsize=fontsize)\n", - "\n", - " plt.tight_layout()\n", - " plt.savefig('../../results/plots/privacy_chestxray_' + str(idx) + '.pdf', dpi=600)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Table 2" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## RotMNIST" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "x=['ERM', 'Rand', 'MatchDG', 'CSD', 'IRM', 'Perf']\n", - "att=[27.6, 20.4, 19.3, 25.0, 26.6, 16.6]\n", - "att_err=[0.84, 0.46, 0.62, 0.40, 0.71, 0.55]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Fashion MNIST" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "x=['ERM', 'Rand', 'MatchDG', 'CSD', 'IRM', 'Perf']\n", - "att=[]\n", - "att_err=[]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## ChestXRay" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "x=['ERM', 'Rand', 'MatchDG', 'CSD', 'IRM', 'Hybrid']\n", - "att=[61.8, 58.4, 57.9, 67.8, 63.4, 57.1]\n", - "att_err=[1.02, 0.58, 0.70, 3.05, 2.28, 0.21]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Table 3" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "train_acc=[100.0, 99.9, 100.0, 100.0, 99.7, 97.7]\n", - "train_acc_err=[0.0, 0.02, 0.01, 0.0, 0.09, 0.34]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Test Domain 70 percent" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "x=['ERM', 'Rand', 'MatchDG', 'CSD', 'IRM', 'Perf']\n", - "acc=[96.5, 96.8, 97.5, 97.2, 95.9, 96.4]\n", - "acc_err=[0.13, 0.18, 0.09, 0.02, 0.21, 0.30]\n", - "\n", - "att=[98.5, 83.0, 99.7, 95.4, 99.3, 70.2]\n", - "att_err=[0.35, 1.96, 0.09, 0.15, 0.10, 0.09]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Test Domain 70 percent: Color Flip" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "x=['ERM', 'Rand', 'MatchDG', 'CSD', 'IRM', 'Perf']\n", - "acc=[28.4, 37.6, 28.8, 42.9, 31.9, 94.9]\n", - "acc_err=[0.76, 3.93, 1.27, 3.46, 0.38, 0.46]\n", - "\n", - "att=[87.7, 63.5, 95.5, 82.5, 96.3, 70.2]\n", - "att_err=[2.50, 5.65, 2.13, 0.99, 0.43, 0.08]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Test Domain 0 percent" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "x=['ERM', 'Rand', 'MatchDG', 'CSD', 'IRM', 'Perf']\n", - "acc=[88.8, 91.5, 92.1, 91.1, 89.1, 95.5]\n", - "acc_err=[0.27, 0.72, 0.46, 0.02, 0.83, 0.36]\n", - "\n", - "att=[]\n", - "att_err=[]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# DP ERM: Rotated MNIST" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "x=['2', '5', '10', '50', '100', '500']\n", - "dp_erm= [26.9, 33.5, 45.6, 59.6, 63.8, 73.4]\n", - "dp_erm_std= [1.30, 3.81, 1.15, 2.22, 3.49, 0.29]\n", - "dp_perf= [22.7, 32.2, 39.5, 58.7, 66.5, 81.4]\n", - "dp_perf_std= [2.55, 2.89, 2.15, 2.28, 1.86, 1.17]\n", - "\n", - "plt.xlabel('Epsilon')\n", - "plt.ylabel('OOD Accuracy')\n", - "plt.title('Training with differentially noise')\n", - "plt.errorbar(x, dp_erm, yerr=dp_erm_std, label='DP-ERM')\n", - "plt.errorbar(x, dp_perf, yerr=dp_perf_std, label='DP-Perf')\n", - "plt.legend()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## DP Analysis: ERM vs Perf 50th Epoch Acc" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "f1= '../../erm_dp.txt'\n", - "f2= '../../perf_dp.txt'\n", - "\n", - "f= open(f1)\n", - "erm_data= f.readlines()\n", - "\n", - "f= open(f2)\n", - "perf_data= f.readlines()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "flag=0\n", - "for line in erm_data:\n", - " \n", - " if flag==2:\n", - " print(line)\n", - " flag=0\n", - " \n", - " if flag==1:\n", - " print(line)\n", - " flag+= 1 \n", - " \n", - " if 'Done Training for epoch: 45' in line:\n", - " print(line)\n", - " flag+=1" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "flag=0\n", - "for line in perf_data:\n", - " \n", - " if flag==2:\n", - " print(line)\n", - " flag=0\n", - " \n", - " if flag==1:\n", - " print(line)\n", - " flag+= 1 \n", - " \n", - " if 'Done Training for epoch: 45' in line:\n", - " print(line)\n", - " flag+=1" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Attribute Attack" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/home/t-dimaha/RobustDG/robustdg/matchdg-env/lib/python3.7/site-packages/ipykernel_launcher.py:9: UserWarning: FixedFormatter should only be used together with FixedLocator\n", - " if __name__ == '__main__':\n", - "/home/t-dimaha/RobustDG/robustdg/matchdg-env/lib/python3.7/site-packages/ipykernel_launcher.py:20: UserWarning: marker is redundantly defined by the 'marker' keyword argument and the fmt string \"o--\" (-> marker='o'). The keyword argument will take precedence.\n", - "/home/t-dimaha/RobustDG/robustdg/matchdg-env/lib/python3.7/site-packages/ipykernel_launcher.py:21: UserWarning: marker is redundantly defined by the 'marker' keyword argument and the fmt string \"o--\" (-> marker='o'). The keyword argument will take precedence.\n", - "/home/t-dimaha/RobustDG/robustdg/matchdg-env/lib/python3.7/site-packages/ipykernel_launcher.py:22: UserWarning: marker is redundantly defined by the 'marker' keyword argument and the fmt string \"o--\" (-> marker='o'). The keyword argument will take precedence.\n" - ] - }, - { - "data": { - "image/png": "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tWPEk6+++orWrY1lAh0OB3v27GHu3LlMnTqViooKHn30Udq0acOECRPirKkgCIIgCEHRWsurHryOOeYYHQlr1qyJqF7UObJL64eba/1gpvfr4eZaH9kdbw2rzTPPPKMxQmd1+/bt9YoVK/zKTpkyRSulNKAbNWqkt27d6lOuvLxcDx48uLLdK6+8UhcUFPiUPXDggB42bFil7IUXXuj3+C6ZIUOGBPxOO3bs0Oecc06lfOfOnXVeXl7AOqGybt26ynanTp2qExMTNaCfeOKJqLQfL66++urK7/Xnn3/6lJkzZ06lTLNmzXRFRUXNKlmH6dChgwb0/7d33mFSFFsffmsDOUdBRImioIIiCgYwoiIgoBgwe81+ctXrDXqv6Zr1mnMWTGAARREDiIoZFAUElSigCEgOC+xufX9U907P7Mzs7Ozszu7s732efmamu6r6bHdvdZ06p84566yz0i2KtbYS9bFCCCGSBphuExiPKyajqBx8fKezTkXDt1pVYRYtWsQ//vEPAOrXr8/kyZPZa6+9Ypa/7LLLuO222wBYu3YtF1xwQdRyd911F19//TUAAwYM4Pnnn6du3bpRyzZp0oRx48ax7777AvD6668zZsyYpP8mgNatW/PWW28xZMgQAObPn891111XpjZ9fGtVvXr1OPvssznuuOPC9mcyAwcO5JBDXC6SVatW8e2336ZZIiGEEJWClXNdREBRKZFiJdLPxhUuF0PB9ujHC7a74xv/qFi5Usj9999PXp5L4nf99dfTsWPHEuv87W9/K1pfNWnSJL7//vuw49u2bStyK6xVqxaPPfYYWSXkr6hduzaPP/540e877ii7wpqVlcVTTz1VtL7q6aefZtWqVWVq01rLCy+8AMAJJ5xAnTp1GDHCZZOfNWtWsWsRi7y8PB5++GH69+9P69atqVGjBvXr16d79+5cdtllTJs2LWbdgoICRo0axQknnECbNm2oVasWdevWZc899+S8887j3XffTSrASKL06tWr6PuSJUuKHV+xYgXXXnstPXv2pEmTJtSsWZNddtmF4cOH8+GHH8Zsd/HixUUBM/w1SK+99hrHHHMMrVq1Ijs7mxNOOAGAqVOnFpWdOnUqhYWFPPnkk/Tp04cmTZrQqFEjDj74YMaPHx92jvXr13Prrbey9957U79+fRo3bsyAAQOKJgGiccMNNxSdKx7PPfdcUbnFixcX7feDgvjX6vnnny8WICSWS22y11IIISqccRe69eivnQcLpkBhQbolEkESMWtpq/xblXYFnHCFtTc1i+4G6G83NXPlqiCFhYW2SZMmFrC1a9e269evT7ju448/XuQS9te//jXs2Pjx44uOnXbaaaWSqXfv3kV1Z86cWew4CboCBrnooouK6r3wwgulkieSqVOnFrU1adIka621eXl5tmHDhhawV155ZYltfPPNN3aXXXYpaifWFo358+fbbt26lVg3litfPBJxBbTW2n/+859F5V555ZWwYy+88IKtW7duXNnOO+88u2PHjmLtLlq0qKjMM888Y0eMGFGs7uDBg6211n700UdF+95///0wt8/I7fbbb7fWWrt48WLbpUuXqGVyc3Pt+++/H/Xvvf766+PeE59nn3026vULXtdYW7TnuSzXMhEqRR8rhMgMfp8VMT5qaO26pemWqlqAXAFFlaAka5VPFbZazZ49mzVr1gBw6KGH0qBBg4TrDho0qOh7pHXlk08+Kfo+cODAUskUr91kOfLII4u+f/rpp2Vqy3f3a9myZVG7NWvWZNiwYQC89NJLFBTEnqWbM2cO/fr1Y+nSpRhjOPnkk3nttdeYPn06n3/+OU8//TTDhg2jRo0axequWLGCgw8+mNmzZwPQv39/XnzxRb7++mu++uorRo8ezZlnnhnT5TJVzJo1q+i7H+ACYOzYsZxxxhls3ryZDh06cO+99zJp0iRmzJjBa6+9xrHHHgs4y+Hf//73uOe49957efHFFznssMMYM2YM06dP5/333y+6zkH+/e9/M3HiRM4880zeffddZsyYwXPPPUebNm0AuOaaa/jhhx8YOnQoS5cu5d///jeffPIJX3/9Nbfccgu1atVix44dnHfeeWzbti0VlyiMW265hVmzZhVdq8GDBzNr1qywLRiIBVJ7LYUQotyZ+VL47w6HQcM26ZFFRCcR7Utb5d+qrMUqEWtVFbdavfDCC0Uz3//6179KXX+nnXaygK1Ro0bY/iOPPLKo3Z9++qlUbU6aNKmo7vnnn1/sOHFm+GOxYMGConqHH354qeQJsnXr1iLL1OWXXx52bPLkycUsWZEUFhba7t27W8BmZ2fbN954I+a5li4tPtM3ePDgonM88MADMeuuXr3abtmyJcG/KkQiFquZM2fa7OxsC9g6derYrVu3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Skwq11b5VqsqwMiRI6lZsyYAN9xwAwsXLiyhBtxzzz1F7nXHHHNMMZe9mjVrFkWu27p1K5dccgmFhfGvbV5eHhdeeGHR73/84x+l+TOiYq3lvPPOKwpecf7555d63Za1lhdfdC+PAw44gHPOOYdTTjkl7uavrZo9e3aYG2IwWXKiocR9BgwYUDQwv//++0tVtyLwEzvPnj2byZMnp1ma1BJ0iYxludyxY0fUgCVB/ND0JSUhzuRrKYTIEPK3waxXw/f1UNCKykyyis1g4BicC1tpp3W/wa1ZGgAcn+T5y5OhhNZUfQNcW8b2Lgl8v8tauzJaIU+5ei5GvcwgVdYqnypktWrfvj2333474MKbH3HEEcyZMydm+UcffbRI6WnUqBFPPPFE1HJXX311Uc6gt956i3PPPTfmAvu1a9cydOjQokHrsGHDSuU+GI3ffvuNgQMHMn78eMCtGbrhhhtK3c7UqVNZunQpQML5jYLlglaro446qsjy9L///a9ItmgsWxbucbv77rszePBgAMaOHcuDDz4Ys+6aNWvYunVrQrKmipEjRxaFRz/rrLOYOzf+csx33nmHH374oSJEKzMHHXRQ0Zqve++9tyjsfZCrr7662D2LxA9asmDBgrjlMvlaCiEyhJ8mQt660O/aTaBzZs67ZwrJLiA4zvvMA+JPHxbndVxAiJo4xeqtJGUoLy4MfL/b2uTNK8aYzrh1WD4lZa19PnD+I40x9ay1xRP1VFXKIxJgFVprNXLkSObPn8/DDz/M4sWL6dGjByNGjGDgwIG0bduWvLw85syZw6hRo4pc9Ro0aMC4cePYZZddoraZm5vLG2+8wdFHH828efN4/vnnmTp1Kueddx59+vShcePGrF69mqlTp/L000+zcqXT6w855JCEXBI3b97M7Nmzi35v27aNtWvXMm/ePD755BPefPNNtm93inKnTp14++23SxVpzsd3AwSn8CVC27Zt6dmzJ9OnT+ell17izjvvLBqYjx49mgMOOIDNmzczdOhQTj75ZE466SR22203tm/fzk8//cTEiRMZP358McvGo48+ypdffsmKFSu4/PLLmThxImeeeSadOnXCWsuCBQv44IMPGDt2LLNmzUo4+EQqaNmyJc8//zwnnngiy5cvZ7/99uOcc87hmGOOYeedd2bHjh0sW7aMr776itdff52FCxcyYcKElLh7ljctWrRg2LBhjB07lnfffZehQ4dyySWX0LRpUxYuXMgTTzzBBx98QJ8+fYr+P6LRp08fPvroI7755htuv/12jj322KIca7Vr1y4KdJLJ11IIkSHs2Ar1doJNXkThvU6CHAXRqdRYa0u9Ad8DBcC0JOtPAwqB75KpX14bsJMnl8UFmKhVxvYu9NqywLwEyucAmwJ1jkr0XPvtt59Nhh9//DGpeqVmw+/W/reFtdc3SP323xbWblhRMX9HCnjwwQdto0aNbOA+R9169uxpZ86cmVCbq1evtsOHDy+xzezsbHvJJZfYrVu3xm2vpHaCW7169ezll19uN23alNT12LJli61fv74FbPfu3UtV97bbbiuSY9KkSWHHvvrqK9u6desS5Y/GL7/8YvfYY48S6y5atKjUf+9ZZ51VpvrWWvvWW2/ZJk2alChfVlaWnTJlSljdRYsWFR1/9tln457no48+Kir70UcfxSx3/fXXx72ePn379rWA7du3b9Tjv/32m23fvn3Mv+eqq66yzz77bNzrt2zZspjXJtp5y3ItE6HC+lghRGaSv8Pan96zdswZ1v72fbqlqbYA020C4/FkXQF38z7nJ1nfr7drkvXLiwMBf+Xzj9baPGNMPWPMFcaYL40xfxpjthhjFhtjxhhjhpTQ3h6B79+WdHJrbT4wK0b9qk155q2qQmutAC677DLmz5/Pfffdx1FHHUWbNm2oWbMmDRo0oHPnzpx11lmMHz+er7/+OuFQ6E2bNmXMmDF88803XHnllXTv3p1mzZqRm5tLixYt2H///bn22muZPXs2Dz/8cNE6lNJgjKFevXrsvPPO9OzZkwsvvJDnnnuO3377jfvvv7/IKlBaxo8fX5QwNlE3QJ+gdSto9QLo1asXv/zyC/fccw99+/Ytyk1Vv359unfvzuWXXx4zQEXHjh354YcfeOqpp+jfvz8tW7YkJyeHunXr0rVrV84//3wmT55codaqIAMHDmTRokXcfffdHH744bRo0YLc3Fxq165Nu3btOP7447nnnntYvHgxhx12WFpkTIZWrVrx9ddfc9VVV9GhQwdq1KhBs2bNOProo5kwYQJ33313iW3svPPOfP3115x33nl06NChxGc9U6+lECJDyM6BzkfD8FHQShbzyo6xUfzYS6xkzHZciPEnrbUXJVH/MeACIN9aW2lsmsaYmwmt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OpTZs2fTsmXLYu3NmTOHfv36sXnzZowxDB8+nJNOOonddtuN7du3M3fuXCZOnMiECRNKdc3+/ve/c9dddwFw/vnn89hjjxVdNyGEECIms1+HgkDct8btoG3v9MkjUk5SihXQD7CB3/73LKCdt5WEiWhDZCgje4zkpzU/sWbrGrYVbotZbkdh9JRosfb71MyuSdNaTRnZY2SZ5KwIvvjiC+bPnw84t7sgp512Gv/973+ZMGEC69evL1K6ypPx48ezcePGYvLUqVOHIUOGMHr0aF566SVuv/32YspDt27dWL16ddHvdu3a0a1bt6jn6datGy1atAj7HY+//OUv3HDDDeTkhHdR++23H0OGDOHiiy+md+/erF69mgcffJCbb745rJy1ltNPP53NmzeTnZ3Nq6++ypAhQ8LK9O7dm3PPPZdly5bFlcWnsLCQiy66iCeffBKAq6++OqrCKYQQQkRl5ovhv7uPAKUgySiSVazAKUal2S+qOIlYjaKxR5M9GD94PNd9fh0fL/2YvIK8kislSK2cWvRr048b+9xIndw6ANzw+Q28/svrpWpn1lkVky/Ld7tr1KgRxx13XNixESNG8N///pe8vDxeffVV/vKXv1SYPHvssQc9evQoJs/o0aNZvnw5U6ZM4cgjjyx3eXx22223uMe7du3K+eefzz333MP48eOLKVbvv/8+M2fOBOCqq64qplQFadOmTYny7NixgzPOOIMxY8YAcPPNN3PttdeWWE8IIYQA4I8f4bfvAjsMdD81beKI8iFZxeqwkosIEaJObh3u7ns3434Zx61f3cq2gm3YMhosa2XX4ppe1zCkU+xBc2Vi+/btjB07FoATTzyRmjVrhh3ffffd2W+//ZgxYwajR48ud8VqxYoVfPDBB0Bx6xnAkUceScuWLfnjjz8YPXp0hSpWkaxfv54///yTrVu3Yq17bho0aAC4HFzbt2+nRo0aReX9HGEAI0eWzZK5detWhg0bxrvvvosxhgcffJBLL720TG0KIYSoZkRaq9r3g4YlT+yJqkVSipW19uNUCyKqB0M6DWGvZntxyeRLSnQNLImXB7xMx8YdUyhd+fLOO++wZs0aILoi4++fMWMGn376KUuWLGHXXXctN3lefvllCgoKAOeGGEl2djYnn3wyDzzwAG+88QaPPvooderUKTd5Ilm4cCF33303EyZMiOuuV1hYyLp168JcDX1rVfv27WndunXSMmzcuJH+/fvz6aefkpOTw7PPPlsU2EMIIYRIiIId8MOY8H3dFbQiE9GKa1HhdGzckfGDx9N3l76YMniOViWlCkJud23atOHQQw+NWuaUU04hOzsba21RkIvylqdPnz60axd9WaSvAG7atIlx48aVqzxB3nnnHbp27cqjjz6a0BqoyFDn/tqvVq1alUmOb7/9tijy4MiRI6VUCSGEKD2/fACbV4V+12wIexyfPnlEuVGWNVaimpHKdUh1cuvwv37/46W5L3HPjHvYVlCy5apmdk2u3O9KTtujuHUlyA19buCGPjekSNLUsGbNGiZOdOHkly1bRnZ2dol1Ro8eXW7reGbPnl1k1fn8888xCSyeHTVqVExLWypZvXo1I0aMIC8vj/r163P11VfTv39/2rdvT4MGDYpc/p555hnOO+88gCL3wFTTtWtXduzYwc8//8wDDzzAoYceyqBBg8rlXEIIITKUSDfAbkMhVyk6MpGkLFbGmEJjTIEx5oEk69/l1a/YTKii0lG/Rn2yTclKBkC2yaZ+jfrlLFH5MGbMGLZv315ywQA//fQTX3/9dbnIEy/xbywmT57M77//Xg7ShPPaa6+xfv16AMaNG8d//vMfevXqRbNmzcLWUa1duzZmG82aNQMos7zNmjVjypQpdOjQgR07dnDSSSdVeJ4xIYQQVZhNq+DnSeH75AaYsaTTYqXogYI3fnmDLflbEiq7JX8L4+aPY2CHisnxlEp8t7t27dpx6623xi1rreXcc88lLy+P0aNH06tXr5TKUlhYyIsvutmzXr16ccUVV8Qtv2HDBi688EIKCgp46aWXuOqqq4qOJWLpKm3ZOXPmANCkSROOOCJ2mrvp06fHPNajRw+mTZvGwoULWb58eViOrNKy8847M2XKFPr27cvixYsZOnQob731FkcddVTSbQohhKgmzHoVCgN2hGadoU3P9MkjyhW5Aoq0sXH7Rn5Y9UOp6ny/8ns2bt9YpSxX8+fP58svvwTg5JNP5pRTTimxzpgxY3jzzTd55ZVXuOeee8jNjZ48ORmmTJnC8uXLATj33HMTkueRRx7h+++/Z/To0WGKVa1atYq+b9sW350zsmxkVESfHTtc3rK8vDwKCwujJt/9448/ePPNN2Oea+DAgTz4oEsW/cADD3DHHXfEla0k2rZtW6RcLV26lMGDBzNx4kT69etXpnaFEEJkOB0OgwMugh/GwtY1yl2V4aQreIU/Soyf+VVkNFOXTiUnK75uXzMrfPCdk5XD1KVTy02m8iDodjd06NCE6vjlVq9ezaRJk0oonZw8WVlZnHDCCaWS5/vvv2fWrNBau2BwiAULFsRtI9GynTp1AmDLli289tprxY7n5eVx+umnFwtYEeSoo44qysv1v//9j/Hjx8csm2iC4Hbt2jFlyhRat27N1q1bOf7445k2bVpCdYUQQlRTWuwBx94BV82D4aNgH+WuymTSpVj54dzWpen8ohIw7pdxYW6AtXJqFSvTr20/amWH9m/J38L4+eMrQryUEIzu17ZtW/bff/+E6g0aNKjISpXMeqhYbN68mTfeeAOAgw46iJYtWyZUb9iwYUXfg/K0bdu2KMHu3XffzVtvvcVPP/3E/PnzmT9/Phs3biwq26dPn6LvV1xxBZ988gm//PJLUdn8fOcqMXz48KK1VGeffTbXXnstH330Ed988w1PPvkk++67Lx9++GFYe9EYPXo0devWpaCggKFDh3Lqqafyxhtv8O233/Lll1/y/PPPc/LJJ9OhQ4eErgFAx44dmTJlCjvttBObN2/muOOOK7JGCiGEEDHJqQl7Dob6ib13RdWkQhUrY0y2MWYYcBRggbkVeX5Redi4fSMzV80EwGCKkv1Gcnffu7nmgGuolV2rKDT7dyu/Y+P2jcXKVkY+++wzFi5cCCRurQJo1KgRhx9+OAATJkwoCuZQVsaNG8emTZuAcGWpJLp27cruu+8OwEsvvURhYWHRsWuucfdt0aJFDB48mC5dutCpUyc6derE66+/XlSuY8eODB8+HID333+fvn370rlz56KyvuVol1124aGHHiIrK4utW7dy6623cvjhh9OrVy8uuOAC5s6dy8iRIzn//PNLlNm3MFlreeWVVxg2bBj77bcfvXv35uyzz2bs2LGlDiqy++67M3nyZJo3b87GjRs55phj4q73EkIIIUT1oETFyhizMHILHD4z2vEY21JgMzCWkCvgO+XwN4kqwNSlU8kxOdTMrkmruq14ecDLDOk0JGrZIZ2G8PKAl9mp7k7UzKpJjqk67oDJuAH6+IpPXl4eY8eOrTTyLF++nMmTJxftv/jii3n99dc56qijaN68OTk5sd07X3jhBe6880569epFw4YN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\n", - "text/plain": [ - "

" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "x=['ERM', 'Rand', 'MatchDG', 'CSD', 'IRM', 'Perf']\n", - "matplotlib.rcParams.update({'errorbar.capsize': 2})\n", - "fig, ax = plt.subplots(1, 1, figsize=(12, 8))\n", - "fontsize=33\n", - "fontsize_lgd= fontsize/1.2\n", - "marker_list = ['o', '^', '*']\n", - "\n", - "ax.tick_params(labelsize=fontsize)\n", - "ax.set_xticklabels(x, rotation=25)\n", - "ax.set_title('Attribute Attack on Colored Rotated MNIST', fontsize= fontsize)\n", - "ax.set_ylabel('Metric Score', fontsize=fontsize)\n", - "\n", - "ood_p = [95.2, 96.8, 95.5, 96.6, 95.4, 95.7]\n", - "ood_p_err = [0.17, 0.06, 0.28, 0.48, 0.21, 0.19]\n", - "acc_p= [25.3, 28.9, 25.5, 42.9, 25.4, 93.4]\n", - "acc_p_err= [0.17, 1.81, 0.28, 2.30, 0.21, 0.35]\n", - "mi= [97.7 , 83.0, 95.3, 92.4, 97.9, 69.9]\n", - "mi_err= [0.41, 3.09, 3.80, 1.30, 0.30, 0.03]\n", - "\n", - "ax.errorbar(x, ood_p, yerr=ood_p_err, marker= marker_list[0], markersize= fontsize_lgd, linewidth=4, fmt='o--', label='OOD Acc')\n", - "ax.errorbar(x, acc_p, yerr=acc_p_err, marker= marker_list[1], markersize= fontsize_lgd, linewidth=4, fmt='o--', label='OOD Acc Permute')\n", - "ax.errorbar(x, mi, yerr=mi_err, marker= marker_list[2], markersize= fontsize_lgd, linewidth=4, fmt='o--', label='AI Attack')\n", - "ax.legend(fontsize= fontsize_lgd)\n", - "\n", - "plt.tight_layout()\n", - "plt.savefig('../../results/ai_attack_cmnist.pdf', dpi=600)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# DP Analysis Rotated MNIST" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "x=['1.0', '2.0', '5.0', '10.0', 'ꝏ']\n", - "matplotlib.rcParams.update({'errorbar.capsize': 2})\n", - "fig, ax = plt.subplots(1, 2, figsize=(24, 8))\n", - "fontsize=40\n", - "fontsize_lgd= fontsize/1.2\n", - "marker_list = ['o', '^']\n", - "\n", - "#OOD Accuracy\n", - "ax[0].tick_params(labelsize=fontsize)\n", - "ax[0].set_xticklabels(x, rotation=25)\n", - "ax[0].set_ylabel('OOD Accuracy', fontsize=fontsize)\n", - "ax[0].set_xlabel('ε', fontsize=fontsize)\n", - "ax[0].set(ylim=(30, 100))\n", - "\n", - "erm_acc= [33.7, 38.4, 40.3, 41.2, 90.9]\n", - "erm_std= [1.15, 2.45, 2.38, 2.73, 0.24]\n", - "perf_acc= [36.6, 44.1, 48.7, 50.4, 95.5]\n", - "perf_std= [0.69, 1.236, 3.75, 2.78, 0.26]\n", - "\n", - "ax[0].errorbar(x, erm_acc, yerr=erm_std, marker= marker_list[0], markersize= fontsize_lgd, linewidth=4, fmt='o--', label='ERM')\n", - "ax[0].errorbar(x, perf_acc, yerr=perf_std, marker= marker_list[1], markersize= fontsize_lgd, linewidth=4, fmt='o--', label='Perf Match')\n", - "\n", - "#MI Attack\n", - "ax[1].tick_params(labelsize=fontsize)\n", - "ax[1].set_xticklabels(x, rotation=25)\n", - "ax[1].set_ylabel('MI Attack Accuracy', fontsize=fontsize)\n", - "ax[1].set_xlabel('DP-Epsilon', fontsize=fontsize)\n", - "ax[1].set(ylim=(50, 100))\n", - "\n", - "erm_acc= [60.5, 65.4, 66.2, 67.1, 71.9]\n", - "erm_std= [0.92, 1.03, 0.81, 0.41, 0.29]\n", - "perf_acc= [60.2, 63.8, 65.3, 65.4, 64.9]\n", - "perf_std= [1.07, 0.42, 0.38, 0.50, 0.72]\n", - "\n", - "ax[1].errorbar(x, erm_acc, yerr=erm_std, marker= marker_list[0], markersize= fontsize_lgd, linewidth=4, fmt='o--', label='ERM')\n", - "ax[1].errorbar(x, perf_acc, yerr=perf_std, marker= marker_list[1], markersize= fontsize_lgd, linewidth=4, fmt='o--', label='Perf Match')\n", - "\n", - "\n", - "lines, labels = fig.axes[-1].get_legend_handles_labels() \n", - "lgd= fig.legend(lines, labels, loc=\"lower center\", bbox_to_anchor=(0.5, -0.15), fontsize=fontsize, ncol=3)\n", - " \n", - "plt.tight_layout()\n", - "plt.savefig('../../results/dp_rmnist.pdf', bbox_extra_artists=(lgd,), bbox_inches='tight', dpi=600)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# DP Analysis Fashion MNIST" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "x=['1.0', '2.0', '5.0', '10.0', 'ꝏ']\n", - "matplotlib.rcParams.update({'errorbar.capsize': 2})\n", - "fig, ax = plt.subplots(1, 2, figsize=(24, 8))\n", - "fontsize=40\n", - "fontsize_lgd= fontsize/1.2\n", - "marker_list = ['o', '^']\n", - "\n", - "#OOD Accuracy\n", - "ax[0].tick_params(labelsize=fontsize)\n", - "ax[0].set_xticklabels(x, rotation=25)\n", - "ax[0].set_ylabel('OOD Accuracy', fontsize=fontsize)\n", - "ax[0].set_xlabel('ε', fontsize=fontsize)\n", - "ax[0].set(ylim=(40, 100))\n", - "\n", - "erm_acc= [46.6, 46.7, 46.3, 45.6, 57.6]\n", - "erm_std= [1.70, 2.03, 1.99, 2.19, 1.53]\n", - "perf_acc= [48.9, 50.9, 53.5, 54.1, 67.6]\n", - "perf_std= [1.19, 1.01, 0.95, 0.89, 1.63]\n", - "\n", - "ax[0].errorbar(x, erm_acc, yerr=erm_std, marker= marker_list[0], markersize= fontsize_lgd, linewidth=4, fmt='o--', label='ERM')\n", - "ax[0].errorbar(x, perf_acc, yerr=perf_std, marker= marker_list[1], markersize= fontsize_lgd, linewidth=4, fmt='o--', label='Perf Match')\n", - "\n", - "#MI Attack\n", - "ax[1].tick_params(labelsize=fontsize)\n", - "ax[1].set_xticklabels(x, rotation=25)\n", - "ax[1].set_ylabel('MI Attack Accuracy', fontsize=fontsize)\n", - "ax[1].set_xlabel('ε', fontsize=fontsize)\n", - "ax[1].set(ylim=(50, 100))\n", - "\n", - "erm_acc= [62.9, 63.9, 65.6, 64.9, 80.5]\n", - "erm_std= [0.75, 0.68, 0.44, 0.51, 0.31]\n", - "perf_acc= [60.7, 62.7, 62.6, 62.6, 71.0]\n", - "perf_std= [0.13, 0.25, 0.18, 0.31, 0.60]\n", - "\n", - "ax[1].errorbar(x, erm_acc, yerr=erm_std, marker= marker_list[0], markersize= fontsize_lgd, linewidth=4, fmt='o--', label='ERM')\n", - "ax[1].errorbar(x, perf_acc, yerr=perf_std, marker= marker_list[1], markersize= fontsize_lgd, linewidth=4, fmt='o--', label='Perf Match')\n", - "\n", - "\n", - "lines, labels = fig.axes[-1].get_legend_handles_labels() \n", - "lgd= fig.legend(lines, labels, loc=\"lower center\", bbox_to_anchor=(0.5, -0.15), fontsize=fontsize, ncol=3)\n", - " \n", - "plt.tight_layout()\n", - "plt.savefig('../../results/dp_fmnist.pdf', bbox_extra_artists=(lgd,), bbox_inches='tight', dpi=600)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Counterexample for generalization gap and privacy risk" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "matplotlib.rcParams.update({'errorbar.capsize': 2})\n", - "fig, ax = plt.subplots(1, 2, figsize=(30, 8))\n", - "fontsize=40\n", - "fontsize_lgd= fontsize/1.2\n", - "marker_list = ['o', '^']\n", - "color_list= ['tab:blue', 'tab:red']\n", - "\n", - "#OOD Accuracy\n", - "ax[0].tick_params(labelsize=fontsize)\n", - "# ax[0].set_xticklabels(x, rotation=25)\n", - "ax[0].set_ylabel('Cross Entropy Loss: -log(p)', fontsize=fontsize)\n", - "ax[0].set_xlabel('Classification Proability: p', fontsize=fontsize)\n", - "ax[0].set_title('Method A', fontsize= fontsize)\n", - "\n", - "p_train= np.random.normal(0.85, 0.05, 100)\n", - "p_test= np.random.normal(0.75, 0.05, 70)\n", - "p_test_inc= np.random.normal(0.35, 0.05, 30)\n", - "\n", - "ax[0].scatter( p_train, -np.log(p_train), c= color_list[0], s=200*7, label='Train', alpha=0.3, edgecolors='none' )\n", - "ax[0].scatter( p_test, -np.log(p_test), c= color_list[1], s=200*5, label='Test', alpha=0.3, edgecolors='none' )\n", - "ax[0].scatter( p_test_inc, -np.log(p_test_inc), c=color_list[1], s=200*7, alpha=0.3, edgecolors='none' )\n", - "ax[0].axhline(-np.log(0.85), ls='--', color='tab:purple', label='Attack Threshold', linewidth=4)\n", - "ax[0].axvline(0.5, ls='--', color='tab:orange', label='Classification Threshold', linewidth=4)\n", - "# ax[0].legend(fontsize= fontsize)\n", - "\n", - "#MI Attack\n", - "ax[1].tick_params(labelsize=fontsize)\n", - "# ax[1].set_xticklabels(x, rotation=25)\n", - "ax[1].set_ylabel('Cross Entropy Loss: -log(p)', fontsize=fontsize)\n", - "ax[1].set_xlabel('Classification Proability: p', fontsize=fontsize)\n", - "ax[1].set_title('Method B', fontsize= fontsize)\n", - "\n", - "p_train= np.random.normal(0.85, 0.05, 100)\n", - "p_test= np.random.normal(0.60, 0.015, 90)\n", - "p_test_inc= np.random.normal(0.35, 0.05, 10)\n", - "\n", - "ax[1].scatter( p_train, -np.log(p_train), c= color_list[0], s=200*7, label='Train', alpha=0.3, edgecolors='none' )\n", - "ax[1].scatter( p_test, -np.log(p_test), c= color_list[1], s=200*6, label='Test', alpha=0.3, edgecolors='none' )\n", - "ax[1].scatter( p_test_inc, -np.log(p_test_inc), c=color_list[1], s=200*7, alpha=0.3, edgecolors='none' )\n", - "ax[1].axhline(-np.log(0.85), ls='--', color='tab:purple', label='Attack Threshold', linewidth=4)\n", - "ax[1].axvline(0.5, ls='--', color='tab:orange', label='Classification Threshold', linewidth=4)\n", - "# ax[1].legend(fontsize= fontsize)\n", - "\n", - "lines, labels = fig.axes[-1].get_legend_handles_labels() \n", - "lgd= fig.legend(lines, labels, loc=\"lower center\", bbox_to_anchor=(0.5, -0.30), fontsize=fontsize, ncol=2)\n", - " \n", - "plt.tight_layout()\n", - "plt.savefig('../../results/counterexample.pdf', bbox_extra_artists=(lgd,), bbox_inches='tight', dpi=600)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "p_train= np.random.normal(0.85, 0.05, 100)\n", - "p_test_a= np.random.normal(0.60, 0.02, 90)\n", - "p_test_a_inc= np.random.normal(0.35, 0.05, 10)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "plt.scatter(p_train, -np.log(p_train), label= 'Train')\n", - "plt.scatter(p_test_a, -np.log(p_test_a), label= 'Test Correct')\n", - "plt.scatter(p_test_a_inc, -np.log(p_test_a_inc), label= 'Test Incorrect')\n", - "plt.legend()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "p_train= np.random.normal(0.85, 0.05, 100)\n", - "p_test_b= np.random.normal(0.60, 0.02, 90)\n", - "p_test_b_inc= np.random.normal(0.35, 0.05, 10)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "plt.scatter(p_train, -np.log(p_train), label= 'Train')\n", - "plt.scatter(p_test_b, -np.log(p_test_b), label= 'Test Correct')\n", - "plt.scatter(p_test_b_inc, -np.log(p_test_b_inc), label= 'Test Incorrect')\n", - "plt.legend()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "matchdg-env", - "language": "python", - "name": "matchdg-env" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.7.9" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/evaluation/t_sne.py b/evaluation/t_sne.py index ac2e98d..60f8f62 100644 --- a/evaluation/t_sne.py +++ b/evaluation/t_sne.py @@ -58,7 +58,7 @@ class TSNE(BaseEval): domain_all=[] - for batch_idx, (x_e, y_e, d_e, idx_e) in enumerate(dataset): + for batch_idx, (x_e, y_e, d_e, idx_e, obj_e) in enumerate(dataset): x_e= x_e.to(self.cuda) y_e= torch.argmax(y_e, dim=1) d_e= torch.argmax(d_e, dim=1) diff --git a/misc_scripts/acc_pacs.sh b/misc_scripts/acc_pacs.sh deleted file mode 100644 index efa9cff..0000000 --- a/misc_scripts/acc_pacs.sh +++ /dev/null @@ -1,29 +0,0 @@ -python test.py --test_metric acc --mia_sample_size 1000 --batch_size 64 --dataset pacs --method_name erm_match --match_case 0.01 --penalty_ws 0 --out_classes 7 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name resnet18 --train_domains art_painting cartoon sketch --test_domains photo > results/pacs/acc/photo_erm.txt - -python test.py --test_metric acc --mia_sample_size 1000 --batch_size 64 --dataset pacs --method_name erm_match --match_case 0.01 --penalty_ws 0 --out_classes 7 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name resnet18 --train_domains photo cartoon sketch --test_domains art_painting > results/pacs/acc/painting_erm.txt - -python test.py --test_metric acc --mia_sample_size 1000 --batch_size 64 --dataset pacs --method_name erm_match --match_case 0.01 --penalty_ws 0 --out_classes 7 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name resnet18 --train_domains photo art_painting sketch --test_domains cartoon > results/pacs/acc/cartoon_erm.txt - -python test.py --test_metric acc --mia_sample_size 1000 --batch_size 64 --dataset pacs --method_name erm_match --match_case 0.01 --penalty_ws 0 --out_classes 7 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name resnet18 --train_domains photo art_painting cartoon --test_domains sketch > results/pacs/acc/sketch_erm.txt - - - - -python test.py --test_metric acc --mia_sample_size 1000 --batch_size 64 --dataset pacs --method_name erm_match --match_case 0.01 --penalty_ws 0.1 --out_classes 7 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name resnet18 --train_domains art_painting cartoon sketch --test_domains photo > results/pacs/acc/photo_random.txt - -python test.py --test_metric acc --mia_sample_size 1000 --batch_size 64 --dataset pacs --method_name erm_match --match_case 0.01 --penalty_ws 0.5 --out_classes 7 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name resnet18 --train_domains photo cartoon sketch --test_domains art_painting > results/pacs/acc/painting_random.txt - -python test.py --test_metric acc --mia_sample_size 1000 --batch_size 64 --dataset pacs --method_name erm_match --match_case 0.01 --penalty_ws 0.1 --out_classes 7 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name resnet18 --train_domains photo art_painting sketch --test_domains cartoon > results/pacs/acc/cartoon_random.txt - -python test.py --test_metric acc --mia_sample_size 1000 --batch_size 64 --dataset pacs --method_name erm_match --match_case 0.01 --penalty_ws 0.1 --out_classes 7 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name resnet18 --train_domains photo art_painting cartoon --test_domains sketch > results/pacs/acc/sketch_random.txt - - - - -python test.py --test_metric acc --mia_sample_size 1000 --batch_size 64 --dataset pacs --method_name hybrid --ctr_match_case 0.01 --ctr_match_flag 1 --ctr_match_interrupt 5 --ctr_model_name resnet18 --out_classes 7 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name resnet18 --penalty_ws 0.1 --match_case -1 --train_domains art_painting cartoon sketch --test_domains photo > results/pacs/acc/photo_hybrid.txt - -python test.py --test_metric acc --mia_sample_size 1000 --batch_size 64 --dataset pacs --method_name hybrid --ctr_match_case 0.01 --ctr_match_flag 1 --ctr_match_interrupt 5 --ctr_model_name resnet18 --out_classes 7 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name resnet18 --penalty_ws 0.01 --match_case -1 --train_domains photo cartoon sketch --test_domains art_painting > results/pacs/acc/painting_hybrid.txt - -python test.py --test_metric acc --mia_sample_size 1000 --batch_size 64 --dataset pacs --method_name hybrid --ctr_match_case 0.01 --ctr_match_flag 1 --ctr_match_interrupt 5 --ctr_model_name resnet18 --out_classes 7 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name resnet18 --penalty_ws 0.01 --match_case -1 --train_domains photo art_painting sketch --test_domains cartoon > results/pacs/acc/cartoon_hybrid.txt - -python test.py --test_metric acc --mia_sample_size 1000 --batch_size 64 --dataset pacs --method_name hybrid --ctr_match_case 0.01 --ctr_match_flag 1 --ctr_match_interrupt 5 --ctr_model_name resnet18 --out_classes 7 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name resnet18 --penalty_ws 0.5 --match_case -1 --train_domains photo art_painting cartoon --test_domains sketch > results/pacs/acc/sketch_hybrid.txt \ No newline at end of file diff --git a/misc_scripts/untitled.txt b/misc_scripts/adult.txt similarity index 100% rename from misc_scripts/untitled.txt rename to misc_scripts/adult.txt diff --git a/misc_scripts/adv_attack.sh b/misc_scripts/adv_attack.sh deleted file mode 100644 index 6e9b1e7..0000000 --- a/misc_scripts/adv_attack.sh +++ /dev/null @@ -1,33 +0,0 @@ -# python test.py --dataset rot_mnist --method_name erm_match --match_case 0.01 --penalty_ws 0.0 --test_metric adv_attack --penalty_diff_ctr 0 --adv_eps 5 -# python test.py --dataset rot_mnist --method_name erm_match --match_case 0.01 --penalty_ws 0.1 --test_metric adv_attack --penalty_diff_ctr 0 --adv_eps 5 -# python test.py --dataset rot_mnist --method_name erm_match --match_case 1.0 --penalty_ws 0.1 --test_metric adv_attack --penalty_diff_ctr 0 --adv_eps 5 - -# python test.py --dataset rot_mnist --method_name erm_match --match_case 0.01 --penalty_ws 0.0 --test_metric adv_attack --penalty_diff_ctr 0 --adv_eps 25 -# python test.py --dataset rot_mnist --method_name erm_match --match_case 0.01 --penalty_ws 0.1 --test_metric adv_attack --penalty_diff_ctr 0 --adv_eps 25 -# python test.py --dataset rot_mnist --method_name erm_match --match_case 1.0 --penalty_ws 0.1 --test_metric adv_attack --penalty_diff_ctr 0 --adv_eps 25 - -# python test.py --dataset rot_mnist --method_name erm_match --match_case 0.01 --penalty_ws 0.0 --test_metric adv_attack --penalty_diff_ctr 0 --adv_eps 50 -# python test.py --dataset rot_mnist --method_name erm_match --match_case 0.01 --penalty_ws 0.1 --test_metric adv_attack --penalty_diff_ctr 0 --adv_eps 50 -# python test.py --dataset rot_mnist --method_name erm_match --match_case 1.0 --penalty_ws 0.1 --test_metric adv_attack --penalty_diff_ctr 0 --adv_eps 50 - -# python test.py --dataset rot_mnist --method_name erm_match --match_case 0.01 --penalty_ws 0.0 --test_metric adv_attack --penalty_diff_ctr 0 --adv_eps 75 -# python test.py --dataset rot_mnist --method_name erm_match --match_case 0.01 --penalty_ws 0.1 --test_metric adv_attack --penalty_diff_ctr 0 --adv_eps 75 -# python test.py --dataset rot_mnist --method_name erm_match --match_case 1.0 --penalty_ws 0.1 --test_metric adv_attack --penalty_diff_ctr 0 --adv_eps 75 - -# python test.py --dataset rot_mnist --method_name erm_match --match_case 0.01 --penalty_ws 0.0 --test_metric adv_attack --penalty_diff_ctr 0 --adv_eps 100 -# python test.py --dataset rot_mnist --method_name erm_match --match_case 0.01 --penalty_ws 0.1 --test_metric adv_attack --penalty_diff_ctr 0 --adv_eps 100 -# python test.py --dataset rot_mnist --method_name erm_match --match_case 1.0 --penalty_ws 0.1 --test_metric adv_attack --penalty_diff_ctr 0 --adv_eps 100 - -python3 test.py --test_metric adv_attack --dataset fashion_mnist --method_name erm_match --match_case 1.0 --penalty_ws 0.1 --adv_eps 0.3 > perfect.txt - -python3 test.py --test_metric adv_attack --dataset fashion_mnist --method_name erm_match --match_case 0.75 --penalty_ws 0.1 --adv_eps 0.3 > case_75.txt - -python3 test.py --test_metric adv_attack --dataset fashion_mnist --method_name erm_match --match_case 0.5 --penalty_ws 0.1 --adv_eps 0.3 > case_50.txt - -python3 test.py --test_metric adv_attack --dataset fashion_mnist --method_name erm_match --match_case 0.25 --penalty_ws 0.1 --adv_eps 0.3 > case_25.txt - -python3 test.py --test_metric adv_attack --dataset fashion_mnist --method_name erm_match --match_case 0.01 --penalty_ws 0.1 --adv_eps 0.3 > random.txt - -python3 test.py --test_metric adv_attack --dataset fashion_mnist --method_name erm_match --match_case 0.01 --penalty_ws 0.0 --adv_eps 0.3 > erm.txt - -python test.py --test_metric adv_attack --dataset fashion_mnist --method_name matchdg_erm --penalty_ws 0.1 --match_case -1 --ctr_match_case 0.01 --ctr_match_flag 1 --ctr_match_interrupt 5 --adv_eps 0.3 --n_runs 2 > match_dg.txt \ No newline at end of file diff --git a/misc_scripts/chex.sh b/misc_scripts/chex.sh deleted file mode 100644 index e6203a2..0000000 --- a/misc_scripts/chex.sh +++ /dev/null @@ -1,72 +0,0 @@ -# Chex Evaluation -python train.py --dataset chestxray --method_name erm_match --match_case 0.01 --train_domains nih_trans kaggle_trans --test_domains chex --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --epochs 40 --lr 0.001 --batch_size 16 --penalty_ws 0.0 --model_name densenet121 --n_runs 2 > erm_chex.txt - -python train.py --dataset chestxray --method_name erm_match --match_case 0.01 --train_domains nih_trans kaggle_trans --test_domains chex --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --epochs 40 --lr 0.001 --batch_size 16 --penalty_ws 50.0 --model_name densenet121 --n_runs 2 > rand_chex.txt - -python train.py --dataset chestxray --method_name csd --match_case 0.01 --train_domains nih_trans kaggle_trans --test_domains chex --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --epochs 40 --lr 0.001 --batch_size 16 --penalty_ws 0.0 --model_name densenet121 --n_runs 2 --rep_dim 1024 > csd_chex.txt - -python train.py --dataset chestxray --method_name irm --match_case 0.01 --train_domains nih_trans kaggle_trans --test_domains chex --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --epochs 40 --lr 0.001 --batch_size 16 --penalty_ws 50.0 --penalty_s 5 --model_name densenet121 --n_runs 2 > irm_chex.txt - - -# NIH Evaluation -python train.py --dataset chestxray --method_name erm_match --match_case 0.01 --train_domains chex_trans kaggle_trans --test_domains nih --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --epochs 40 --lr 0.001 --batch_size 16 --penalty_ws 0.0 --model_name densenet121 --n_runs 2 > erm_nih.txt - -python train.py --dataset chestxray --method_name erm_match --match_case 0.01 --train_domains chex_trans kaggle_trans --test_domains nih --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --epochs 40 --lr 0.001 --batch_size 16 --penalty_ws 50.0 --model_name densenet121 --n_runs 2 > rand_nih.txt - -python train.py --dataset chestxray --method_name csd --match_case 0.01 --train_domains chex_trans kaggle_trans --test_domains nih --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --epochs 40 --lr 0.001 --batch_size 16 --penalty_ws 0.0 --model_name densenet121 --n_runs 2 --rep_dim 1024 > csd_nih.txt - -python train.py --dataset chestxray --method_name irm --match_case 0.01 --train_domains chex_trans kaggle_trans --test_domains nih --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --epochs 40 --lr 0.001 --batch_size 16 --penalty_ws 50.0 --penalty_s 5 --model_name densenet121 --n_runs 2 > irm_nih.txt - - -# Kaggle Evaluation -python train.py --dataset chestxray --method_name erm_match --match_case 0.01 --train_domains nih_trans chex_trans --test_domains kaggle --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --epochs 40 --lr 0.001 --batch_size 16 --penalty_ws 0.0 --model_name densenet121 --n_runs 2 > erm_kaggle.txt - -python train.py --dataset chestxray --method_name erm_match --match_case 0.01 --train_domains nih_trans chex_trans --test_domains kaggle --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --epochs 40 --lr 0.001 --batch_size 16 --penalty_ws 50.0 --model_name densenet121 --n_runs 2 > rand_kaggle.txt - -python train.py --dataset chestxray --method_name csd --match_case 0.01 --train_domains nih_trans chex_trans --test_domains kaggle --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --epochs 40 --lr 0.001 --batch_size 16 --penalty_ws 0.0 --model_name densenet121 --n_runs 2 --rep_dim 1024 > csd_kaggle.txt - -python train.py --dataset chestxray --method_name irm --match_case 0.01 --train_domains nih_trans chex_trans --test_domains kaggle --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --epochs 40 --lr 0.001 --batch_size 16 --penalty_ws 50.0 --penalty_s 5 --model_name densenet121 --n_runs 2 > irm_kaggle.txt - - -# python train.py --dataset chestxray --method_name hybrid --match_case 0.01 --train_domains nih_trans chex_trans --test_domains kaggle_trans --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --epochs 40 --lr 0.001 --batch_size 16 --penalty_ws 0.0 --model_name densenet121 --n_runs 3 --penalty_aug 10.0 > perf_chex_trans.txt - - - - - - -# python train.py --dataset chestxray --method_name erm_match --match_case 0.01 --train_domains nih_trans chex_trans --test_domains kaggle --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --epochs 40 --lr 0.001 --batch_size 32 --penalty_ws 0.0 --model_name densenet121 --n_runs 1 > erm_chex.txt - -# python train.py --dataset chestxray --method_name erm_match --match_case 0.01 --train_domains nih_trans chex_trans --test_domains kaggle --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --epochs 40 --lr 0.001 --batch_size 32 --penalty_ws 1.0 --model_name densenet121 --n_runs 1 > rand_chex.txt - -# python train.py --dataset chestxray --method_name csd --match_case 0.01 --train_domains nih_trans chex_trans --test_domains kaggle --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --epochs 40 --lr 0.001 --batch_size 32 --penalty_ws 0.0 --model_name densenet121 --n_runs 1 --rep_dim 1024 > csd_chex.txt - -# python train.py --dataset chestxray --method_name irm --match_case 0.01 --train_domains nih_trans chex_trans --test_domains kaggle --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --epochs 40 --lr 0.001 --batch_size 32 --penalty_ws 1.0 --penalty_s 5 --model_name densenet121 --n_runs 1 > irm_chex.txt - -# python train.py --dataset chestxray --method_name hybrid --match_case 0.01 --train_domains nih_trans chex_trans --test_domains kaggle --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --epochs 40 --lr 0.001 --batch_size 16 --penalty_ws 0.0 --model_name densenet121 --n_runs 1 --penalty_aug 10.0 > perf_chex.txt - -# #Kaggle Evaluation -# python train.py --dataset chestxray --method_name erm_match --match_case 0.01 --train_domains nih chex --test_domains kaggle --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --epochs 40 --lr 0.001 --penalty_ws 0.0 --model_name densenet121 > erm_.txt - -# python train.py --dataset chestxray --method_name erm_match --match_case 0.01 --train_domains nih chex --test_domains kaggle --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --epochs 40 --lr 0.001 --penalty_ws 1.0 --model_name densenet121 > rand_chex.txt - -# python train.py --dataset chestxray --method_name csd --match_case 0.01 --train_domains nih chex --test_domains kaggle --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --epochs 40 --lr 0.001 --penalty_ws 0.0 --model_name densenet121 > csd_chex.txt - -# python train.py --dataset chestxray --method_name irm --match_case 0.01 --train_domains nih chex --test_domains kaggle --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --epochs 40 --lr 0.001 --penalty_ws 1.0 --penalty_s 5 --model_name densenet121 > irm_chex.txt - - -# #NIH Evaluation -# python train.py --dataset chestxray --method_name erm_match --match_case 0.01 --train_domains kaggle chex --test_domains nih --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --epochs 40 --lr 0.001 --penalty_ws 0.0 --model_name densenet121 > erm_chex.txt - -# python train.py --dataset chestxray --method_name erm_match --match_case 0.01 --train_domains kaggle chex --test_domains nih --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --epochs 40 --lr 0.001 --penalty_ws 1.0 --model_name densenet121 > rand_chex.txt - -# python train.py --dataset chestxray --method_name csd --match_case 0.01 --train_domains kaggle chex --test_domains nih --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --epochs 40 --lr 0.001 --penalty_ws 0.0 --model_name densenet121 > csd_chex.txt - -# python train.py --dataset chestxray --method_name irm --match_case 0.01 --train_domains kaggle chex --test_domains nih --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --epochs 40 --lr 0.001 --penalty_ws 1.0 --penalty_s 5 --model_name densenet121 > irm_chex.txt - -#Alone -# python train.py --dataset chestxray --method_name erm_match --match_case 0.01 --train_domains nih --test_domains nih --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --epochs 40 --lr 0.001 --batch_size 32 --penalty_ws 0.0 --model_name densenet121 --n_runs 1 > nih_alone.txt - -# python train.py --dataset chestxray --method_name erm_match --match_case 0.01 --train_domains chex --test_domains chex --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --epochs 40 --lr 0.001 --batch_size 32 --penalty_ws 0.0 --model_name densenet121 --n_runs 1 > chex_alone.txt - -# python train.py --dataset chestxray --method_name erm_match --match_case 0.01 --train_domains kaggle --test_domains kaggle --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --epochs 40 --lr 0.001 --batch_size 32 --penalty_ws 0.0 --model_name densenet121 --n_runs 1 > kaggle_alone.txt \ No newline at end of file diff --git a/misc_scripts/domainbed.sh b/misc_scripts/domainbed.sh deleted file mode 100644 index 2da5433..0000000 --- a/misc_scripts/domainbed.sh +++ /dev/null @@ -1,11 +0,0 @@ -python train.py --dataset rot_mnist --method_name erm_match --match_case 0.01 --penalty_ws 1.0 --epochs 50 --model_name domain_bed_mnist --img_h 28 --img_w 28 --train_domains 15 30 45 60 75 --test_domains 0 > rand_1.txt - -python train.py --dataset rot_mnist --method_name erm_match --match_case 0.30 --penalty_ws 1.0 --epochs 50 --model_name domain_bed_mnist --img_h 28 --img_w 28 --train_domains 15 30 45 60 75 --test_domains 0 > mdg_1.txt - -python train.py --dataset rot_mnist --method_name erm_match --match_case 1.0 --penalty_ws 1.0 --epochs 50 --model_name domain_bed_mnist --img_h 28 --img_w 28 --train_domains 15 30 45 60 75 --test_domains 0 > perf_1.txt - -python train.py --dataset rot_mnist --method_name erm_match --match_case 0.01 --penalty_ws 0.1 --epochs 50 --model_name domain_bed_mnist --img_h 28 --img_w 28 --train_domains 15 30 45 60 75 --test_domains 0 > rand_0.1.txt - -python train.py --dataset rot_mnist --method_name erm_match --match_case 0.30 --penalty_ws 0.1 --epochs 50 --model_name domain_bed_mnist --img_h 28 --img_w 28 --train_domains 15 30 45 60 75 --test_domains 0 > mdg_0.1.txt - -python train.py --dataset rot_mnist --method_name erm_match --match_case 1.0 --penalty_ws 0.1 --epochs 50 --model_name domain_bed_mnist --img_h 28 --img_w 28 --train_domains 15 30 45 60 75 --test_domains 0 > perf_0.1.txt \ No newline at end of file diff --git a/misc_scripts/mnist_abl.sh b/misc_scripts/mnist_abl.sh deleted file mode 100644 index 00a8b2c..0000000 --- a/misc_scripts/mnist_abl.sh +++ /dev/null @@ -1,16 +0,0 @@ -##Rotated MNIST - -#Perfect MatchDG -python train.py --dataset rot_mnist --method_name matchdg_ctr --match_case 1.0 --match_flag 1 --epochs 50 --batch_size 64 --pos_metric cos - -#Non Interative MatchDG -python train.py --dataset rot_mnist --method_name matchdg_ctr --match_case 0.0 --match_flag 0 --epochs 50 --batch_size 64 --pos_metric cos - - -##Fashion MNIST - -#Perfect MatchDG -python train.py --dataset fashion_mnist --method_name matchdg_ctr --match_case 1.0 --match_flag 1 --epochs 50 --batch_size 64 --pos_metric cos - -#Non Interative MatchDG -python train.py --dataset fashion_mnist --method_name matchdg_ctr --match_case 0.0 --match_flag 0 --epochs 50 --batch_size 64 --pos_metric cos diff --git a/misc_scripts/pacs_ctr.sh b/misc_scripts/pacs_ctr.sh deleted file mode 100644 index 2b162a1..0000000 --- a/misc_scripts/pacs_ctr.sh +++ /dev/null @@ -1,15 +0,0 @@ -#Photo -python train.py --dataset pacs --method_name matchdg_ctr --match_case 0.01 --match_flag 1 --epochs 15 --batch_size 128 --pos_metric cos --train_domains art_painting cartoon sketch --test_domains photo --out_classes 7 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name $1 - - -#Art Painting -python train.py --dataset pacs --method_name matchdg_ctr --match_case 0.01 --match_flag 1 --epochs 15 --batch_size 128 --pos_metric cos --train_domains photo cartoon sketch --test_domains art_painting --out_classes 7 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name $1 - - -#Cartoon -python train.py --dataset pacs --method_name matchdg_ctr --match_case 0.01 --match_flag 1 --epochs 15 --batch_size 128 --pos_metric cos --train_domains photo art_painting sketch --test_domains cartoon --out_classes 7 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name $1 - - -#Sketch -python train.py --dataset pacs --method_name matchdg_ctr --match_case 0.01 --match_flag 1 --epochs 15 --batch_size 128 --pos_metric cos --train_domains photo art_painting cartoon --test_domains sketch --out_classes 7 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name $1 - diff --git a/misc_scripts/privacy.txt b/misc_scripts/privacy.txt deleted file mode 100644 index b6e17b7..0000000 --- a/misc_scripts/privacy.txt +++ /dev/null @@ -1,36 +0,0 @@ -#Entorpy Attack - -python test.py --test_metric privacy_entropy --mia_sample_size 1000 --batch_size 64 --dataset chestxray --method_name erm_match --match_case 0.01 --penalty_ws 0 --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name densenet121 --train_domains nih_trans chex_trans --test_domains kaggle - -python test.py --test_metric privacy_entropy --mia_sample_size 1000 --batch_size 64 --dataset chestxray --method_name erm_match --match_case 0.01 --penalty_ws 10 --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name densenet121 --train_domains nih_trans chex_trans --test_domains kaggle - -python test.py --test_metric privacy_entropy --mia_sample_size 1000 --batch_size 64 --dataset chestxray --method_name csd --match_case 0.01 --penalty_ws 0 --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name densenet121 --train_domains nih_trans chex_trans --test_domains kaggle - -python test.py --test_metric privacy_entropy --mia_sample_size 1000 --batch_size 64 --dataset chestxray --method_name irm --match_case 0.01 --penalty_s 5 --penalty_ws 10.0 --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name densenet121 --train_domains nih_trans chex_trans --test_domains kaggle - -python test.py --test_metric privacy_entropy --mia_sample_size 1000 --batch_size 64 --dataset chestxray --method_name matchdg_erm --ctr_match_case 0.01 --ctr_match_flag 1 --ctr_match_interrupt 5 --ctr_model_name densenet121 --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name densenet121 --penalty_ws 50.0 --match_case -1 --train_domains nih_trans chex_trans --test_domains kaggle - -#MIA Attack - -python test.py --test_metric mia --mia_sample_size 1000 --mia_logit 1 --batch_size 64 --dataset chestxray --method_name erm_match --match_case 0.01 --penalty_ws 0 --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name densenet121 --train_domains nih_trans chex_trans --test_domains kaggle - -python test.py --test_metric mia --mia_sample_size 1000 --batch_size 64 --dataset chestxray --method_name erm_match --match_case 0.01 --penalty_ws 10 --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name densenet121 --train_domains nih_trans chex_trans --test_domains kaggle - -python test.py --test_metric mia --mia_sample_size 1000 --batch_size 64 --dataset chestxray --method_name csd --match_case 0.01 --penalty_ws 0 --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name densenet121 --train_domains nih_trans chex_trans --test_domains kaggle - -python test.py --test_metric mia --mia_sample_size 1000 --batch_size 64 --dataset chestxray --method_name irm --match_case 0.01 --penalty_s 5 --penalty_ws 10.0 --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name densenet121 --train_domains nih_trans chex_trans --test_domains kaggle - -python test.py --test_metric mia --mia_sample_size 1000 --batch_size 64 --dataset chestxray --method_name matchdg_erm --ctr_match_case 0.01 --ctr_match_flag 1 --ctr_match_interrupt 5 --ctr_model_name densenet121 --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name densenet121 --penalty_ws 50.0 --match_case -1 --train_domains nih_trans chex_trans --test_domains kaggle - - -#Mean Rank - -python test.py --test_metric match_score --batch_size 64 --dataset chestxray --match_func_data_case test --match_func_aug_case 1 --method_name erm_match --match_case 0.01 --penalty_ws 0 --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name densenet121 --train_domains nih_trans chex_trans --test_domains kaggle - -python test.py --test_metric match_score --batch_size 64 --dataset chestxray --match_func_data_case test --match_func_aug_case 1 --method_name erm_match --match_case 0.01 --penalty_ws 10.0 --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name densenet121 --train_domains nih_trans chex_trans --test_domains kaggle - -python test.py --test_metric match_score --batch_size 64 --dataset chestxray --match_func_data_case test --match_func_aug_case 1 --method_name csd --match_case 0.01 --penalty_ws 0 --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name densenet121 --train_domains nih_trans chex_trans --test_domains kaggle - -python test.py --test_metric match_score --batch_size 64 --dataset chestxray --match_func_data_case test --match_func_aug_case 1 --method_name irm --match_case 0.01 --penalty_s 5 --penalty_ws 10.0 --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name densenet121 --train_domains nih_trans chex_trans --test_domains kaggle - -python test.py --test_metric match_score --batch_size 64 --dataset chestxray --match_func_data_case test --match_func_aug_case 1 --method_name matchdg_erm --ctr_match_case 0.01 --ctr_match_flag 1 --ctr_match_interrupt 5 --ctr_model_name densenet121 --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name densenet121 --penalty_ws 50.0 --match_case -1 --train_domains nih_trans chex_trans --test_domains kaggle \ No newline at end of file diff --git a/misc_scripts/privacy_chest.sh b/misc_scripts/privacy_chest.sh deleted file mode 100644 index a9dd65a..0000000 --- a/misc_scripts/privacy_chest.sh +++ /dev/null @@ -1,104 +0,0 @@ -#Kaggle -python3 cxray_run.py kaggle acc train -python3 cxray_run.py kaggle acc test -python3 cxray_run.py kaggle privacy_loss_attack -python3 cxray_run.py kaggle privacy_entropy -python3 cxray_run.py kaggle match_score test - -#ChexPert -python3 cxray_run.py chex acc train -python3 cxray_run.py chex acc test -python3 cxray_run.py chex privacy_loss_attack -python3 cxray_run.py chex privacy_entropy -python3 cxray_run.py chex match_score test - -#NIH -python3 cxray_run.py nih acc train -python3 cxray_run.py nih acc test -python3 cxray_run.py nih privacy_loss_attack -python3 cxray_run.py nih privacy_entropy -python3 cxray_run.py nih match_score test - -# #Accuracy Train - -# python test.py --test_metric acc --batch_size 64 --dataset chestxray --acc_data_case train --match_func_aug_case 1 --method_name erm_match --match_case 0.01 --penalty_ws 0 --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name densenet121 --train_domains nih_trans chex_trans --test_domains kaggle > results/chestxray/acc_train/erm.txt - -# python test.py --test_metric acc --batch_size 64 --dataset chestxray --acc_data_case train --match_func_aug_case 1 --method_name erm_match --match_case 0.01 --penalty_ws 10.0 --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name densenet121 --train_domains nih_trans chex_trans --test_domains kaggle > results/chestxray/acc_train/random.txt - -# python test.py --test_metric acc --batch_size 64 --dataset chestxray --acc_data_case train --match_func_aug_case 1 --method_name csd --match_case 0.01 --penalty_ws 0 --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name densenet121 --train_domains nih_trans chex_trans --test_domains kaggle > results/chestxray/acc_train/csd.txt - -# python test.py --test_metric acc --batch_size 64 --dataset chestxray --acc_data_case train --match_func_aug_case 1 --method_name irm --match_case 0.01 --penalty_s 5 --penalty_ws 10.0 --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name densenet121 --train_domains nih_trans chex_trans --test_domains kaggle > results/chestxray/acc_train/irm.txt - -# python test.py --test_metric acc --batch_size 64 --dataset chestxray --acc_data_case train --match_func_aug_case 1 --method_name matchdg_erm --ctr_match_case 0.01 --ctr_match_flag 1 --ctr_match_interrupt 5 --ctr_model_name densenet121 --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name densenet121 --penalty_ws 50.0 --match_case -1 --train_domains nih_trans chex_trans --test_domains kaggle > results/chestxray/acc_train/matchdg.txt - -# # #Accuracy Test - -# # python test.py --test_metric acc --batch_size 64 --dataset chestxray --acc_data_case test --match_func_aug_case 1 --method_name erm_match --match_case 0.01 --penalty_ws 0 --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name densenet121 --train_domains nih_trans chex_trans --test_domains kaggle > results/chestxray/acc_test/erm.txt - -# # python test.py --test_metric acc --batch_size 64 --dataset chestxray --acc_data_case test --match_func_aug_case 1 --method_name erm_match --match_case 0.01 --penalty_ws 10.0 --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name densenet121 --train_domains nih_trans chex_trans --test_domains kaggle > results/chestxray/acc_test/random.txt - -# # python test.py --test_metric acc --batch_size 64 --dataset chestxray --acc_data_case test --match_func_aug_case 1 --method_name csd --match_case 0.01 --penalty_ws 0 --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name densenet121 --train_domains nih_trans chex_trans --test_domains kaggle > results/chestxray/acc_test/csd.txt - -# # python test.py --test_metric acc --batch_size 64 --dataset chestxray --acc_data_case test --match_func_aug_case 1 --method_name irm --match_case 0.01 --penalty_s 5 --penalty_ws 10.0 --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name densenet121 --train_domains nih_trans chex_trans --test_domains kaggle > results/chestxray/acc_test/irm.txt - -# # python test.py --test_metric acc --batch_size 64 --dataset chestxray --acc_data_case test --match_func_aug_case 1 --method_name matchdg_erm --ctr_match_case 0.01 --ctr_match_flag 1 --ctr_match_interrupt 5 --ctr_model_name densenet121 --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name densenet121 --penalty_ws 50.0 --match_case -1 --train_domains nih_trans chex_trans --test_domains kaggle > results/chestxray/acc_test/matchdg.txt - -# # #Mean Rank - -# # python test.py --test_metric match_score --batch_size 64 --dataset chestxray --match_func_data_case test --match_func_aug_case 1 --method_name erm_match --match_case 0.01 --penalty_ws 0 --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name densenet121 --train_domains nih_trans chex_trans --test_domains kaggle > results/chestxray/match_score/erm.txt - -# # python test.py --test_metric match_score --batch_size 64 --dataset chestxray --match_func_data_case test --match_func_aug_case 1 --method_name erm_match --match_case 0.01 --penalty_ws 10.0 --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name densenet121 --train_domains nih_trans chex_trans --test_domains kaggle - -# # python test.py --test_metric match_score --batch_size 64 --dataset chestxray --match_func_data_case test --match_func_aug_case 1 --method_name csd --match_case 0.01 --penalty_ws 0 --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name densenet121 --train_domains nih_trans chex_trans --test_domains kaggle - -# # python test.py --test_metric match_score --batch_size 64 --dataset chestxray --match_func_data_case test --match_func_aug_case 1 --method_name irm --match_case 0.01 --penalty_s 5 --penalty_ws 10.0 --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name densenet121 --train_domains nih_trans chex_trans --test_domains kaggle - -# # python test.py --test_metric match_score --batch_size 64 --dataset chestxray --match_func_data_case test --match_func_aug_case 1 --method_name matchdg_erm --ctr_match_case 0.01 --ctr_match_flag 1 --ctr_match_interrupt 5 --ctr_model_name densenet121 --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name densenet121 --penalty_ws 50.0 --match_case -1 --train_domains nih_trans chex_trans --test_domains kaggle - -# # #MIA Attack - -# # python test.py --test_metric mia --mia_sample_size 1000 --mia_logit 1 --batch_size 64 --dataset chestxray --method_name erm_match --match_case 0.01 --penalty_ws 0 --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name densenet121 --train_domains nih_trans chex_trans --test_domains kaggle > results/chestxray/privacy/erm.txt - -# # python test.py --test_metric mia --mia_sample_size 1000 --batch_size 64 --dataset chestxray --method_name erm_match --match_case 0.01 --penalty_ws 10 --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name densenet121 --train_domains nih_trans chex_trans --test_domains kaggle > results/chestxray/privacy/random.txt - -# # python test.py --test_metric mia --mia_sample_size 1000 --batch_size 64 --dataset chestxray --method_name csd --match_case 0.01 --penalty_ws 0 --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name densenet121 --train_domains nih_trans chex_trans --test_domains kaggle > results/chestxray/privacy/csd.txt - -# # python test.py --test_metric mia --mia_sample_size 1000 --batch_size 64 --dataset chestxray --method_name irm --match_case 0.01 --penalty_s 5 --penalty_ws 10.0 --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name densenet121 --train_domains nih_trans chex_trans --test_domains kaggle > results/chestxray/privacy/irm.txt - -# # python test.py --test_metric mia --mia_sample_size 1000 --batch_size 64 --dataset chestxray --method_name matchdg_erm --ctr_match_case 0.01 --ctr_match_flag 1 --ctr_match_interrupt 5 --ctr_model_name densenet121 --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name densenet121 --penalty_ws 50.0 --match_case -1 --train_domains nih_trans chex_trans --test_domains kaggle > results/chestxray/privacy/matchdg.txt - -# # #Entorpy Attack - -# # python test.py --test_metric privacy_entropy --mia_sample_size 1000 --batch_size 64 --dataset chestxray --method_name erm_match --match_case 0.01 --penalty_ws 0 --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name densenet121 --train_domains nih_trans chex_trans --test_domains kaggle > results/chestxray/privacy_entropy/erm.txt - -# # python test.py --test_metric privacy_entropy --mia_sample_size 1000 --batch_size 64 --dataset chestxray --method_name erm_match --match_case 0.01 --penalty_ws 10 --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name densenet121 --train_domains nih_trans chex_trans --test_domains kaggle > results/chestxray/privacy_entropy/random.txt - -# # python test.py --test_metric privacy_entropy --mia_sample_size 1000 --batch_size 64 --dataset chestxray --method_name csd --match_case 0.01 --penalty_ws 0 --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name densenet121 --train_domains nih_trans chex_trans --test_domains kaggle > results/chestxray/privacy_entropy/csd.txt - -# # python test.py --test_metric privacy_entropy --mia_sample_size 1000 --batch_size 64 --dataset chestxray --method_name irm --match_case 0.01 --penalty_s 5 --penalty_ws 10.0 --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name densenet121 --train_domains nih_trans chex_trans --test_domains kaggle > results/chestxray/privacy_entropy/irm.txt - -# # python test.py --test_metric privacy_entropy --mia_sample_size 1000 --batch_size 64 --dataset chestxray --method_name matchdg_erm --ctr_match_case 0.01 --ctr_match_flag 1 --ctr_match_interrupt 5 --ctr_model_name densenet121 --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name densenet121 --penalty_ws 50.0 --match_case -1 --train_domains nih_trans chex_trans --test_domains kaggle > results/chestxray/privacy_entropy/matchdg.txt - -# # #Loss Attack - -# # python test.py --test_metric privacy_loss_attack --mia_sample_size 1000 --batch_size 64 --dataset chestxray --method_name erm_match --match_case 0.01 --penalty_ws 0 --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name densenet121 --train_domains nih_trans chex_trans --test_domains kaggle > results/chestxray/privacy_loss/erm.txt - -# # python test.py --test_metric privacy_loss_attack --mia_sample_size 1000 --batch_size 64 --dataset chestxray --method_name erm_match --match_case 0.01 --penalty_ws 10 --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name densenet121 --train_domains nih_trans chex_trans --test_domains kaggle > results/chestxray/privacy_loss/random.txt - -# # python test.py --test_metric privacy_loss_attack --mia_sample_size 1000 --batch_size 64 --dataset chestxray --method_name csd --match_case 0.01 --penalty_ws 0 --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name densenet121 --train_domains nih_trans chex_trans --test_domains kaggle > results/chestxray/privacy_loss/csd.txt - -# # python test.py --test_metric privacy_loss_attack --mia_sample_size 1000 --batch_size 64 --dataset chestxray --method_name irm --match_case 0.01 --penalty_s 5 --penalty_ws 10.0 --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name densenet121 --train_domains nih_trans chex_trans --test_domains kaggle > results/chestxray/privacy_loss/irm.txt - -# # python test.py --test_metric privacy_loss_attack --mia_sample_size 1000 --batch_size 64 --dataset chestxray --method_name matchdg_erm --ctr_match_case 0.01 --ctr_match_flag 1 --ctr_match_interrupt 5 --ctr_model_name densenet121 --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name densenet121 --penalty_ws 50.0 --match_case -1 --train_domains nih_trans chex_trans --test_domains kaggle > results/chestxray/privacy_loss/matchdg.txt - -#Attribute Attack - -# python test.py --test_metric attribute_attack --mia_logit 1 --batch_size 64 --attribute_domain 1 --dataset chestxray --method_name erm_match --match_case 0.01 --penalty_ws 0 --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name densenet121 --train_domains nih_trans chex_trans --test_domains kaggle > results/chestxray/attribute_attack/erm.txt - -# python test.py --test_metric attribute_attack --mia_logit 1 --batch_size 64 --attribute_domain 1 --dataset chestxray --method_name erm_match --match_case 0.01 --penalty_ws 10.0 --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name densenet121 --train_domains nih_trans chex_trans --test_domains kaggle > results/chestxray/attribute_attack/random.txt - -# python test.py --test_metric attribute_attack --mia_logit 1 --batch_size 64 --attribute_domain 1 --dataset chestxray --method_name csd --match_case 0.01 --penalty_ws 0 --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name densenet121 --train_domains nih_trans chex_trans --test_domains kaggle > results/chestxray/attribute_attack/csd.txt - -# python test.py --test_metric attribute_attack --mia_logit 1 --batch_size 64 --attribute_domain 1 --dataset chestxray --method_name irm --match_case 0.01 --penalty_s 5 --penalty_ws 10.0 --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name densenet121 --train_domains nih_trans chex_trans --test_domains kaggle > results/chestxray/attribute_attack/irm.txt - -# python test.py --test_metric attribute_attack --mia_logit 1 --batch_size 64 --attribute_domain 1 --dataset chestxray --method_name matchdg_erm --ctr_match_case 0.01 --ctr_match_flag 1 --ctr_match_interrupt 5 --ctr_model_name densenet121 --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name densenet121 --penalty_ws 50.0 --match_case -1 --train_domains nih_trans chex_trans --test_domains kaggle > results/chestxray/attribute_attack/matchdg.txt \ No newline at end of file diff --git a/misc_scripts/privacy_mnist.sh b/misc_scripts/privacy_mnist.sh deleted file mode 100644 index ffa857c..0000000 --- a/misc_scripts/privacy_mnist.sh +++ /dev/null @@ -1,39 +0,0 @@ -#Rot MNIST -# python3 mnist_run.py rot_mnist train_all acc train -# python3 mnist_run.py rot_mnist train_all acc test -# python3 mnist_run.py rot_mnist train_all privacy_loss_attack -# python3 mnist_run.py rot_mnist train_all privacy_entropy -# python3 mnist_run.py rot_mnist train_all match_score test - -# python3 mnist_run.py rot_mnist train_abl_3 acc train -# python3 mnist_run.py rot_mnist train_abl_3 acc test -# python3 mnist_run.py rot_mnist train_abl_3 privacy_loss_attack -# python3 mnist_run.py rot_mnist train_abl_3 privacy_entropy -# python3 mnist_run.py rot_mnist train_abl_3 match_score test - -# python3 mnist_run.py rot_mnist train_abl_2 acc train -# python3 mnist_run.py rot_mnist train_abl_2 acc test -# python3 mnist_run.py rot_mnist train_abl_2 privacy_loss_attack -# python3 mnist_run.py rot_mnist train_abl_2 privacy_entropy -# python3 mnist_run.py rot_mnist train_abl_2 match_score test - - -#Fashion MNIST -# python3 mnist_run.py fashion_mnist train_all acc train -# python3 mnist_run.py fashion_mnist train_all acc test -python3 mnist_run.py fashion_mnist train_all privacy_loss_attack -# python3 mnist_run.py fashion_mnist train_all privacy_entropy -# python3 mnist_run.py fashion_mnist train_all match_score test - -# python3 mnist_run.py fashion_mnist train_abl_3 acc train -# python3 mnist_run.py fashion_mnist train_abl_3 acc test -python3 mnist_run.py fashion_mnist train_abl_3 privacy_loss_attack -# python3 mnist_run.py fashion_mnist train_abl_3 privacy_entropy -# python3 mnist_run.py fashion_mnist train_abl_3 match_score test - -# python3 mnist_run.py fashion_mnist train_abl_2 acc train -# python3 mnist_run.py fashion_mnist train_abl_2 acc test -python3 mnist_run.py fashion_mnist train_abl_2 privacy_loss_attack -# python3 mnist_run.py fashion_mnist train_abl_2 privacy_entropy -# python3 mnist_run.py fashion_mnist train_abl_2 match_score test - diff --git a/misc_scripts/privacy_pacs.sh b/misc_scripts/privacy_pacs.sh deleted file mode 100644 index 4a4c6d1..0000000 --- a/misc_scripts/privacy_pacs.sh +++ /dev/null @@ -1,24 +0,0 @@ -# python test.py --test_metric privacy_entropy --mia_sample_size 1000 --batch_size 64 --dataset pacs --method_name erm_match --match_case 0.01 --penalty_ws 0 --out_classes 7 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name resnet18 --train_domains art_painting cartoon sketch --test_domains photo > results/pacs/entropy/photo_erm.txt - -# python test.py --test_metric privacy_entropy --mia_sample_size 1000 --batch_size 64 --dataset pacs --method_name erm_match --match_case 0.01 --penalty_ws 0 --out_classes 7 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name resnet18 --train_domains photo cartoon sketch --test_domains art_painting > results/pacs/entropy/painting_erm.txt - -# python test.py --test_metric privacy_entropy --mia_sample_size 1000 --batch_size 64 --dataset pacs --method_name erm_match --match_case 0.01 --penalty_ws 0 --out_classes 7 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name resnet18 --train_domains photo art_painting sketch --test_domains cartoon > results/pacs/entropy/cartoon_erm.txt - -# python test.py --test_metric privacy_entropy --mia_sample_size 1000 --batch_size 64 --dataset pacs --method_name erm_match --match_case 0.01 --penalty_ws 0 --out_classes 7 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name resnet18 --train_domains photo art_painting cartoon --test_domains sketch > results/pacs/entropy/sketch_erm.txt - - -# python test.py --test_metric privacy_entropy --mia_sample_size 1000 --batch_size 64 --dataset pacs --method_name erm_match --match_case 0.01 --penalty_ws 0.1 --out_classes 7 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name resnet18 --train_domains art_painting cartoon sketch --test_domains photo > results/pacs/entropy/photo_random.txt - -# python test.py --test_metric privacy_entropy --mia_sample_size 1000 --batch_size 64 --dataset pacs --method_name erm_match --match_case 0.01 --penalty_ws 0.5 --out_classes 7 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name resnet18 --train_domains photo cartoon sketch --test_domains art_painting > results/pacs/entropy/painting_random.txt - -# python test.py --test_metric privacy_entropy --mia_sample_size 1000 --batch_size 64 --dataset pacs --method_name erm_match --match_case 0.01 --penalty_ws 0.1 --out_classes 7 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name resnet18 --train_domains photo art_painting sketch --test_domains cartoon > results/pacs/entropy/cartoon_random.txt - -# python test.py --test_metric privacy_entropy --mia_sample_size 1000 --batch_size 64 --dataset pacs --method_name erm_match --match_case 0.01 --penalty_ws 0.1 --out_classes 7 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name resnet18 --train_domains photo art_painting cartoon --test_domains sketch > results/pacs/entropy/sketch_random.txt - -python test.py --test_metric privacy_entropy --mia_sample_size 1000 --batch_size 64 --dataset pacs --method_name hybrid --ctr_match_case 0.01 --ctr_match_flag 1 --ctr_match_interrupt 5 --ctr_model_name resnet18 --out_classes 7 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name resnet18 --penalty_ws 0.1 --match_case -1 --train_domains art_painting cartoon sketch --test_domains photo > results/pacs/entropy/photo_hybrid.txt - -python test.py --test_metric privacy_entropy --mia_sample_size 1000 --batch_size 64 --dataset pacs --method_name hybrid --ctr_match_case 0.01 --ctr_match_flag 1 --ctr_match_interrupt 5 --ctr_model_name resnet18 --out_classes 7 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name resnet18 --penalty_ws 0.01 --match_case -1 --train_domains photo cartoon sketch --test_domains art_painting > results/pacs/entropy/painting_hybrid.txt - -python test.py --test_metric privacy_entropy --mia_sample_size 1000 --batch_size 64 --dataset pacs --method_name hybrid --ctr_match_case 0.01 --ctr_match_flag 1 --ctr_match_interrupt 5 --ctr_model_name resnet18 --out_classes 7 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name resnet18 --penalty_ws 0.01 --match_case -1 --train_domains photo art_painting sketch --test_domains cartoon > results/pacs/entropy/cartoon_hybrid.txt - -python test.py --test_metric privacy_entropy --mia_sample_size 1000 --batch_size 64 --dataset pacs --method_name hybrid --ctr_match_case 0.01 --ctr_match_flag 1 --ctr_match_interrupt 5 --ctr_model_name resnet18 --out_classes 7 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name resnet18 --penalty_ws 0.5 --match_case -1 --train_domains photo art_painting cartoon --test_domains sketch > results/pacs/entropy/sketch_hybrid.txt \ No newline at end of file diff --git a/misc_scripts/reproduce.txt b/misc_scripts/reproduce.txt deleted file mode 100644 index c041d10..0000000 --- a/misc_scripts/reproduce.txt +++ /dev/null @@ -1,104 +0,0 @@ -Table 1: - -python train.py --dataset rot_mnist --method_name matchdg_ctr --match_case 0.0 --match_flag 1 --epochs 50 --batch_size 64 --pos_metric cos - -python train.py --dataset rot_mnist --method_name matchdg_erm --match_case -1 --penalty_ws 0.1 --epochs 25 --ctr_match_case 0.0 --ctr_match_flag 1 --ctr_match_interrupt 5 --ctr_model_name resnet18 - - -Table 2: (Match func evaluation on train domains) - -python test.py --dataset rot_mnist --method_name erm_match --match_case 0.0 --penalty_ws 0.0 --test_metric match_score - -python test.py --dataset rot_mnist --method_name matchdg_ctr --match_case 0.0 --match_flag 1 --pos_metric cos --test_metric match_score - -Table 6: (LeNet) - -#MatchDG -python train.py --dataset rot_mnist --method_name matchdg_erm --penalty_ws 1.0 --match_case -1 --ctr_match_case 0.01 --ctr_match_flag 1 --ctr_match_interrupt 5 --n_runs 3 --epochs 100 --lr 0.01 --model_name lenet --img_h 32 --img_w 32 --train_domains 15 30 45 60 75 --test_domains 0 - -#Perf -python train.py --dataset rot_mnist --method_name erm_match --match_case 1.0 --penalty_ws 1.0 --epochs 100 --model_name lenet --img_h 32 --img_w 32 --train_domains 0 15 30 45 60 --test_domains 75 - -Table 7: (DomainBed) - -#MatchDG -python train.py --dataset rot_mnist --method_name matchdg_erm --penalty_ws 1.0 --match_case -1 --batch_size 64 --epochs 25 --model_name domain_bed_mnist --ctr_match_case 0.01 --ctr_match_flag 1 --ctr_match_interrupt 5 --n_runs 3 --img_h 28 --img_w 28 --train_domains 15 30 45 60 75 --test_domains 0 - -#Perf -python train.py --dataset rot_mnist --method_name erm_match --match_case 1.0 --penalty_ws 1.0 --batch_size 64 --epochs 25 --model_name domain_bed_mnist --img_h 28 --img_w 28 --train_domains 15 30 45 60 75 --test_domains 0 - -Table 8: (Phase 2 Rankings) - -#RandMatch -python test.py --dataset rot_mnist --method_name erm_match --match_case 0.01 --penalty_ws 0.1 --test_metric match_score - -#MatchDG -python test.py --dataset rot_mnist --method_name matchdg_erm --penalty_ws 0.1 --match_case -1 --ctr_match_case 0.01 --ctr_match_flag 1 --ctr_match_interrupt 5 --n_runs 3 --test_metric match_score - -#PerfMatch -python test.py --dataset rot_mnist --method_name erm_match --match_case 1.0 --penalty_ws 0.1 --test_metric match_score - - -Chexpert: (Acc Evaluation) - -#Matching Methods -python test.py --dataset chestxray --method_name erm_match --match_case 0.01 --penalty_ws 0 --test_metric acc --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name densenet121 --train_domains nih_trans chex_trans --test_domains nih_trans - -#CSD -python test.py --dataset chestxray --method_name csd --match_case 0.01 --penalty_ws 0 --test_metric acc --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name densenet121 --train_domains nih_trans chex_trans --test_domains kaggle - -#IRM -python test.py --dataset chestxray --method_name irm --match_case 0.01 --penalty_s 5 --penalty_ws 10.0 --test_metric acc --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name densenet121 --train_domains nih_trans chex_trans --test_domains kaggle - - -python test.py --dataset chestxray --method_name hybrid --ctr_match_case 0.01 --ctr_match_flag 1 --ctr_match_interrupt 5 --ctr_model_name densenet121 --test_metric acc --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name densenet121 --penalty_ws 0.0 --match_case 0.01 --train_domains nih_trans chex_trans --test_domains chex_tran - -#MatchDG -python test.py --dataset chestxray --method_name matchdg_erm --ctr_match_case 0.01 --ctr_match_flag 1 --ctr_match_interrupt 5 --ctr_model_name densenet121 --test_metric acc --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name densenet121 --penalty_ws 50.0 --match_case -1 --train_domains nih_trans chex_trans --test_domains kaggle - -#Hybrid -python test.py --dataset chestxray --method_name hybrid --ctr_match_case 0.01 --ctr_match_flag 1 --ctr_match_interrupt 5 --ctr_model_name densenet121 --test_metric acc --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name densenet121 --penalty_ws 1.0 --match_case -1 --train_domains nih_trans chex_trans --test_domains kaggle_trans - -PACS: (Acc Evaluation) - -#Matching Methods -python test.py --dataset pacs --method_name erm_match --match_case 0.01 --penalty_ws 0 --test_metric acc --out_classes 7 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name resnet18 --train_domains art_painting cartoon sketch --test_domains photo - -#MatchDG - -python test.py --dataset pacs --method_name matchdg_erm --ctr_match_case 0.01 --ctr_match_flag 1 --ctr_match_interrupt 5 --ctr_model_name resnet18 --test_metric acc --out_classes 7 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name resnet18 --penalty_ws 0.1 --match_case -1 --train_domains art_painting cartoon sketch --test_domains photo - -python test.py --dataset pacs --method_name matchdg_erm --ctr_match_case 0.01 --ctr_match_flag 1 --ctr_match_interrupt 5 --ctr_model_name resnet50 --test_metric acc --out_classes 7 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name resnet50 --penalty_ws 0.1 --match_case -1 --train_domains art_painting cartoon sketch --test_domains photo - -python test.py --dataset pacs --method_name matchdg_erm --ctr_match_case 0.01 --ctr_match_flag 1 --ctr_match_interrupt 5 --ctr_model_name resnet50 --test_metric acc --out_classes 7 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name resnet18 --penalty_ws 0.5 --match_case -1 --train_domains photo cartoon sketch --test_domains art_painting - -python test.py --dataset pacs --method_name matchdg_erm --ctr_match_case 0.01 --ctr_match_flag 1 --ctr_match_interrupt 5 --ctr_model_name resnet50 --test_metric acc --out_classes 7 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name resnet50 --penalty_ws 0.1 --match_case -1 --train_domains photo cartoon sketch --test_domains art_painting - -python test.py --dataset pacs --method_name matchdg_erm --ctr_match_case 0.01 --ctr_match_flag 1 --ctr_match_interrupt 5 --ctr_model_name resnet50 --test_metric acc --out_classes 7 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name resnet18 --penalty_ws 1.0 --match_case -1 --train_domains photo art_painting sketch --test_domains cartoon - -python test.py --dataset pacs --method_name matchdg_erm --ctr_match_case 0.01 --ctr_match_flag 1 --ctr_match_interrupt 5 --ctr_model_name resnet50 --test_metric acc --out_classes 7 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name resnet50 --penalty_ws - 1.0 --match_case -1 --train_domains photo art_painting sketch --test_domains cartoon - -python test.py --dataset pacs --method_name matchdg_erm --ctr_match_case 0.01 --ctr_match_flag 1 --ctr_match_interrupt 5 --ctr_model_name resnet50 --test_metric acc --out_classes 7 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name resnet18 --penalty_ws 0.5 --match_case -1 --train_domains photo art_painting cartoon --test_domains sketch - -python test.py --dataset pacs --method_name matchdg_erm --ctr_match_case 0.01 --ctr_match_flag 1 --ctr_match_interrupt 5 --ctr_model_name resnet50 --test_metric acc --out_classes 7 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name resnet50 --penalty_ws - 0.5 --match_case -1 --train_domains photo art_painting cartoon --test_domains sketch - -#Hybrid - -python test.py --dataset pacs --method_name hybrid --ctr_match_case 0.01 --ctr_match_flag 1 --ctr_match_interrupt 5 --ctr_model_name resnet18 --test_metric acc --out_classes 7 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name resnet18 --penalty_ws 0.1 --match_case -1 --train_domains art_painting cartoon sketch --test_domains photo - -python test.py --dataset pacs --method_name hybrid --ctr_match_case 0.01 --ctr_match_flag 1 --ctr_match_interrupt 5 --ctr_model_name resnet50 --test_metric acc --out_classes 7 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name resnet50 --penalty_ws 0.1 --match_case -1 --train_domains art_painting cartoon sketch --test_domains photo - -python test.py --dataset pacs --method_name hybrid --ctr_match_case 0.01 --ctr_match_flag 1 --ctr_match_interrupt 5 --ctr_model_name resnet18 --test_metric acc --out_classes 7 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name resnet18 --penalty_ws 0.01 --match_case -1 --train_domains photo cartoon sketch --test_domains art_painting - -python test.py --dataset pacs --method_name hybrid --ctr_match_case 0.01 --ctr_match_flag 1 --ctr_match_interrupt 5 --ctr_model_name resnet50 --test_metric acc --out_classes 7 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name resnet50 --penalty_ws 0.01 --match_case -1 --train_domains photo cartoon sketch --test_domains art_painting - -python test.py --dataset pacs --method_name hybrid --ctr_match_case 0.01 --ctr_match_flag 1 --ctr_match_interrupt 5 --ctr_model_name resnet18 --test_metric acc --out_classes 7 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name resnet18 --penalty_ws 0.01 - --match_case -1 --train_domains photo art_painting sketch --test_domains cartoon - -python test.py --dataset pacs --method_name hybrid --ctr_match_case 0.01 --ctr_match_flag 1 --ctr_match_interrupt 5 --ctr_model_name resnet50 --test_metric acc --out_classes 7 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name resnet50 --penalty_ws 0.01 --match_case -1 --train_domains photo art_painting sketch --test_domains cartoon - -python test.py --dataset pacs --method_name hybrid --ctr_match_case 0.01 --ctr_match_flag 1 --ctr_match_interrupt 5 --ctr_model_name resnet18 --test_metric acc --out_classes 7 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name resnet18 --penalty_ws 0.5 --match_case -1 --train_domains photo art_painting cartoon --test_domains sketch - -python test.py --dataset pacs --method_name hybrid --ctr_match_case 0.01 --ctr_match_flag 1 --ctr_match_interrupt 5 --ctr_model_name resnet50 --test_metric acc --out_classes 7 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name resnet50 --penalty_ws 0.01 --match_case -1 --train_domains photo art_painting cartoon --test_domains sketch \ No newline at end of file diff --git a/misc_scripts/reproduce_paper.sh b/misc_scripts/reproduce_paper.sh deleted file mode 100644 index 8a48eb3..0000000 --- a/misc_scripts/reproduce_paper.sh +++ /dev/null @@ -1,39 +0,0 @@ -#RotMNIST -python train.py --dataset rot_mnist --method_name erm_match --match_case 0.01 --penalty_ws 0.0 --epochs 25 -python train.py --dataset rot_mnist --method_name erm_match --match_case 0.01 --penalty_ws 0.1 --epochs 25 -python train.py --dataset rot_mnist --method_name erm_match --match_case 0.25 --penalty_ws 0.1 --epochs 25 -python train.py --dataset rot_mnist --method_name erm_match --match_case 0.50 --penalty_ws 0.1 --epochs 25 -python train.py --dataset rot_mnist --method_name erm_match --match_case 1.0 --penalty_ws 0.1 --epochs 25 -python train.py --dataset rot_mnist --method_name erm_match --match_case 0.75 --penalty_ws 0.1 --epochs 25 -python train.py --dataset rot_mnist --method_name erm_match --match_case 0.01 --penalty_ws 0.0 --epochs 25 - -python train.py --dataset rot_mnist --method_name irm --match_case 0.01 --penalty_irm 1.0 --penalty_s 5 -- epochs 25 -python train.py --dataset rot_mnist --method_name csd --match_case 0.01 --penalty_ws 0.0 -- epochs 25 - -# python train.py --dataset rot_mnist --method_name erm_match --match_case 0.01 --penalty_ws 0.0 --epochs 25 --train_domains 30 45 -# python train.py --dataset rot_mnist --method_name erm_match --match_case 0.01 --penalty_ws 0.1 --epochs 25 --train_domains 30 45 -# python train.py --dataset rot_mnist --method_name erm_match --match_case 0.25 --penalty_ws 0.1 --epochs 25 --train_domains 30 45 -# python train.py --dataset rot_mnist --method_name erm_match --match_case 0.50 --penalty_ws 0.1 --epochs 25 --train_domains 30 45 -# python train.py --dataset rot_mnist --method_name erm_match --match_case 0.75 --penalty_ws 0.1 --epochs 25 --train_domains 30 45 -# python train.py --dataset rot_mnist --method_name erm_match --match_case 1.0 --penalty_ws 0.1 --epochs 25 --train_domains 30 45 -# python train.py --dataset rot_mnist --method_name matchdg_ctr --match_case 0.01 --match_flag 1 --epochs 30 --batch_size 64 --pos_metric cos -# python train.py --dataset rot_mnist --method_name matchdg_erm --penalty_ws 0.1 --match_case -1 --ctr_match_case 0.01 --ctr_match_flag 1 --ctr_match_interrupt 5 --n_runs 3 --epochs 25 -# python train.py --dataset rot_mnist --method_name csd --match_case 0.01 --penalty_ws 0.0 -- epochs 25 --train_domains 30 45 -# python train.py --dataset rot_mnist --method_name irm --match_case 0.01 --penalty_irm 1.0 --penalty_s 5 -- epochs 25 --train_domains 30 45 -# python train.py --dataset rot_mnist --method_name matchdg_ctr --match_case 0.01 --match_flag 1 --epochs 30 --batch_size 64 --pos_metric cos -# python train.py --dataset rot_mnist --method_name matchdg_erm --penalty_ws 0.1 --match_case -1 --ctr_match_case 0.01 --ctr_match_flag 1 --ctr_match_interrupt 5 --n_runs 3 --epochs 25 - -#FashionMNIST -# python train.py --dataset fashion_mnist --method_name erm_match --match_case 0.01 --penalty_ws 0.0 --epochs 25 -# python train.py --dataset fashion_mnist --method_name erm_match --match_case 0.01 --penalty_ws 0.1 --epochs 25 -# python train.py --dataset fashion_mnist --method_name erm_match --match_case 0.25 --penalty_ws 0.1 --epochs 25 -# python train.py --dataset fashion_mnist --method_name erm_match --match_case 0.50 --penalty_ws 0.1 --epochs 25 -# python train.py --dataset fashion_mnist --method_name erm_match --match_case 0.75 --penalty_ws 0.1 --epochs 25 -# python train.py --dataset fashion_mnist --method_name erm_match --match_case 1.0 --penalty_ws 0.1 --epochs 25 -# python train.py --dataset fashion_mnist --method_name csd --match_case 0.01 --penalty_ws 0.0 -- epochs 25 - - -#ChestXRay - -# python train.py --dataset chestxray --method_name matchdg_ctr --match_case 0.01 --match_flag 1 --epochs 3 --batch_size 32 --pos_metric cos --train_domains nih_trans chex_trans --test_domains kaggle_trans --out_classes 2 --perfect_match 0 --img_c 3 --pre_trained 1 --model_name densenet121 --n_runs 2 - diff --git a/misc_scripts/run_domainbed.sh b/misc_scripts/run_domainbed.sh deleted file mode 100644 index 93e1668..0000000 --- a/misc_scripts/run_domainbed.sh +++ /dev/null @@ -1,16 +0,0 @@ -#ERM MatchDG -python train.py --dataset rot_mnist --method_name erm_match --match_case 0.5 --penalty_ws 0.25 --model domain_bed_mnist --img_w 28 --img_h 28 --epochs 25 --train_domains 15 30 45 60 75 --test_domain 0 - -python train.py --dataset rot_mnist --method_name erm_match --match_case 0.5 --penalty_ws 0.25 --model domain_bed_mnist --img_w 28 --img_h 28 --epochs 25 --train_domains 0 15 30 45 60 --test_domain 75 - -#ERM RandMatch -python train.py --dataset rot_mnist --method_name erm_match --match_case 0.01 --penalty_ws 0.25 --model domain_bed_mnist --img_w 28 --img_h 28 --epochs 25 --train_domains 15 30 45 60 75 --test_domain 0 - -python train.py --dataset rot_mnist --method_name erm_match --match_case 0.01 --penalty_ws 0.25 --model domain_bed_mnist --img_w 28 --img_h 28 --epochs 25 --train_domains 0 15 30 45 60 --test_domain 75 - -#ERM PerfMatch -python train.py --dataset rot_mnist --method_name erm_match --match_case 1.0 --penalty_ws 0.25 --model domain_bed_mnist --img_w 28 --img_h 28 --epochs 25 --train_domains 15 30 45 60 75 --test_domain 0 - -python train.py --dataset rot_mnist --method_name erm_match --match_case 1.0 --penalty_ws 0.25 --model domain_bed_mnist --img_w 28 --img_h 28 --epochs 25 --train_domains 0 15 30 45 60 --test_domain 75 - - diff --git a/misc_scripts/slab-run.sh b/misc_scripts/slab-run.sh deleted file mode 100644 index 2907397..0000000 --- a/misc_scripts/slab-run.sh +++ /dev/null @@ -1,112 +0,0 @@ -# python train.py --dataset slab --model_name slab --method_name perf_match --batch_size 64 --lr 0.1 --penalty_ws 0.0 --epochs 30 --out_classes 2 --train_domains 0.0 0.10 --test_domains 0.50 --n_runs 3 > slab_temp/erm.txt - -# python test.py --test_metric acc --dataset slab --model_name slab --method_name perf_match --penalty_ws 0.0 --out_classes 2 --train_domains 0.0 0.10 --n_runs 3 --acc_data_case train - -# python test.py --test_metric slab_feat_eval --dataset slab --model_name slab --method_name perf_match --penalty_ws 0.0 --out_classes 2 --train_domains 0.0 0.10 --n_runs 3 --match_func_data_case train - -# python test_slab.py --method_name perf_match --penalty_ws 0.0 --n_runs 3 --train_domains 0.0 0.10 --test_domain 0.3 - -# # python test.py --test_metric mia --dataset slab --model_name slab --method_name perf_match --penalty_ws 0.0 --mia_logit 1 --mia_sample_size 400 --out_classes 2 --train_domains 0.0 0.10 --test_domains 0.50 --n_runs 3 > slab_temp/erm-mi.txt - -# # python test.py --test_metric privacy_entropy --dataset slab --model_name slab --method_name perf_match --penalty_ws 0.0 --mia_sample_size 400 --out_classes 2 --train_domains 0.0 0.10 --test_domains 0.50 --n_runs 3 > slab_temp/erm-entropy.txt - -# # python test.py --test_metric privacy_loss_attack --dataset slab --model_name slab --method_name perf_match --penalty_ws 0.0 --mia_sample_size 400 --out_classes 2 --train_domains 0.0 0.10 --test_domains 0.50 --n_runs 3 > slab_temp/erm-loss.txt - - - -# python train.py --dataset slab --model_name slab --method_name rand_match --batch_size 64 --lr 0.1 --penalty_ws 1.0 --epochs 30 --out_classes 2 --train_domains 0.0 0.10 --test_domains 1.0 --n_runs 3 > slab_temp/rand.txt - -# python test.py --test_metric acc --dataset slab --model_name slab --method_name rand_match --penalty_ws 1.0 --out_classes 2 --train_domains 0.0 0.10 --n_runs 3 --acc_data_case train - -# python test_slab.py --method_name rand_match --penalty_ws 1.0 --n_runs 3 --train_domains 0.0 0.10 --test_domain 0.3 - -# # python test.py --test_metric mia --dataset slab --model_name slab --method_name rand_match --penalty_ws 10.0 --mia_logit 1 --mia_sample_size 400 --out_classes 2 --train_domains 0.0 0.10 --test_domains 0.50 --n_runs 3 > slab_temp/rand-mi.txt - -# # python test.py --test_metric privacy_entropy --dataset slab --model_name slab --method_name rand_match --penalty_ws 10.0 --mia_sample_size 400 --out_classes 2 --train_domains 0.0 0.10 --test_domains 0.50 --n_runs 3 > slab_temp/rand-entropy.txt - -# # python test.py --test_metric privacy_loss_attack --dataset slab --model_name slab --method_name rand_match --penalty_ws 10.0 --mia_sample_size 400 --out_classes 2 --train_domains 0.0 0.10 --test_domains 0.50 --n_runs 3 > slab_temp/rand-loss.txt - - - -# python train.py --dataset slab --model_name slab --method_name perf_match --batch_size 64 --lr 0.1 --penalty_ws 1.0 --epochs 30 --out_classes 2 --train_domains 0.0 0.10 --test_domains 1.0 --n_runs 3 > slab_temp/perf.txt - -# python test.py --test_metric acc --dataset slab --model_name slab --method_name perf_match --penalty_ws 1.0 --out_classes 2 --train_domains 0.0 0.10 --n_runs 3 --acc_data_case train - -# python test_slab.py --method_name perf_match --penalty_ws 1.0 --n_runs 3 --train_domains 0.0 0.10 --test_domain 0.3 - -# # python test.py --test_metric mia --dataset slab --model_name slab --method_name perf_match --penalty_ws 10.0 --mia_logit 1 --mia_sample_size 400 --out_classes 2 --train_domains 0.0 0.10 --test_domains 0.50 --n_runs 3 > slab_temp/perf-mi.txt - -# # python test.py --test_metric privacy_entropy --dataset slab --model_name slab --method_name perf_match --penalty_ws 10.0 --mia_sample_size 400 --out_classes 2 --train_domains 0.0 0.10 --test_domains 0.50 --n_runs 3 > slab_temp/perf-entropy.txt - -# # python test.py --test_metric privacy_loss_attack --dataset slab --model_name slab --method_name perf_match --penalty_ws 10.0 --mia_sample_size 400 --out_classes 2 --train_domains 0.0 0.10 --test_domains 0.50 --n_runs 3 - - - -# #IRM -# python train.py --dataset slab --model_name slab --method_name irm_slab --batch_size 64 --lr 0.1 --penalty_irm 10.0 --penalty_s 2 --epochs 30 --out_classes 2 --train_domains 0.0 0.10 --test_domains 1.0 --n_runs 3 > slab_temp/irm.txt - - -# #CSD -# python train.py --dataset slab --model_name slab --method_name csd_slab --batch_size 64 --lr 0.1 --penalty_ws 0.0 --epochs 30 --out_classes 2 --train_domains 0.0 0.10 --test_domains 1.0 --n_runs 3 --rep_dim 100 > slab_temp/csd.txt - - - - - - -# ## Slab Spur -# python train.py --dataset slab_spur --model_name slab --method_name perf_match --batch_size 64 --lr 0.1 --penalty_ws 0.0 --epochs 30 --out_classes 2 --train_domains 0.0 0.10 --test_domains 0.90 --n_runs 3 --slab_data_dim 3 - -# python train.py --dataset slab_spur --model_name slab --method_name perf_match --batch_size 64 --lr 0.1 --penalty_ws 50.0 --epochs 30 --out_classes 2 --train_domains 0.0 0.10 --test_domains 0.90 --n_runs 3 --slab_data_dim 3 - -# python train.py --dataset slab_spur --model_name slab --method_name rand_match --batch_size 64 --lr 0.1 --penalty_ws 50.0 --epochs 30 --out_classes 2 --train_domains 0.0 0.10 --test_domains 1.0 --n_runs 3 --slab_data_dim 3 - -# python train.py --dataset slab_spur --model_name slab --method_name irm_slab --batch_size 64 --lr 0.1 --penalty_irm 10.0 --penalty_s 2 --epochs 30 --out_classes 2 --train_domains 0.0 0.10 --test_domains 1.0 --n_runs 3 --slab_data_dim 3 - -# python train.py --dataset slab_spur --model_name slab --method_name csd_slab --batch_size 64 --lr 0.1 --penalty_ws 0.0 --epochs 30 --out_classes 2 --train_domains 0.0 0.10 --test_domains 1.0 --n_runs 3 --rep_dim 100 --slab_data_dim 3 - - -# # Train Case -# python test.py --test_metric acc --dataset slab_spur --model_name slab --method_name perf_match --penalty_ws 50.0 --out_classes 2 --train_domains 0.0 0.10 --n_runs 3 --acc_data_case train --slab_data_dim 3 - -# # #Attribute Attack -# # python test.py --test_metric attribute_attack --mia_logit 1 --attribute_domain 0 --batch_size 64 --dataset slab_spur --model_name slab --method_name perf_match --penalty_ws 0.0 --out_classes 2 --train_domains 0.0 0.10 --test_domains 0.90 --n_runs 3 --slab_data_dim 3 - -# python test.py --test_metric attribute_attack --mia_logit 1 --attribute_domain 0 --batch_size 64 --dataset slab_spur --model_name slab --method_name perf_match --penalty_ws 0.0 --out_classes 2 --train_domains 0.0 0.10 --test_domains 0.90 --n_runs 3 --slab_data_dim 3 - -# python test.py --test_metric attribute_attack --mia_logit 1 --attribute_domain 0 --batch_size 64 --dataset slab_spur --model_name slab --method_name perf_match --penalty_ws 50.0 --out_classes 2 --train_domains 0.0 0.10 --test_domains 0.90 --n_runs 3 --slab_data_dim 3 - - -# python3 slab-run.py train -# python3 slab-run.py test -# python3 slab-run.py train_plot - -python test_slab.py --method_name perf_match --penalty_ws 0.0 --n_runs 3 --train_domains 0.0 0.10 --test_domain 0.90 --slab_noise 0.05 > slab_noise/erm_auc.txt - -python test_slab.py --method_name perf_match --penalty_ws 1.0 --n_runs 3 --train_domains 0.0 0.10 --test_domain 0.90 --slab_noise 0.05 > slab_noise/perf_auc.txt - -python test.py --test_metric privacy_entropy --dataset slab --model_name slab --method_name perf_match --penalty_ws 0.0 --mia_sample_size 400 --out_classes 2 --train_domains 0.0 0.10 --test_domains 0.90 --n_runs 3 --slab_noise 0.05 > slab_noise/erm_entropy.txt - -python test.py --test_metric privacy_entropy --dataset slab --model_name slab --method_name perf_match --penalty_ws 1.0 --mia_sample_size 400 --out_classes 2 --train_domains 0.0 0.10 --test_domains 0.90 --n_runs 3 --slab_noise 0.05 > slab_noise/perf_entropy.txt - -python test.py --test_metric privacy_loss_attack --dataset slab --model_name slab --method_name perf_match --penalty_ws 0.0 --mia_sample_size 400 --out_classes 2 --train_domains 0.0 0.10 --test_domains 0.90 --n_runs 3 --slab_noise 0.05 > slab_noise/erm_loss.txt - -python test.py --test_metric privacy_loss_attack --dataset slab --model_name slab --method_name perf_match --penalty_ws 1.0 --mia_sample_size 400 --out_classes 2 --train_domains 0.0 0.10 --test_domains 0.90 --n_runs 3 --slab_noise 0.05 > slab_noise/perf_loss.txt - -# python test.py --test_metric mia --dataset slab --model_name slab --method_name perf_match --penalty_ws 0.0 --mia_logit 1 --mia_sample_size 400 --out_classes 2 --train_domains 0.0 0.10 --test_domains 0.15 --n_runs 3 --slab_noise 0.05 > slab_noise/erm_mi.txt - -# python test.py --test_metric mia --dataset slab --model_name slab --method_name perf_match --penalty_ws 1.0 --mia_logit 1 --mia_sample_size 400 --out_classes 2 --train_domains 0.0 0.10 --test_domains 0.15 --n_runs 3 --slab_noise 0.05 > slab_noise/perf_mi.txt - - - -python train.py --dataset slab --model_name slab --method_name perf_match --batch_size 64 --lr 0.1 --penalty_ws 0.0 --epochs 30 --out_classes 2 --train_domains 0.0 0.10 --test_domains 0.90 --n_runs 3 --slab_noise 0.20 - -python train.py --dataset slab --model_name slab --method_name mask_linear --batch_size 64 --lr 0.1 --penalty_ws 0.0 --epochs 30 --out_classes 2 --train_domains 0.0 0.10 --test_domains 0.90 --n_runs 3 --slab_noise 0.20 - -python test_slab.py --method_name perf_match --penalty_ws 0.0 --n_runs 3 --train_domains 0.0 0.10 --test_domain 0.30 --slab_noise 0.20 - -python test_slab.py --method_name mask_linear --penalty_ws 0.0 --n_runs 3 --train_domains 0.0 0.10 --test_domain 0.3 --slab_noise 0.20 - -python test.py --test_metric mia --dataset slab --model_name slab --method_name perf_match --penalty_ws 0.0 --mia_logit 1 --mia_sample_size 400 --out_classes 2 --train_domains 0.0 0.10 --test_domains 0.30 --n_runs 3 --slab_noise 0.20 - - python test.py --test_metric mia --dataset slab --model_name slab --method_name mask_linear --penalty_ws 0.0 --mia_logit 1 --mia_sample_size 400 --out_classes 2 --train_domains 0.0 0.10 --test_domains 0.30 --n_runs 3 --slab_noise 0.20 \ No newline at end of file diff --git a/misc_scripts/t3.sh b/misc_scripts/t3.sh deleted file mode 100644 index da73371..0000000 --- a/misc_scripts/t3.sh +++ /dev/null @@ -1,3 +0,0 @@ -python3 cxray_run.py kaggle train -python3 cxray_run.py chex train -python3 cxray_run.py nih train diff --git a/misc_scripts/temp.sh b/misc_scripts/temp.sh deleted file mode 100644 index 5a8daee..0000000 --- a/misc_scripts/temp.sh +++ /dev/null @@ -1,39 +0,0 @@ -# # python3 metric_eval.py fashion_mnist mia -# # python3 metric_eval.py rot_mnist mia - -# # python train.py --dataset pacs --method_name hybrid --match_case -1 --ctr_match_case 0.01 --ctr_match_flag 1 --ctr_match_interrupt 5 --n_runs 3 --train_domains photo cartoon sketch --test_domains art_painting --out_classes 7 --perfect_match 0 --img_c 3 --pre_trained 1 --epochs 50 --lr 0.001 --batch_size 16 --weight_decay 0.001 --penalty_ws 0.1 --penalty_aug 0.1 --model_name resnet18 --ctr_model_name resnet18 - -# #python train.py --dataset pacs --method_name hybrid --match_case -1 --ctr_match_case 0.01 --ctr_match_flag 1 --ctr_match_interrupt 5 --n_runs 3 --train_domains photo art_painting cartoon --test_domains sketch --out_classes 7 --perfect_match 0 --img_c 3 --pre_trained 1 --epochs 50 --lr 0.01 --batch_size 16 --weight_decay 0.001 --penalty_ws 0.1 --penalty_aug 0.1 --model_name resnet18 --ctr_model_name resnet18 - -# #python train.py --dataset pacs --method_name hybrid --match_case -1 --ctr_match_case 0.01 --ctr_match_flag 1 --ctr_match_interrupt 5 --n_runs 3 --train_domains photo cartoon sketch --test_domains art_painting --out_classes 7 --perfect_match 0 --img_c 3 --pre_trained 1 --epochs 50 --lr 0.001 --batch_size 16 --weight_decay 0.001 --penalty_ws 0.1 --penalty_aug 0.1 --model_name resnet18 --ctr_model_name resnet18 - - -# #python3 metric_eval.py fashion_mnist acc test -# #python3 metric_eval.py fashion_mnist match_score test -# #python3 metric_eval.py fashion_mnist mia -# python3 metric_eval.py fashion_mnist privacy_entropy -# #python3 metric_eval.py fashion_mnist attribute_attack -# #python3 metric_eval.py fashion_mnist privacy_loss_attack - - -# python train.py --dataset rot_mnist --method_name erm_match --match_case 0.0 --penalty_ws 0.0 --epochs 25 -# python train.py --dataset rot_mnist --method_name erm_match --match_case 0.0 --penalty_ws 0.1 --epochs 25 -# python train.py --dataset rot_mnist --method_name erm_match --match_case 0.25 --penalty_ws 0.1 --epochs 25 -# python train.py --dataset rot_mnist --method_name erm_match --match_case 0.50 --penalty_ws 0.1 --epochs 25 -# python train.py --dataset rot_mnist --method_name erm_match --match_case 0.75 --penalty_ws 0.1 --epochs 25 -# python train.py --dataset rot_mnist --method_name erm_match --match_case 1.0 --penalty_ws 0.1 --epochs 25 - -# python train.py --dataset fashion_mnist --method_name erm_match --match_case 0.0 --penalty_ws 0.0 --epochs 25 -# python train.py --dataset fashion_mnist --method_name erm_match --match_case 0.0 --penalty_ws 0.1 --epochs 25 -# python train.py --dataset fashion_mnist --method_name erm_match --match_case 0.25 --penalty_ws 0.1 --epochs 25 -# python train.py --dataset fashion_mnist --method_name erm_match --match_case 0.50 --penalty_ws 0.1 --epochs 25 -# python train.py --dataset fashion_mnist --method_name erm_match --match_case 0.75 --penalty_ws 0.1 --epochs 25 -# python train.py --dataset fashion_mnist --method_name erm_match --match_case 1.0 --penalty_ws 0.1 --epochs 25 - -#python train.py --dataset rot_mnist --method_name irm --match_case 0.0 --penalty_irm 1.0 --penalty_s 5 --epochs 25 - -#python train.py --dataset rot_mnist --method_name csd --match_case 0.0 --penalty_ws 0.0 --epochs 25 --rep_dim 512 - -python train.py --dataset rot_mnist --method_name matchdg_ctr --match_case 0.0 --match_flag 1 --epochs 50 --batch_size 64 --pos_metric cos - -python train.py --dataset rot_mnist --method_name matchdg_erm --match_case -1 --penalty_ws 0.1 --epochs 25 --ctr_match_case 0.0 --ctr_match_flag 1 --ctr_match_interrupt 5 --ctr_model_name resnet18 diff --git a/misc_scripts/temp2.sh b/misc_scripts/temp2.sh deleted file mode 100644 index 6813144..0000000 --- a/misc_scripts/temp2.sh +++ /dev/null @@ -1,19 +0,0 @@ -# #MatchDG CTR Phase: RotMNIST -# python train.py --dataset rot_mnist --method_name matchdg_ctr --match_case 0.01 --match_flag 1 --epochs 30 --batch_size 64 --pos_metric cos - -# python train.py --dataset rot_mnist --method_name matchdg_ctr --match_case 1.0 --match_flag 1 --epochs 30 --batch_size 64 --pos_metric cos - -# python train.py --dataset rot_mnist --method_name matchdg_ctr --match_case 0.01 --match_flag 0 --epochs 30 --batch_size 64 --pos_metric cos - -# #MatchDG CTR Phase: FashionMNIST -# python train.py --dataset fashion_mnist --method_name matchdg_ctr --match_case 0.01 --match_flag 1 --epochs 30 --batch_size 64 --pos_metric cos - -# python train.py --dataset fashion_mnist --method_name matchdg_ctr --match_case 1.0 --match_flag 1 --epochs 30 --batch_size 64 --pos_metric cos - -# python train.py --dataset fashion_mnist --method_name matchdg_ctr --match_case 0.01 --match_flag 0 --epochs 30 --batch_size 64 --pos_metric cos - - - -python train.py --dataset rot_mnist --method_name matchdg_ctr --match_case 0.01 --match_flag 1 --epochs 100 --batch_size 128 --pos_metric cos - -python train.py --dataset rot_mnist --method_name matchdg_erm --match_case -1 --penalty_ws 0.1 --epochs 25 --ctr_match_case 0.01 --ctr_match_flag 1 --ctr_match_interrupt 5 --ctr_model_name resnet18 diff --git a/misc_scripts/untitled1.txt b/misc_scripts/untitled1.txt deleted file mode 100644 index ca6684f..0000000 --- a/misc_scripts/untitled1.txt +++ /dev/null @@ -1,44 +0,0 @@ -M2ExZ - - -In the domain generalization literature, a common objective is to learn representations independent of the domain after conditioning on the class label. We show that this objective is not sufficient: there exist counter-examples where a model fails to generalize to unseen domains even after satisfying class-conditional domain invariance. We formalize this observation through a structural causal model and show the importance of modeling within-class variations for generalization. Specifically, classes contain objects that characterize specific causal features, and domains can be interpreted as interventions on these objects that change non-causal features. We highlight an alternative condition: inputs across domains should have the same representation if they are derived from the same object. Based on this objective, we propose matching-based algorithms when base objects are observed (e.g., through data augmentation) and approximate the objective when objects are not observed (MatchDG). Our simple matching-based algorithms are competitive to prior work on out-of-domain accuracy for rotated MNIST, Fashion-MNIST, PACS, and Chest-Xray datasets. Our method MatchDG also recovers ground-truth object matches: on MNIST and Fashion-MNIST, top-10 matches from MatchDG have over 50% overlap with ground-truth matches. - -Table 11: - -88.2 + 98.6 + 97.7 + 97.5 + 97.0 + 85.6 -91.0 + 99.7 + 99.6 + 99.4 + 99.7 + 93.1 -93.0 + 99.5 + 99.9 + 99.4 + 99.7 + 93.3 -96.5 + 99.1 + 99.2 + 98.6 + 98.6 + 94.9 - -Table 12: - -95.4 + 98.2 + 97.9 + 98.5 + 98.1 + 94.3 -95.9 + 98.4 + 98.6 + 98.9 + 98.7 + 95.1 - -Table 18: - -95.38 + 77.68 + 78.98 + 74.75 - -95.37 + 78.16 + 78.83 + 75.13 -95.93 + 79.77 + 80.03 + 77.11 -96.15 + 81.71 + 80.75 + 78.79 - -95.57 + 79.09 + 79.37 + 77.60 -96.53 + 81.32 + 80.70 + 79.72 -96.67 + 82.80 + 81.61 + 81.05 - -97.89 + 82.16 + 81.68 + 80.45 -97.94 + 85.61 + 82.12 + 78.76 -98.36 + 86.74 + 82.32 + 82.66 - -Table 19: - -85.29 + 64.23 + 66.61 + 59.25 - -85.42 + 65.54 + 68.41 + 59.46 -85.41 + 66.21 + 68.47 + 59.56 -85.67 + 66.89 + 68.89 + 60.39 - -86.04 + 67.35 + 69.71 + 64.66 -86.52 + 67.99 + 69.92 + 65.64 -87.03 + 67.97 + 71.06 + 67.19 \ No newline at end of file