{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "14fe1a64",
   "metadata": {},
   "source": [
    "# Feature Adversaries Attack in TensorFlow v2\n",
    "\n",
    "Before diving into the attack, let's first prepare a classification model. We utilize a script from the `examples` folders."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "33edf2bc",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Accuracy on benign test examples: 96.77%\n"
     ]
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "import tensorflow as tf\n",
    "from tensorflow.keras import Sequential\n",
    "from tensorflow.keras.layers import Dense, Flatten, Conv2D, MaxPool2D\n",
    "\n",
    "from art.attacks.evasion import FeatureAdversariesTensorFlowV2\n",
    "from art.estimators.classification import TensorFlowV2Classifier\n",
    "from art.utils import load_mnist\n",
    "\n",
    "# Step 1: Load the MNIST dataset\n",
    "\n",
    "(x_train, y_train), (x_test, y_test), min_pixel_value, max_pixel_value = load_mnist()\n",
    "\n",
    "# Step 1a: Cast to np.float32\n",
    "x_train = x_train.astype(np.float32)\n",
    "x_test = x_test.astype(np.float32)\n",
    "\n",
    "# Step 2: Create the model\n",
    "\n",
    "model = Sequential()\n",
    "model.add(Conv2D(filters=4, kernel_size=5, activation=\"relu\"))\n",
    "model.add(MaxPool2D(pool_size=(2, 2), padding=\"valid\", data_format=None))\n",
    "model.add(Conv2D(filters=10, kernel_size=5, activation=\"relu\"))\n",
    "model.add(MaxPool2D(pool_size=(2, 2), padding=\"valid\", data_format=None))\n",
    "model.add(Flatten())\n",
    "model.add(Dense(100))\n",
    "model.add(Dense(10))\n",
    "\n",
    "# Step 2a: Define the loss function and optimizer\n",
    "\n",
    "loss_object = tf.keras.losses.CategoricalCrossentropy(from_logits=True)\n",
    "optimizer = tf.keras.optimizers.Adam(learning_rate=0.01)\n",
    "\n",
    "# Step 3: Create the ART classifier\n",
    "\n",
    "classifier = TensorFlowV2Classifier(\n",
    "    model=model,\n",
    "    loss_object=loss_object,\n",
    "    optimizer=optimizer,\n",
    "    nb_classes=10,\n",
    "    input_shape=(28, 28, 1),\n",
    "    clip_values=(0, 1),\n",
    ")\n",
    "\n",
    "# Step 4: Train the ART classifier\n",
    "\n",
    "classifier.fit(x_train, y_train, batch_size=64, nb_epochs=3)\n",
    "\n",
    "# Step 5: Evaluate the ART classifier on benign test examples\n",
    "\n",
    "predictions = classifier.predict(x_test)\n",
    "accuracy = np.sum(np.argmax(predictions, axis=1) == np.argmax(y_test, axis=1)) / len(y_test)\n",
    "print(\"Accuracy on benign test examples: {}%\".format(accuracy * 100))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d9da5b77",
   "metadata": {},
   "source": [
    "---\n",
    "\n",
    "## PGD variant of Feature Adversaries\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "cb695872",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Step 5: prepare a batch of source and guide images\n",
    "valid = np.argmax(y_test, axis=1)[:100] != np.argmax(y_test, axis=1)[100:200]\n",
    "source = x_test[:100][valid][:32]\n",
    "guide = x_test[100:200][valid][:32]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "c8586dfa",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "d5bf0d366f9d4d19904dc7e6c1478d71",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Feature Adversaries TensorFlow v2:   0%|          | 0/100 [00:00<?, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Accuracy on adversarial test batch: 0.0%\n",
      "Average perturbation: 0.17647060751914978%\n"
     ]
    }
   ],
   "source": [
    "# Step 6: Generate adversarial test examples\n",
    "attack = FeatureAdversariesTensorFlowV2(\n",
    "    classifier,\n",
    "    layer=-2,\n",
    "    delta=45/255,\n",
    "    optimizer=None,\n",
    "    step_size=1/255,\n",
    "    max_iter=100,\n",
    ")\n",
    "x_test_adv = attack.generate(source, guide)\n",
    "\n",
    "# Step 7: Evaluate the ART classifier on adversarial test examples\n",
    "\n",
    "predictions = classifier.predict(x_test_adv)\n",
    "accuracy = np.sum(np.argmax(predictions, axis=1) == np.argmax(y_test[:100][valid][:32], axis=1)) / len(y_test[:100][valid][:32])\n",
    "\n",
    "dim = tuple(range(1, len(source.shape)))\n",
    "pert = np.mean(np.amax(np.abs(source - x_test_adv), axis=dim))\n",
    "print(\"Accuracy on adversarial test batch: {}%\".format(accuracy * 100))\n",
    "print(\"Average perturbation: {}%\".format(pert))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "68717bc9",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x7fe400651d30>"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Step 8: Inspect results\n",
    "\n",
    "# orig 7, guide 6\n",
    "plt.imshow(x_test_adv[0,...].squeeze())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "5aabd4ae",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x7fe40053a4c0>"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# orig 1, guide 5\n",
    "plt.imshow(x_test_adv[2,...].squeeze())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "1765536f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x7fe400522700>"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# orig 4, guide 9\n",
    "plt.imshow(x_test_adv[4,...].squeeze())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "1361622b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x7fe400488250>"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# orig 4, guide 2\n",
    "plt.imshow(x_test_adv[6,...].squeeze())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "e6f7cb47",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x7fe400466850>"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# orig 5, guide 9\n",
    "plt.imshow(x_test_adv[8,...].squeeze())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "1489dc86",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x7fe4003c1e50>"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# orig 0, guide 8\n",
    "plt.imshow(x_test_adv[10,...].squeeze())"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "18bc254a",
   "metadata": {},
   "source": [
    "\n",
    "## Unconstrained variant of Feature Adversaries\n",
    "\n",
    "This variant approximates the original hard constraint problem of the paper. Any available TensorFlow v2 optimizer can be used. We will use Adam as a good default one.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "70d9fbba",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "32587adc1cd344bb8db3c36021245001",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Feature Adversaries TensorFlow v2:   0%|          | 0/100 [00:00<?, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Accuracy on adversarial test batch: 0.0%\n",
      "Average perturbation: 0.17647060751914978%\n"
     ]
    }
   ],
   "source": [
    "# Step 6: Generate adversarial test examples\n",
    "attack = FeatureAdversariesTensorFlowV2(\n",
    "    classifier,\n",
    "    layer=-2,\n",
    "    delta=45/255,\n",
    "    optimizer=tf.keras.optimizers.Adam,\n",
    "    optimizer_kwargs={\"learning_rate\": 0.01},\n",
    "    lambda_=1.0,\n",
    "    max_iter=100,\n",
    "    random_start=True,\n",
    ")\n",
    "x_test_adv = attack.generate(source, guide)\n",
    "\n",
    "# Step 7: Evaluate the ART classifier on adversarial test examples\n",
    "\n",
    "predictions = classifier.predict(x_test_adv)\n",
    "accuracy = np.sum(np.argmax(predictions, axis=1) == np.argmax(y_test[:100][valid][:32], axis=1)) / len(y_test[:100][valid][:32])\n",
    "\n",
    "dim = tuple(range(1, len(source.shape)))\n",
    "pert = np.mean(np.amax(np.abs(source - x_test_adv), axis=dim))\n",
    "print(\"Accuracy on adversarial test batch: {}%\".format(accuracy * 100))\n",
    "print(\"Average perturbation: {}%\".format(pert))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "78e7ed4e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x7fe40034dc40>"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Step 8: Inspect results\n",
    "\n",
    "# orig 7, guide 6\n",
    "plt.imshow(x_test_adv[0,...].squeeze())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "dce73b0f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x7fe4003307f0>"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# orig 1, guide 5\n",
    "plt.imshow(x_test_adv[2,...].squeeze())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "8082690b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x7fe400294370>"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# orig 4, guide 9\n",
    "plt.imshow(x_test_adv[4,...].squeeze())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "a68f96b7",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x7fe40026dc70>"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# orig 4, guide 2\n",
    "plt.imshow(x_test_adv[6,...].squeeze())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "7a16e8fb",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x7fe4001d53d0>"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# orig 5, guide 9\n",
    "plt.imshow(x_test_adv[8,...].squeeze())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "8efcd647",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x7fe4001e7a30>"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# orig 0, guide 8\n",
    "plt.imshow(x_test_adv[10,...].squeeze())"
   ]
  }
 ],
 "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.8.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}