{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.12","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"gpu","dataSources":[{"sourceId":8360610,"sourceType":"datasetVersion","datasetId":4968755},{"sourceId":8853032,"sourceType":"datasetVersion","datasetId":5328977}],"dockerImageVersionId":30558,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import math, re\nimport tensorflow as tf\nimport numpy as np\nfrom cleverhans.tf2.attacks.projected_gradient_descent import projected_gradient_descent\nfrom matplotlib import pyplot as plt","metadata":{"execution":{"iopub.status.busy":"2024-09-09T18:17:27.9021Z","iopub.execute_input":"2024-09-09T18:17:27.902969Z","iopub.status.idle":"2024-09-09T18:17:38.654343Z","shell.execute_reply.started":"2024-09-09T18:17:27.902927Z","shell.execute_reply":"2024-09-09T18:17:38.653277Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# @tf.function\n# def MIG(model, images, labels, size, iterations = 20, steps = 15):\n#     # interpolated intensities\n#     alphas = tf.linspace(0.0,1.0,steps+1)\n#     alphas_x = alphas[:,tf.newaxis, tf.newaxis, tf.newaxis,tf.newaxis]\n#     alphas_x = tf.reshape(alphas_x,(1,alphas.shape[0],1,1,1))\n#     images = tf.cast(images,'float32')\n#     g_t_0 = tf.zeros_like(images)\n#     g_t_1 = tf.zeros_like(images)\n#     g_t_2 = tf.zeros_like(images)\n#     g_t_3 = tf.zeros_like(images)\n#     g_t_4 = tf.zeros_like(images)\n#     x_t_0 = images\n#     x_t_1 = images\n#     x_t_2 = images\n#     x_t_3 = images\n#     x_t_4 = images\n#     #eps_step = tf.constant(epsilon/iterations)\n\n#     for i in tf.range(iterations):\n#         # calculate interpolated images\n#         delta = tf.expand_dims(x_t_4,1)\n#         interpolated = delta * alphas_x\n#         # calculate gradient for each image\n#         grads = tf.TensorArray(tf.float32,size)\n#         i = 0\n#         for inter in interpolated:\n#             with tf.GradientTape() as tape:\n#                 tape.watch(inter)\n#                 probs = model(inter)[:,labels[i]]\n#             grads = grads.write(i,tape.gradient(probs,inter))\n#             i+= 1\n\n#         grads = grads.stack()\n#         # aproximate integration using remain trapoziod\n#         grads = (grads[:,:-1] + grads[:,1:]) / tf.constant(2.0)\n#         avg_gradients = tf.math.reduce_mean(grads, axis=1)\n\n#         integrated_gradient = x_t_4 * avg_gradients\n#         #delta_t = self.IG(x_t,labels,size)\n\n#         g_t_4 = g_t_4 + (integrated_gradient/tf.norm(integrated_gradient,1))\n#         x_h = x_t_4 - 0.25 * tf.sign(g_t_4)\n#         x_t_4 = tf.clip_by_value(x_h,x_h-5,x_h+5)\n\n#         #integrated_gradient = tf.clip_by_value(integrated_gradient,integrated_gradient-4,integrated_gradient+4)\n#         g_t_3 = g_t_3 + (integrated_gradient/tf.norm(integrated_gradient,1))\n#         x_h = x_t_3 - 0.2 * tf.sign(g_t_3)\n#         x_t_3 = tf.clip_by_value(x_h,x_h-4,x_h+4)\n\n#         #integrated_gradient = tf.clip_by_value(integrated_gradient,integrated_gradient-3,integrated_gradient+3)\n#         g_t_2 = g_t_2 + (integrated_gradient/tf.norm(integrated_gradient,1))\n#         x_h = x_t_2 - 0.15 * tf.sign(g_t_2)\n#         x_t_2 = tf.clip_by_value(x_h,x_h-3,x_h+3)\n\n#         #integrated_gradient = tf.clip_by_value(integrated_gradient,integrated_gradient-2,integrated_gradient+2)\n#         g_t_1 = g_t_1 + (integrated_gradient/tf.norm(integrated_gradient,1))\n#         x_h = x_t_1 - 0.1 * tf.sign(g_t_1)\n#         x_t_1 = tf.clip_by_value(x_h,x_h-2,x_h+2)\n\n#         #integrated_gradient = tf.clip_by_value(integrated_gradient,integrated_gradient-1,integrated_gradient+1)\n#         g_t_0 = g_t_0 + (integrated_gradient/tf.norm(integrated_gradient,1))\n#         x_h = x_t_0 - 0.05 * tf.sign(g_t_1)\n#         x_t_0 = tf.clip_by_value(x_h,x_h-1,x_h+1)\n\n#     return tf.stack([tf.clip_by_value(x_t_0,0,255),tf.clip_by_value(x_t_1,0,255),tf.clip_by_value(x_t_2,0,255),tf.clip_by_value(x_t_3,0,255),tf.clip_by_value(x_t_4,0,255)])","metadata":{"execution":{"iopub.status.busy":"2024-05-12T03:48:42.40536Z","iopub.execute_input":"2024-05-12T03:48:42.40603Z","iopub.status.idle":"2024-05-12T03:48:42.425262Z","shell.execute_reply.started":"2024-05-12T03:48:42.405996Z","shell.execute_reply":"2024-05-12T03:48:42.424254Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"eval_dir = \"/kaggle/input/eval-2k/subeval\"\neval_set = tf.keras.utils.image_dataset_from_directory(eval_dir,image_size=(224, 224),batch_size=64, seed = 4854)","metadata":{"execution":{"iopub.status.busy":"2024-09-09T15:55:03.574556Z","iopub.execute_input":"2024-09-09T15:55:03.575516Z","iopub.status.idle":"2024-09-09T15:55:06.971049Z","shell.execute_reply.started":"2024-09-09T15:55:03.575481Z","shell.execute_reply":"2024-09-09T15:55:06.970264Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# metrics_base = [tf.keras.metrics.SparseCategoricalCrossentropy(name=\"migloss1\"),\n#         tf.keras.metrics.SparseCategoricalCrossentropy(name=\"migloss2\"),\n#         tf.keras.metrics.SparseCategoricalCrossentropy(name=\"migloss3\"),\n#         tf.keras.metrics.SparseCategoricalCrossentropy(name=\"migloss4\"),\n#         tf.keras.metrics.SparseCategoricalCrossentropy(name=\"migloss5\"),\n#         tf.keras.metrics.SparseCategoricalAccuracy(name='migacc1'),\n#         tf.keras.metrics.SparseCategoricalAccuracy(name='migacc2'),\n#         tf.keras.metrics.SparseCategoricalAccuracy(name='migacc3'),\n#         tf.keras.metrics.SparseCategoricalAccuracy(name='migacc4'),\n#         tf.keras.metrics.SparseCategoricalAccuracy(name='migacc5')]","metadata":{"execution":{"iopub.status.busy":"2024-03-23T04:47:15.802839Z","iopub.execute_input":"2024-03-23T04:47:15.803741Z","iopub.status.idle":"2024-03-23T04:47:15.837658Z","shell.execute_reply.started":"2024-03-23T04:47:15.80371Z","shell.execute_reply":"2024-03-23T04:47:15.83693Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# clean_set = []\n# label_set = []\n\n# extracted_label = []\n# extracted_clean = []\n\n# eps = [1,2,3,4,5]\n# eps_iter = [e/20 for e in eps]\n\n# cnt = 0\n\n# for batch, label in eval_set:\n#     clean_set.append(batch)\n#     label_set.append(label)\n#     for i in label:\n#         extracted_label.append(i)\n#     for i in batch:\n#         extracted_clean.append(i)\n#     cnt += 1\n#     if cnt == 800:\n#         break\n\n\n# extracted_label = tf.convert_to_tensor(extracted_label)\n# extracted_clean = tf.convert_to_tensor(extracted_clean)","metadata":{"execution":{"iopub.status.busy":"2024-03-23T20:23:46.724159Z","iopub.execute_input":"2024-03-23T20:23:46.724532Z","iopub.status.idle":"2024-03-23T20:23:49.570595Z","shell.execute_reply.started":"2024-03-23T20:23:46.724502Z","shell.execute_reply":"2024-03-23T20:23:49.569323Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# base_model=tf.keras.applications.efficientnet.EfficientNetB0(\n#     include_top=True,\n#     weights=None,\n#     classifier_activation='softmax',\n#     classes=1000\n# )\n\n# inputs = tf.keras.layers.Input((224, 224, 3))\n# preprocessing = tf.keras.layers.Lambda(tf.keras.applications.efficientnet.preprocess_input)(inputs)\n# outputs = base_model(preprocessing)\n\n\n# base_model= tf.keras.Model(inputs = inputs, outputs = outputs)\n# base_model.compile(optimizer=\"sgd\",loss = \"sparse_categorical_crossentropy\",metrics=['sparse_categorical_accuracy'])\n# base_model.load_weights('/kaggle/input/efficientnetb0-adv-pgd/checkpoint.h5')","metadata":{"execution":{"iopub.status.busy":"2024-06-23T00:37:00.202952Z","iopub.execute_input":"2024-06-23T00:37:00.203263Z","iopub.status.idle":"2024-06-23T00:37:09.134142Z","shell.execute_reply.started":"2024-06-23T00:37:00.203238Z","shell.execute_reply":"2024-06-23T00:37:09.133158Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# results_base = base_model.evaluate(extracted_clean, extracted_label)\n        \n# #Evaluation basemodel\n# for batch, label in zip(clean_set, label_set):\n#     adv = MIG(base_model, batch, label, 1)\n#     for i in range(5):\n#         y_pred = base_model(adv[i], training=False)\n#         metrics_base[i].update_state(label, y_pred)\n#         metrics_base[i+5].update_state(label, y_pred)","metadata":{"execution":{"iopub.status.busy":"2024-03-23T04:47:28.995942Z","iopub.execute_input":"2024-03-23T04:47:28.996825Z","iopub.status.idle":"2024-03-23T04:48:26.572241Z","shell.execute_reply.started":"2024-03-23T04:47:28.996793Z","shell.execute_reply":"2024-03-23T04:48:26.570718Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# with open('Evaluate_basemodel.txt','w') as file:\n#     file.write(f'cleanacc: {results_base[1]:.4f}\\n')\n#     file.write(f'cleanloss: {results_base[0]:.4f}\\n')\n#     for mb in metrics_base:\n#         file.write(f\"{mb.name}: {mb.result():.4f}\\n\")","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# tf.keras.backend.clear_session()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# metrics_new = [tf.keras.metrics.SparseCategoricalCrossentropy(name=\"migloss1\"),\n#         tf.keras.metrics.SparseCategoricalCrossentropy(name=\"migloss2\"),\n#         tf.keras.metrics.SparseCategoricalCrossentropy(name=\"migloss3\"),\n#         tf.keras.metrics.SparseCategoricalCrossentropy(name=\"migloss4\"),\n#         tf.keras.metrics.SparseCategoricalCrossentropy(name=\"migloss5\"),\n#         tf.keras.metrics.SparseCategoricalAccuracy(name='migacc1'),\n#         tf.keras.metrics.SparseCategoricalAccuracy(name='migacc2'),\n#         tf.keras.metrics.SparseCategoricalAccuracy(name='migacc3'),\n#         tf.keras.metrics.SparseCategoricalAccuracy(name='migacc4'),\n#         tf.keras.metrics.SparseCategoricalAccuracy(name='migacc5')]","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# resized = []\n# for img in extracted_clean:\n#     resized.append(tf.image.resize(img, [224,224]))\n    \n# resized = tf.stack(resized)\n# extracted_clean = resized\n# del resized","metadata":{"execution":{"iopub.status.busy":"2024-03-23T20:33:16.484215Z","iopub.execute_input":"2024-03-23T20:33:16.484986Z","iopub.status.idle":"2024-03-23T20:33:17.107079Z","shell.execute_reply.started":"2024-03-23T20:33:16.484954Z","shell.execute_reply":"2024-03-23T20:33:17.106278Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# results_new = base_model.evaluate(extracted_clean, extracted_label)\n        \n# #Evaluation newmodel\n# for batch, label in zip(clean_set, label_set):\n#     #batch = tf.image.resize(batch, [224,224])\n#     adv = MIG(base_model, batch, label, 2)\n#     for i in range(5):\n#         y_pred = base_model(adv[i], training=False)\n#         metrics_new[i].update_state(label, y_pred)\n#         metrics_new[i+5].update_state(label, y_pred)","metadata":{"execution":{"iopub.status.busy":"2024-03-23T20:33:19.871639Z","iopub.execute_input":"2024-03-23T20:33:19.87264Z","iopub.status.idle":"2024-03-23T20:33:21.651087Z","shell.execute_reply.started":"2024-03-23T20:33:19.872605Z","shell.execute_reply":"2024-03-23T20:33:21.650266Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# base_model=tf.keras.applications.densenet.DenseNet201(\n#     include_top=True,\n#     weights=None,\n#     classifier_activation='softmax',\n#     classes=1000\n# )\n\n# inputs = tf.keras.layers.Input((224, 224, 3))\n# preprocessing = tf.keras.layers.Lambda(tf.keras.applications.densenet.preprocess_input)(inputs)\n# outputs = base_model(preprocessing)\n\n# base_model= tf.keras.Model(inputs = inputs, outputs = outputs)\n# base_model.compile(optimizer=\"sgd\",loss = \"sparse_categorical_crossentropy\",metrics=['sparse_categorical_accuracy'])\n# base_model.load_weights('/kaggle/input/densenet201-adv-pgd/checkpoint.h5')","metadata":{"execution":{"iopub.status.busy":"2024-06-25T17:34:04.787161Z","iopub.execute_input":"2024-06-25T17:34:04.787514Z","iopub.status.idle":"2024-06-25T17:34:06.784985Z","shell.execute_reply.started":"2024-06-25T17:34:04.787482Z","shell.execute_reply":"2024-06-25T17:34:06.784186Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from tensorflow import keras\nimport tensorflow as tf\nfrom keras_cv.layers import TransformerEncoder\nfrom keras_cv.layers import PatchingAndEmbedding\nfrom tensorflow.keras import layers,utils\n\n@keras.saving.register_keras_serializable()\ndef parse_weights(weights, include_top, model_type):\n    if not weights:\n        return weights\n    if weights.startswith(\"gs://\"):\n        weights = weights.replace(\"gs://\", \"https://storage.googleapis.com/\")\n        return utils.get_file(\n            origin=weights,\n            cache_subdir=\"models\",\n        )\n    if tf.io.gfile.exists(weights):\n        return weights\n    if weights in ALIASES[model_type]:\n        weights = ALIASES[model_type][weights]\n    if weights in WEIGHTS_CONFIG[model_type]:\n        if not include_top:\n            weights = weights + \"-notop\"\n        return utils.get_file(\n            origin=f\"{BASE_PATH}/{model_type}/{weights}.h5\",\n            cache_subdir=\"models\",\n            file_hash=WEIGHTS_CONFIG[model_type][weights],\n        )\n\n    raise ValueError(\n        \"The `weights` argument should be either `None`, a the path to the \"\n        \"weights file to be loaded, or the name of pre-trained weights from \"\n        \"https://github.com/keras-team/keras-cv/blob/master/keras_cv/models/weights.py. \"  # noqa: E501\n        f\"Invalid `weights` argument: {weights}\"\n    )\n\n\nBASE_PATH = \"https://storage.googleapis.com/keras-cv/models\"\n\nALIASES = {\n    \"convmixer_512_16\": {\n        \"imagenet\": \"imagenet/classification-v0\",\n        \"imagenet/classification\": \"imagenet/classification-v0\",\n    },\n    \"cspdarknetl\": {\n        \"imagenet\": \"imagenet/classification-v0\",\n        \"imagenet/classification\": \"imagenet/classification-v0\",\n    },\n    \"cspdarknettiny\": {\n        \"imagenet\": \"imagenet/classification-v0\",\n        \"imagenet/classification\": \"imagenet/classification-v0\",\n    },\n    \"darknet53\": {\n        \"imagenet\": \"imagenet/classification-v0\",\n        \"imagenet/classification\": \"imagenet/classification-v0\",\n    },\n    \"deeplabv3\": {\n        \"voc\": \"voc/segmentation-v0\",\n    },\n    \"densenet121\": {\n        \"imagenet\": \"imagenet/classification-v0\",\n        \"imagenet/classification\": \"imagenet/classification-v0\",\n    },\n    \"densenet169\": {\n        \"imagenet\": \"imagenet/classification-v0\",\n        \"imagenet/classification\": \"imagenet/classification-v0\",\n    },\n    \"densenet201\": {\n        \"imagenet\": \"imagenet/classification-v0\",\n        \"imagenet/classification\": \"imagenet/classification-v0\",\n    },\n    \"resnet50\": {\n        \"imagenet\": \"imagenet/classification-v0\",\n        \"imagenet/classification\": \"imagenet/classification-v0\",\n    },\n    \"resnet50v2\": {\n        \"imagenet\": \"imagenet/classification-v2\",\n        \"imagenet/classification\": \"imagenet/classification-v2\",\n    },\n    \"vittiny16\": {\n        \"imagenet\": \"imagenet/classification-v0\",\n        \"imagenet/classification\": \"imagenet/classification-v0\",\n    },\n    \"vits16\": {\n        \"imagenet\": \"imagenet/classification-v0\",\n        \"imagenet/classification\": \"imagenet/classification-v0\",\n    },\n    \"vitb16\": {\n        \"imagenet\": \"imagenet/classification-v0\",\n        \"imagenet/classification\": \"imagenet/classification-v0\",\n    },\n    \"vitl16\": {\n        \"imagenet\": \"imagenet/classification-v0\",\n        \"imagenet/classification\": \"imagenet/classification-v0\",\n    },\n    \"vits32\": {\n        \"imagenet\": \"imagenet/classification-v0\",\n        \"imagenet/classification\": \"imagenet/classification-v0\",\n    },\n    \"vitb32\": {\n        \"imagenet\": \"imagenet/classification-v0\",\n        \"imagenet/classification\": \"imagenet/classification-v0\",\n    },\n}\n\nWEIGHTS_CONFIG = {\n    \"convmixer_512_16\": {\n        \"imagenet/classification-v0\": \"861f3080dc383f7936d3df89691aadea05eee6acaa4a0b60aa70dd657df915ee\",  # noqa: E501\n        \"imagenet/classification-v0-notop\": \"aa08c7fa9ca6ec045c4783e1248198dbe1bc141e2ae788e712de471c0370822c\",  # noqa: E501\n    },\n    \"cspdarknetl\": {\n        \"imagenet/classification-v0\": \"8bdc3359222f0d26f77aa42c4e97d67a05a1431fe6c448ceeab9a9c5a34ff804\",  # noqa: E501\n        \"imagenet/classification-v0-notop\": \"9303aabfadffbff8447171fce1e941f96d230d8f3cef30d3f05a9c85097f8f1e\",  # noqa: E501\n    },\n    \"cspdarknettiny\": {\n        \"imagenet/classification-v0\": \"c17fe6d7b597f2eb25e42fbd97ec58fb1dad753ba18920cc27820953b7947704\",  # noqa: E501\n        \"imagenet/classification-v0-notop\": \"0007ae82c95be4d4aef06368a7c38e006381324d77e5df029b04890e18a8ad19\",  # noqa: E501\n    },\n    \"darknet53\": {\n        \"imagenet/classification-v0\": \"7bc5589f7f7f7ee3878e61ab9323a71682bfb617eb57f530ca8757c742f00c77\",  # noqa: E501\n        \"imagenet/classification-v0-notop\": \"8dcce43163e4b4a63e74330ba1902e520211db72d895b0b090b6bfe103e7a8a5\",  # noqa: E501\n    },\n    \"deeplabv3\": {\n        \"voc/segmentation-v0\": \"732042e8b6c9ddba3d51c861f26dc41865187e9f85a0e5d43dfef75a405cca18\",  # noqa: E501\n    },\n    \"densenet121\": {\n        \"imagenet/classification-v0\": \"13de3d077ad9d9816b9a0acc78215201d9b6e216c7ed8e71d69cc914f8f0775b\",  # noqa: E501\n        \"imagenet/classification-v0-notop\": \"709afe0321d9f2b2562e562ff9d0dc44cca10ed09e0e2cfba08d783ff4dab6bf\",  # noqa: E501\n    },\n    \"densenet169\": {\n        \"imagenet/classification-v0\": \"4cd2a661d0cb2378574073b23129ee4d06ea53c895c62a8863c44ee039e236a1\",  # noqa: E501\n        \"imagenet/classification-v0-notop\": \"a99d1bb2cbe1a59a1cdd1f435fb265453a97c2a7b723d26f4ebee96e5fb49d62\",  # noqa: E501\n    },\n    \"densenet201\": {\n        \"imagenet/classification-v0\": \"3b6032e744e5e5babf7457abceaaba11fcd449fe2d07016ae5076ac3c3c6cf0c\",  # noqa: E501\n        \"imagenet/classification-v0-notop\": \"c1189a934f12c1a676a9cf52238e5994401af925e2adfc0365bad8133c052060\",  # noqa: E501\n    },\n    \"resnet50\": {\n        \"imagenet/classification-v0\": \"1525dc1ce580239839ba6848c0f1b674dc89cb9ed73c4ed49eba355b35eac3ce\",  # noqa: E501\n        \"imagenet/classification-v0-notop\": \"dc5f6d8f929c78d0fc192afecc67b11ac2166e9d8b9ef945742368ae254c07af\",  # noqa: E501\n    },\n    \"resnet50v2\": {\n        \"imagenet/classification-v0\": \"11bde945b54d1dca65101be2648048abca8a96a51a42820d87403486389790db\",  # noqa: E501\n        \"imagenet/classification-v0-notop\": \"5b4aca4932c433d84f6aef58135472a4312ed2fa565d53fedcd6b0c24b54ab4a\",  # noqa: E501\n        \"imagenet/classification-v1\": \"a32e5d9998e061527f6f947f36d8e794ad54dad71edcd8921cda7804912f3ee7\",  # noqa: E501\n        \"imagenet/classification-v1-notop\": \"ac46b82c11070ab2f69673c41fbe5039c9eb686cca4f34cd1d79412fd136f1ae\",  # noqa: E501\n        \"imagenet/classification-v2\": \"5ee5a8ac650aaa59342bc48ffe770e6797a5550bcc35961e1d06685292c15921\",  # noqa: E501\n        \"imagenet/classification-v2-notop\": \"e711c83d6db7034871f6d345a476c8184eab99dbf3ffcec0c1d8445684890ad9\",  # noqa: E501\n    },\n    \"vittiny16\": {\n        \"imagenet/classification-v0\": \"c8227fde16ec8c2e7ab886169b11b4f0ca9af2696df6d16767db20acc9f6e0dd\",  # noqa: E501\n        \"imagenet/classification-v0-notop\": \"aa4d727e3c6bd30b20f49d3fa294fb4bbef97365c7dcb5cee9c527e4e83c8f5b\",  # noqa: E501\n    },\n    \"vits16\": {\n        \"imagenet/classification-v0\": \"4a66a1a70a879ff33a3ca6ca30633b9eadafea84b421c92174557eee83e088b5\",  # noqa: E501\n        \"imagenet/classification-v0-notop\": \"8d0111eda6692096676a5453abfec5d04c79e2de184b04627b295f10b1949745\",  # noqa: E501\n    },\n    \"vitb16\": {\n        \"imagenet/classification-v0\": \"6ab4e08c773e08de42023d963a97e905ccba710e2c05ef60c0971978d4a8c41b\",  # noqa: E501\n        \"imagenet/classification-v0-notop\": \"4a1bdd32889298471cb4f30882632e5744fd519bf1a1525b1fa312fe4ea775ed\",  # noqa: E501\n    },\n    \"vitl16\": {\n        \"imagenet/classification-v0\": \"5a98000f848f2e813ea896b2528983d8d956f8c4b76ceed0b656219d5b34f7fb\",  # noqa: E501\n        \"imagenet/classification-v0-notop\": \"40d237c44f14d20337266fce6192c00c2f9b890a463fd7f4cb17e8e35b3f5448\",  # noqa: E501\n    },\n    \"vits32\": {\n        \"imagenet/classification-v0\": \"f5836e3aff2bab202eaee01d98337a08258159d3b718e0421834e98b3665e10a\",  # noqa: E501\n        \"imagenet/classification-v0-notop\": \"f3907845eff780a4d29c1c56e0ae053411f02fff6fdce1147c4c3bb2124698cd\",  # noqa: E501\n    },\n    \"vitb32\": {\n        \"imagenet/classification-v0\": \"73025caa78459dc8f9b1de7b58f1d64e24a823f170d17e25fcc8eb6179bea179\",  # noqa: E501\n        \"imagenet/classification-v0-notop\": \"f07b80c03336d731a2a3a02af5cac1e9fc9aa62659cd29e2e7e5c7474150cc71\",  # noqa: E501\n    },\n}\n@keras.saving.register_keras_serializable()\ndef parse_model_inputs(input_shape, input_tensor, **kwargs):\n    if input_tensor is None:\n        return tf.keras.layers.Input(shape=input_shape, **kwargs)\n    else:\n        if not tf.keras.backend.is_keras_tensor(input_tensor):\n            return tf.keras.layers.Input(\n                tensor=input_tensor, shape=input_shape, **kwargs\n            )\n        else:\n            return input_tensor\nMODEL_CONFIGS = {\n    \"ViTTiny16\": {\n        \"patch_size\": 16,\n        \"transformer_layer_num\": 12,\n        \"project_dim\": 192,\n        \"mlp_dim\": 768,\n        \"num_heads\": 3,\n        \"mlp_dropout\": 0.0,\n        \"attention_dropout\": 0.0,\n    },\n    \"ViTS16\": {\n        \"patch_size\": 16,\n        \"transformer_layer_num\": 12,\n        \"project_dim\": 384,\n        \"mlp_dim\": 1536,\n        \"num_heads\": 6,\n        \"mlp_dropout\": 0.0,\n        \"attention_dropout\": 0.0,\n    },\n    \"ViTB16\": {\n        \"patch_size\": 16,\n        \"transformer_layer_num\": 12,\n        \"project_dim\": 768,\n        \"mlp_dim\": 3072,\n        \"num_heads\": 12,\n        \"mlp_dropout\": 0.0,\n        \"attention_dropout\": 0.0,\n    },\n    \"ViTL16\": {\n        \"patch_size\": 16,\n        \"transformer_layer_num\": 24,\n        \"project_dim\": 1024,\n        \"mlp_dim\": 4096,\n        \"num_heads\": 16,\n        \"mlp_dropout\": 0.0,\n        \"attention_dropout\": 0.0,\n    },\n    \"ViTH16\": {\n        \"patch_size\": 16,\n        \"transformer_layer_num\": 32,\n        \"project_dim\": 1280,\n        \"mlp_dim\": 5120,\n        \"num_heads\": 16,\n        \"mlp_dropout\": 0.1,\n        \"attention_dropout\": 0.0,\n    },\n    \"ViTTiny32\": {\n        \"patch_size\": 32,\n        \"transformer_layer_num\": 12,\n        \"project_dim\": 192,\n        \"mlp_dim\": 768,\n        \"num_heads\": 3,\n        \"mlp_dropout\": 0.0,\n        \"attention_dropout\": 0.0,\n    },\n    \"ViTS32\": {\n        \"patch_size\": 32,\n        \"transformer_layer_num\": 12,\n        \"project_dim\": 384,\n        \"mlp_dim\": 1536,\n        \"num_heads\": 6,\n        \"mlp_dropout\": 0.0,\n        \"attention_dropout\": 0.0,\n    },\n    \"ViTB32\": {\n        \"patch_size\": 32,\n        \"transformer_layer_num\": 12,\n        \"project_dim\": 768,\n        \"mlp_dim\": 3072,\n        \"num_heads\": 12,\n        \"mlp_dropout\": 0.0,\n        \"attention_dropout\": 0.0,\n    },\n    \"ViTL32\": {\n        \"patch_size\": 32,\n        \"transformer_layer_num\": 24,\n        \"project_dim\": 1024,\n        \"mlp_dim\": 4096,\n        \"num_heads\": 16,\n        \"mlp_dropout\": 0.1,\n        \"attention_dropout\": 0.0,\n    },\n    \"ViTH32\": {\n        \"patch_size\": 32,\n        \"transformer_layer_num\": 32,\n        \"project_dim\": 1280,\n        \"mlp_dim\": 5120,\n        \"num_heads\": 16,\n        \"mlp_dropout\": 0.1,\n        \"attention_dropout\": 0.0,\n    },\n}\n@keras.saving.register_keras_serializable()\nclass ViT(keras.Model):\n    def __init__(\n        self,\n        include_rescaling,\n        include_top,\n        weights=None,\n        input_shape=(None, None, 3),\n        input_tensor=None,\n        pooling=None,\n        num_classes=None,\n        patch_size=None,\n        transformer_layer_num=None,\n        num_heads=None,\n        mlp_dropout=None,\n        attention_dropout=None,\n        activation=None,\n        project_dim=None,\n        mlp_dim=None,\n        classifier_activation=\"softmax\",\n        **kwargs,\n    ):\n        if weights and not tf.io.gfile.exists(weights):\n            raise ValueError(\n                \"The `weights` argument should be either `None` or the path \"\n                \"to the weights file to be loaded. Weights file not found at \"\n                \"location: {weights}\"\n            )\n\n        if include_top and not num_classes:\n            raise ValueError(\n                \"If `include_top` is True, you should specify `num_classes`. \"\n                f\"Received: num_classes={num_classes}\"\n            )\n\n        if include_top and pooling:\n            raise ValueError(\n                f\"`pooling` must be `None` when `include_top=True`.\"\n                f\"Received pooling={pooling} and include_top={include_top}. \"\n            )\n\n        inputs = parse_model_inputs(input_shape, input_tensor)\n        x = inputs\n\n        if include_rescaling:\n            x = layers.Rescaling(1.0 / 255.0, name=\"rescaling\")(x)\n\n        # The previous layer rescales [0..255] to [0..1] if applicable\n        # This one rescales [0..1] to [-1..1] since ViTs expect [-1..1]\n        x = layers.Rescaling(scale=1.0 / 0.5, offset=-1.0, name=\"rescaling_2\")(\n            x\n        )\n\n        encoded_patches = PatchingAndEmbedding(project_dim, patch_size)(x)\n        encoded_patches = layers.Dropout(mlp_dropout)(encoded_patches)\n\n        for _ in range(transformer_layer_num):\n            encoded_patches = TransformerEncoder(\n                project_dim=project_dim,\n                mlp_dim=mlp_dim,\n                num_heads=num_heads,\n                mlp_dropout=mlp_dropout,\n                attention_dropout=attention_dropout,\n                activation=activation,\n            )(encoded_patches)\n\n        output = layers.LayerNormalization(epsilon=1e-6)(encoded_patches)\n\n        if include_top:\n            output = output[:, 0]\n            output = layers.Dense(\n                num_classes, activation=classifier_activation\n            )(output)\n\n        elif pooling == \"token_pooling\":\n            output = output[:, 0]\n        elif pooling == \"avg\":\n            output = layers.GlobalAveragePooling1D()(output)\n\n        # Create model.\n        super().__init__(inputs=inputs, outputs=output, **kwargs)\n\n        if weights is not None:\n            self.load_weights(weights)\n\n        self.include_rescaling = include_rescaling\n        self.include_top = include_top\n        self.input_tensor = input_tensor\n        self.pooling = pooling\n        self.num_classes = num_classes\n        self.patch_size = patch_size\n        self.transformer_layer_num = transformer_layer_num\n        self.num_heads = num_heads\n        self.mlp_dropout = mlp_dropout\n        self.attention_dropout = attention_dropout\n        self.activation = activation\n        self.project_dim = project_dim\n        self.mlp_dim = mlp_dim\n        self.classifier_activation = classifier_activation\n\n    def get_config(self):\n        return {\n            \"include_rescaling\": self.include_rescaling,\n            \"include_top\": self.include_top,\n            \"name\": self.name,\n            \"input_shape\": self.input_shape[1:],\n            \"input_tensor\": self.input_tensor,\n            \"pooling\": self.pooling,\n            \"num_classes\": self.num_classes,\n            \"patch_size\": self.patch_size,\n            \"transformer_layer_num\": self.transformer_layer_num,\n            \"num_heads\": self.num_heads,\n            \"mlp_dropout\": self.mlp_dropout,\n            \"attention_dropout\": self.attention_dropout,\n            \"activation\": self.activation,\n            \"project_dim\": self.project_dim,\n            \"mlp_dim\": self.mlp_dim,\n            \"classifier_activation\": self.classifier_activation,\n            \"trainable\": self.trainable,\n        }\n\n    @classmethod\n    def from_config(cls, config):\n        return cls(**config)\n\n\ndef ViTTiny16(\n    *,\n    include_rescaling,\n    include_top,\n    name=\"ViTTiny16\",\n    weights=None,\n    input_shape=(None, None, 3),\n    input_tensor=None,\n    pooling=None,\n    num_classes=None,\n    activation=keras.activations.gelu,\n    classifier_activation=\"softmax\",\n    **kwargs,\n):\n    \"\"\"Instantiates the ViTTiny16 architecture.\"\"\"\n\n    return ViT(\n        include_rescaling,\n        include_top,\n        name=name,\n        weights=parse_weights(weights, include_top, \"vittiny16\"),\n        input_shape=input_shape,\n        input_tensor=input_tensor,\n        pooling=pooling,\n        num_classes=num_classes,\n        patch_size=MODEL_CONFIGS[\"ViTTiny16\"][\"patch_size\"],\n        transformer_layer_num=MODEL_CONFIGS[\"ViTTiny16\"][\n            \"transformer_layer_num\"\n        ],\n        project_dim=MODEL_CONFIGS[\"ViTTiny16\"][\"project_dim\"],\n        mlp_dim=MODEL_CONFIGS[\"ViTTiny16\"][\"mlp_dim\"],\n        num_heads=MODEL_CONFIGS[\"ViTTiny16\"][\"num_heads\"],\n        mlp_dropout=MODEL_CONFIGS[\"ViTTiny16\"][\"mlp_dropout\"],\n        attention_dropout=MODEL_CONFIGS[\"ViTTiny16\"][\"attention_dropout\"],\n        activation=activation,\n        classifier_activation=classifier_activation,\n        **kwargs,\n    )\n\n\ndef ViTS16(\n    *,\n    include_rescaling,\n    include_top,\n    name=\"ViTS16\",\n    weights=None,\n    input_shape=(None, None, 3),\n    input_tensor=None,\n    pooling=None,\n    num_classes=None,\n    activation=keras.activations.gelu,\n    classifier_activation=\"softmax\",\n    **kwargs,\n):\n    \"\"\"Instantiates the ViTS16 architecture.\"\"\"\n\n    return ViT(\n        include_rescaling,\n        include_top,\n        name=name,\n        weights=parse_weights(weights, include_top, \"vits16\"),\n        input_shape=input_shape,\n        input_tensor=input_tensor,\n        pooling=pooling,\n        num_classes=num_classes,\n        patch_size=MODEL_CONFIGS[\"ViTS16\"][\"patch_size\"],\n        transformer_layer_num=MODEL_CONFIGS[\"ViTB32\"][\"transformer_layer_num\"],\n        project_dim=MODEL_CONFIGS[\"ViTS16\"][\"project_dim\"],\n        mlp_dim=MODEL_CONFIGS[\"ViTS16\"][\"mlp_dim\"],\n        num_heads=MODEL_CONFIGS[\"ViTS16\"][\"num_heads\"],\n        mlp_dropout=MODEL_CONFIGS[\"ViTS16\"][\"mlp_dropout\"],\n        attention_dropout=MODEL_CONFIGS[\"ViTS16\"][\"attention_dropout\"],\n        activation=activation,\n        classifier_activation=classifier_activation,\n        **kwargs,\n    )\n\n\ndef ViTB16(\n    *,\n    include_rescaling,\n    include_top,\n    name=\"ViTB16\",\n    weights=None,\n    input_shape=(None, None, 3),\n    input_tensor=None,\n    pooling=None,\n    num_classes=None,\n    activation=keras.activations.gelu,\n    classifier_activation=\"softmax\",\n    **kwargs,\n):\n    \"\"\"Instantiates the ViTB16 architecture.\"\"\"\n\n    return ViT(\n        include_rescaling,\n        include_top,\n        name=name,\n        weights=parse_weights(weights, include_top, \"vitb16\"),\n        input_shape=input_shape,\n        input_tensor=input_tensor,\n        pooling=pooling,\n        num_classes=num_classes,\n        patch_size=MODEL_CONFIGS[\"ViTB16\"][\"patch_size\"],\n        transformer_layer_num=MODEL_CONFIGS[\"ViTB16\"][\"transformer_layer_num\"],\n        project_dim=MODEL_CONFIGS[\"ViTB16\"][\"project_dim\"],\n        mlp_dim=MODEL_CONFIGS[\"ViTB16\"][\"mlp_dim\"],\n        num_heads=MODEL_CONFIGS[\"ViTB16\"][\"num_heads\"],\n        mlp_dropout=MODEL_CONFIGS[\"ViTB16\"][\"mlp_dropout\"],\n        attention_dropout=MODEL_CONFIGS[\"ViTB16\"][\"attention_dropout\"],\n        activation=activation,\n        classifier_activation=classifier_activation,\n        **kwargs,\n    )\n\n\ndef ViTL16(\n    *,\n    include_rescaling,\n    include_top,\n    name=\"ViTL16\",\n    weights=None,\n    input_shape=(None, None, 3),\n    input_tensor=None,\n    pooling=None,\n    num_classes=None,\n    activation=keras.activations.gelu,\n    classifier_activation=\"softmax\",\n    **kwargs,\n):\n    \"\"\"Instantiates the ViTL16 architecture.\"\"\"\n\n    return ViT(\n        include_rescaling,\n        include_top,\n        name=name,\n        weights=parse_weights(weights, include_top, \"vitl16\"),\n        input_shape=input_shape,\n        input_tensor=input_tensor,\n        pooling=pooling,\n        num_classes=num_classes,\n        patch_size=MODEL_CONFIGS[\"ViTL16\"][\"patch_size\"],\n        transformer_layer_num=MODEL_CONFIGS[\"ViTL16\"][\"transformer_layer_num\"],\n        project_dim=MODEL_CONFIGS[\"ViTL16\"][\"project_dim\"],\n        mlp_dim=MODEL_CONFIGS[\"ViTL16\"][\"mlp_dim\"],\n        num_heads=MODEL_CONFIGS[\"ViTL16\"][\"num_heads\"],\n        mlp_dropout=MODEL_CONFIGS[\"ViTL16\"][\"mlp_dropout\"],\n        attention_dropout=MODEL_CONFIGS[\"ViTL16\"][\"attention_dropout\"],\n        activation=activation,\n        classifier_activation=classifier_activation,\n        **kwargs,\n    )\n\n\ndef ViTH16(\n    *,\n    include_rescaling,\n    include_top,\n    name=\"ViTH16\",\n    weights=None,\n    input_shape=(None, None, 3),\n    input_tensor=None,\n    pooling=None,\n    num_classes=None,\n    activation=keras.activations.gelu,\n    classifier_activation=\"softmax\",\n    **kwargs,\n):\n    \"\"\"Instantiates the ViTH16 architecture.\"\"\"\n\n    return ViT(\n        include_rescaling,\n        include_top,\n        name=name,\n        weights=weights,\n        input_shape=input_shape,\n        input_tensor=input_tensor,\n        pooling=pooling,\n        num_classes=num_classes,\n        patch_size=MODEL_CONFIGS[\"ViTH16\"][\"patch_size\"],\n        transformer_layer_num=MODEL_CONFIGS[\"ViTH16\"][\"transformer_layer_num\"],\n        project_dim=MODEL_CONFIGS[\"ViTH16\"][\"project_dim\"],\n        mlp_dim=MODEL_CONFIGS[\"ViTH16\"][\"mlp_dim\"],\n        num_heads=MODEL_CONFIGS[\"ViTH16\"][\"num_heads\"],\n        mlp_dropout=MODEL_CONFIGS[\"ViTH16\"][\"mlp_dropout\"],\n        attention_dropout=MODEL_CONFIGS[\"ViTH16\"][\"attention_dropout\"],\n        activation=activation,\n        classifier_activation=classifier_activation,\n        **kwargs,\n    )\n\n\ndef ViTTiny32(\n    *,\n    include_rescaling,\n    include_top,\n    name=\"ViTTiny32\",\n    weights=None,\n    input_shape=(None, None, 3),\n    input_tensor=None,\n    pooling=None,\n    num_classes=None,\n    activation=keras.activations.gelu,\n    classifier_activation=\"softmax\",\n    **kwargs,\n):\n    \"\"\"Instantiates the ViTTiny32 architecture.\"\"\"\n\n    return ViT(\n        include_rescaling,\n        include_top,\n        name=name,\n        weights=weights,\n        input_shape=input_shape,\n        input_tensor=input_tensor,\n        pooling=pooling,\n        num_classes=num_classes,\n        patch_size=MODEL_CONFIGS[\"ViTTiny32\"][\"patch_size\"],\n        transformer_layer_num=MODEL_CONFIGS[\"ViTTiny32\"][\n            \"transformer_layer_num\"\n        ],\n        project_dim=MODEL_CONFIGS[\"ViTTiny32\"][\"project_dim\"],\n        mlp_dim=MODEL_CONFIGS[\"ViTTiny32\"][\"mlp_dim\"],\n        num_heads=MODEL_CONFIGS[\"ViTTiny32\"][\"num_heads\"],\n        mlp_dropout=MODEL_CONFIGS[\"ViTTiny32\"][\"mlp_dropout\"],\n        attention_dropout=MODEL_CONFIGS[\"ViTTiny32\"][\"attention_dropout\"],\n        activation=activation,\n        classifier_activation=classifier_activation,\n        **kwargs,\n    )\n\n\ndef ViTS32(\n    *,\n    include_rescaling,\n    include_top,\n    name=\"ViTS32\",\n    weights=None,\n    input_shape=(None, None, 3),\n    input_tensor=None,\n    pooling=None,\n    num_classes=None,\n    activation=keras.activations.gelu,\n    classifier_activation=\"softmax\",\n    **kwargs,\n):\n    \"\"\"Instantiates the ViTS32 architecture.\"\"\"\n\n    return ViT(\n        include_rescaling,\n        include_top,\n        name=name,\n        weights=parse_weights(weights, include_top, \"vits32\"),\n        input_shape=input_shape,\n        input_tensor=input_tensor,\n        pooling=pooling,\n        num_classes=num_classes,\n        patch_size=MODEL_CONFIGS[\"ViTS32\"][\"patch_size\"],\n        transformer_layer_num=MODEL_CONFIGS[\"ViTS32\"][\"transformer_layer_num\"],\n        project_dim=MODEL_CONFIGS[\"ViTS32\"][\"project_dim\"],\n        mlp_dim=MODEL_CONFIGS[\"ViTS32\"][\"mlp_dim\"],\n        num_heads=MODEL_CONFIGS[\"ViTS32\"][\"num_heads\"],\n        mlp_dropout=MODEL_CONFIGS[\"ViTS32\"][\"mlp_dropout\"],\n        attention_dropout=MODEL_CONFIGS[\"ViTS32\"][\"attention_dropout\"],\n        activation=activation,\n        classifier_activation=classifier_activation,\n        **kwargs,\n    )\n\n\ndef ViTB32(\n    *,\n    include_rescaling,\n    include_top,\n    name=\"ViTB32\",\n    weights=None,\n    input_shape=(None, None, 3),\n    input_tensor=None,\n    pooling=None,\n    num_classes=None,\n    activation=keras.activations.gelu,\n    classifier_activation=\"softmax\",\n    **kwargs,\n):\n    \"\"\"Instantiates the ViTB32 architecture.\"\"\"\n\n    return ViT(\n        include_rescaling,\n        include_top,\n        name=name,\n        weights=parse_weights(weights, include_top, \"vitb32\"),\n        input_shape=input_shape,\n        input_tensor=input_tensor,\n        pooling=pooling,\n        num_classes=num_classes,\n        patch_size=MODEL_CONFIGS[\"ViTB32\"][\"patch_size\"],\n        transformer_layer_num=MODEL_CONFIGS[\"ViTB32\"][\"transformer_layer_num\"],\n        project_dim=MODEL_CONFIGS[\"ViTB32\"][\"project_dim\"],\n        mlp_dim=MODEL_CONFIGS[\"ViTB32\"][\"mlp_dim\"],\n        num_heads=MODEL_CONFIGS[\"ViTB32\"][\"num_heads\"],\n        mlp_dropout=MODEL_CONFIGS[\"ViTB32\"][\"mlp_dropout\"],\n        attention_dropout=MODEL_CONFIGS[\"ViTB32\"][\"attention_dropout\"],\n        activation=activation,\n        classifier_activation=classifier_activation,\n        **kwargs,\n    )\n\n\ndef ViTL32(\n    *,\n    include_rescaling,\n    include_top,\n    name=\"ViTL32\",\n    weights=None,\n    input_shape=(None, None, 3),\n    input_tensor=None,\n    pooling=None,\n    num_classes=None,\n    activation=keras.activations.gelu,\n    classifier_activation=\"softmax\",\n    **kwargs,\n):\n    \"\"\"Instantiates the ViTL32 architecture.\"\"\"\n\n    return ViT(\n        include_rescaling,\n        include_top,\n        name=name,\n        weights=weights,\n        input_shape=input_shape,\n        input_tensor=input_tensor,\n        pooling=pooling,\n        num_classes=num_classes,\n        patch_size=MODEL_CONFIGS[\"ViTL32\"][\"patch_size\"],\n        transformer_layer_num=MODEL_CONFIGS[\"ViTL32\"][\"transformer_layer_num\"],\n        project_dim=MODEL_CONFIGS[\"ViTL32\"][\"project_dim\"],\n        mlp_dim=MODEL_CONFIGS[\"ViTL32\"][\"mlp_dim\"],\n        num_heads=MODEL_CONFIGS[\"ViTL32\"][\"num_heads\"],\n        mlp_dropout=MODEL_CONFIGS[\"ViTL32\"][\"mlp_dropout\"],\n        attention_dropout=MODEL_CONFIGS[\"ViTL32\"][\"attention_dropout\"],\n        activation=activation,\n        classifier_activation=classifier_activation,\n        **kwargs,\n    )\n\n\ndef ViTH32(\n    *,\n    include_rescaling,\n    include_top,\n    name=\"ViTH32\",\n    weights=None,\n    input_shape=(None, None, 3),\n    input_tensor=None,\n    pooling=None,\n    num_classes=None,\n    activation=keras.activations.gelu,\n    classifier_activation=\"softmax\",\n    **kwargs,\n):\n    \"\"\"Instantiates the ViTH32 architecture.\"\"\"\n\n    return ViT(\n        include_rescaling,\n        include_top,\n        name=name,\n        weights=weights,\n        input_shape=input_shape,\n        input_tensor=input_tensor,\n        pooling=pooling,\n        num_classes=num_classes,\n        patch_size=MODEL_CONFIGS[\"ViTH32\"][\"patch_size\"],\n        transformer_layer_num=MODEL_CONFIGS[\"ViTH32\"][\"transformer_layer_num\"],\n        project_dim=MODEL_CONFIGS[\"ViTH32\"][\"project_dim\"],\n        mlp_dim=MODEL_CONFIGS[\"ViTH32\"][\"mlp_dim\"],\n        num_heads=MODEL_CONFIGS[\"ViTH32\"][\"num_heads\"],\n        mlp_dropout=MODEL_CONFIGS[\"ViTH32\"][\"mlp_dropout\"],\n        attention_dropout=MODEL_CONFIGS[\"ViTH32\"][\"attention_dropout\"],\n        activation=activation,\n        classifier_activation=classifier_activation,\n        **kwargs,\n    )","metadata":{"execution":{"iopub.status.busy":"2024-09-09T15:56:12.775223Z","iopub.execute_input":"2024-09-09T15:56:12.775546Z","iopub.status.idle":"2024-09-09T15:56:12.854203Z","shell.execute_reply.started":"2024-09-09T15:56:12.77552Z","shell.execute_reply":"2024-09-09T15:56:12.853386Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"base_model = ViTB16(\n        include_rescaling=True,\n        include_top=True,\n        num_classes=1000,\n        weights=None,\n        classifier_activation='softmax',\n        input_shape=(224, 224, 3)\n)\n\nbase_model.compile(optimizer=\"sgd\",loss = \"sparse_categorical_crossentropy\",metrics=['sparse_categorical_accuracy'])\nbase_model.load_weights('/kaggle/input/vit16base-adv-pgd/checkpoint.h5')","metadata":{"execution":{"iopub.status.busy":"2024-09-09T15:56:24.2139Z","iopub.execute_input":"2024-09-09T15:56:24.214528Z","iopub.status.idle":"2024-09-09T15:56:31.348184Z","shell.execute_reply.started":"2024-09-09T15:56:24.214497Z","shell.execute_reply":"2024-09-09T15:56:31.347136Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#loss = tf.keras.metrics.SparseCategoricalCrossentropy(name=\"loss\")\ncat = tf.keras.metrics.SparseCategoricalAccuracy(name='acc')\nacc = []\nresults = base_model.evaluate(eval_set)\nacc.append(results[1])\n\n#Evaluation newmodel\nfor eps in np.arange(0.1,5.1,0.1):\n    for batch, label in eval_set:\n        #batch = tf.image.resize(batch, [224,224])\n        adv = projected_gradient_descent(base_model,batch,eps,eps/20,20,np.inf,y =  label)\n        y_pred = base_model(adv, training=False)\n        #loss.update_state(label, y_pred)\n        cat.update_state(label, y_pred)\n    acc.append(tf.get_static_value(cat.result()))\n    #los.append(tf.get_static_value(loss.result()))\n    #loss.reset_state()\n    cat.reset_state()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"acc","metadata":{"execution":{"iopub.status.busy":"2024-06-25T00:42:38.360698Z","iopub.execute_input":"2024-06-25T00:42:38.361602Z","iopub.status.idle":"2024-06-25T00:42:38.368952Z","shell.execute_reply.started":"2024-06-25T00:42:38.361557Z","shell.execute_reply":"2024-06-25T00:42:38.367763Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.plot(np.arange(0,5.1,0.1), acc)\nplt.xlabel('Epsilon')\nplt.ylabel('Accuracy (%)')\nplt.title(\"ResNetRS152 adversarial trained\")\nplt.grid()\n#plt.legend()\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2024-06-25T00:42:17.027996Z","iopub.execute_input":"2024-06-25T00:42:17.028391Z","iopub.status.idle":"2024-06-25T00:42:17.315005Z","shell.execute_reply.started":"2024-06-25T00:42:17.028361Z","shell.execute_reply":"2024-06-25T00:42:17.314098Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# with open('Evaluate_newmodel.txt','w') as file:\n#     file.write(f'cleanacc: {results_new[1]:.4f}\\n')\n#     file.write(f'cleanloss: {results_new[0]:.4f}\\n')\n#     for mb in metrics_new:\n#         file.write(f\"{mb.name}: {mb.result():.4f}\\n\")","metadata":{},"execution_count":null,"outputs":[]}]}