{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"# # This Python 3 environment comes with many helpful analytics libraries installed\n# # It is defined by the kaggle/python Docker image: https://github.com/kaggle/docker-python\n# # For example, here's several helpful packages to load\n\n# import numpy as np # linear algebra\n# import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\n# # Input data files are available in the read-only \"../input/\" directory\n# # For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n\n# import os\n# for dirname, _, filenames in os.walk('/kaggle/input'):\n#     for filename in filenames:\n#         print(os.path.join(dirname, filename))\n#         break\n\n# # You can write up to 20GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using \"Save & Run All\" \n# # You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2023-10-19T07:35:40.64939Z","iopub.execute_input":"2023-10-19T07:35:40.649712Z","iopub.status.idle":"2023-10-19T07:35:40.65421Z","shell.execute_reply.started":"2023-10-19T07:35:40.649687Z","shell.execute_reply":"2023-10-19T07:35:40.653283Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Import All Libraries","metadata":{}},{"cell_type":"code","source":"import warnings\nwarnings.filterwarnings('ignore')\n\nimport os\nimport pandas as pd\nimport numpy as np\nimport matplotlib.pyplot as plt\n%matplotlib inline\nimport seaborn as sns\nfrom sklearn.metrics import classification_report , confusion_matrix , accuracy_score , auc\nfrom sklearn.model_selection import train_test_split\n\nimport cv2\n#from google.colab.patches import cv2_imshow\nfrom PIL import Image \nimport tensorflow as tf\nfrom tensorflow import keras\nfrom keras import Sequential\nfrom keras.layers import Input, Dense,Conv2D , MaxPooling2D, Flatten,BatchNormalization,Dropout\nfrom tensorflow.keras.preprocessing import image_dataset_from_directory\nimport tensorflow_hub as hub ","metadata":{"execution":{"iopub.status.busy":"2023-10-19T07:35:40.679195Z","iopub.execute_input":"2023-10-19T07:35:40.679428Z","iopub.status.idle":"2023-10-19T07:35:52.338821Z","shell.execute_reply.started":"2023-10-19T07:35:40.679408Z","shell.execute_reply":"2023-10-19T07:35:52.337941Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_csv_path = \"/kaggle/input/UBC-OCEAN/train.csv\"\n\ntrain_df = pd.read_csv(train_csv_path)\ntrain_df","metadata":{"execution":{"iopub.status.busy":"2023-10-19T07:35:52.340375Z","iopub.execute_input":"2023-10-19T07:35:52.340811Z","iopub.status.idle":"2023-10-19T07:35:52.380659Z","shell.execute_reply.started":"2023-10-19T07:35:52.340787Z","shell.execute_reply":"2023-10-19T07:35:52.379733Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sns.countplot(x=train_df['label'])\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2023-10-19T07:35:52.381785Z","iopub.execute_input":"2023-10-19T07:35:52.382092Z","iopub.status.idle":"2023-10-19T07:35:52.602996Z","shell.execute_reply.started":"2023-10-19T07:35:52.382068Z","shell.execute_reply":"2023-10-19T07:35:52.602018Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sns.scatterplot(x=train_df['image_width'],y=train_df['image_height'],hue=train_df['label'])\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2023-10-19T07:35:52.604734Z","iopub.execute_input":"2023-10-19T07:35:52.604974Z","iopub.status.idle":"2023-10-19T07:35:52.967265Z","shell.execute_reply.started":"2023-10-19T07:35:52.604953Z","shell.execute_reply":"2023-10-19T07:35:52.966417Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df['is_tma'] = train_df['is_tma'].astype('int8')","metadata":{"execution":{"iopub.status.busy":"2023-10-19T07:35:52.968607Z","iopub.execute_input":"2023-10-19T07:35:52.968922Z","iopub.status.idle":"2023-10-19T07:35:52.973504Z","shell.execute_reply.started":"2023-10-19T07:35:52.968894Z","shell.execute_reply":"2023-10-19T07:35:52.972771Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df['is_tma'].value_counts().plot(kind=\"pie\",autopct=\"%.1f%%\")\nplt.title(\"Image Distributions on Train Data\")\nplt.legend()\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2023-10-19T07:35:52.974544Z","iopub.execute_input":"2023-10-19T07:35:52.975098Z","iopub.status.idle":"2023-10-19T07:35:53.137157Z","shell.execute_reply.started":"2023-10-19T07:35:52.975068Z","shell.execute_reply":"2023-10-19T07:35:53.136105Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_thumbnails = os.listdir(\"/kaggle/input/UBC-OCEAN/train_thumbnails\")\ntrain_images = os.listdir(\"/kaggle/input/UBC-OCEAN/train_images\")","metadata":{"execution":{"iopub.status.busy":"2023-10-19T07:35:53.138655Z","iopub.execute_input":"2023-10-19T07:35:53.139779Z","iopub.status.idle":"2023-10-19T07:35:53.246226Z","shell.execute_reply.started":"2023-10-19T07:35:53.139736Z","shell.execute_reply":"2023-10-19T07:35:53.245498Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"class_labels = ['CC', 'EC', 'HGSC', 'LGSC', 'MC','Other']\ntrain_df['label'] = train_df['label'].replace({'CC':0, 'EC':1, 'HGSC':2, 'LGSC':3, 'MC':4,'Other':5})\ntrain_df.head()","metadata":{"execution":{"iopub.status.busy":"2023-10-19T07:35:53.247213Z","iopub.execute_input":"2023-10-19T07:35:53.247435Z","iopub.status.idle":"2023-10-19T07:35:53.259162Z","shell.execute_reply.started":"2023-10-19T07:35:53.247415Z","shell.execute_reply":"2023-10-19T07:35:53.258351Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df['image_id']=train_df['image_id'].astype(\"int32\")\ntrain_df['label']=train_df['label'].astype(\"int8\")\ntrain_df['image_width']=train_df['image_width'].astype(\"int32\")\ntrain_df['image_height']=train_df['image_height'].astype(\"int32\")","metadata":{"execution":{"iopub.status.busy":"2023-10-19T07:35:53.260195Z","iopub.execute_input":"2023-10-19T07:35:53.260624Z","iopub.status.idle":"2023-10-19T07:35:53.267786Z","shell.execute_reply.started":"2023-10-19T07:35:53.260602Z","shell.execute_reply":"2023-10-19T07:35:53.267132Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#train_df['label'].value_counts()\ntrain_df.info()","metadata":{"execution":{"iopub.status.busy":"2023-10-19T07:35:55.400399Z","iopub.execute_input":"2023-10-19T07:35:55.4008Z","iopub.status.idle":"2023-10-19T07:35:55.418418Z","shell.execute_reply.started":"2023-10-19T07:35:55.400771Z","shell.execute_reply":"2023-10-19T07:35:55.417497Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df.head()","metadata":{"execution":{"iopub.status.busy":"2023-10-19T07:35:57.279854Z","iopub.execute_input":"2023-10-19T07:35:57.280185Z","iopub.status.idle":"2023-10-19T07:35:57.289025Z","shell.execute_reply.started":"2023-10-19T07:35:57.280159Z","shell.execute_reply":"2023-10-19T07:35:57.288127Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Training Images Preprocessing","metadata":{}},{"cell_type":"code","source":"Image.MAX_IMAGE_PIXELS = 10000000000\n\nimage_data = []\nimage_label = []\n\nfor img_id, label, tma in zip(train_df['image_id'],train_df['label'] ,train_df['is_tma']):\n    #print(img_id, label,  tma)\n    if tma==0:\n        img_name = str(img_id)+\"_thumbnail.png\"\n        image = Image.open(\"/kaggle/input/UBC-OCEAN/train_thumbnails/\"+img_name)\n        image = image.resize((512,512))\n        image = np.array(image)\n        image_data.append(image)\n        image_label.append(label)\n        \n        \n    elif tma==1:\n        img_name = str(img_id)+\".png\"\n        image = Image.open(\"/kaggle/input/UBC-OCEAN/train_images/\"+img_name)\n        image = image.resize((512,512))\n        image = np.array(image)\n        image_data.append(image)\n        image_label.append(label)","metadata":{"execution":{"iopub.status.busy":"2023-10-19T07:35:57.355601Z","iopub.execute_input":"2023-10-19T07:35:57.35583Z","iopub.status.idle":"2023-10-19T07:38:28.756655Z","shell.execute_reply.started":"2023-10-19T07:35:57.355811Z","shell.execute_reply":"2023-10-19T07:38:28.755785Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(len(image_data))\nprint(len(image_label))","metadata":{"execution":{"iopub.status.busy":"2023-10-19T07:38:28.758003Z","iopub.execute_input":"2023-10-19T07:38:28.75827Z","iopub.status.idle":"2023-10-19T07:38:28.762939Z","shell.execute_reply.started":"2023-10-19T07:38:28.758248Z","shell.execute_reply":"2023-10-19T07:38:28.762021Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"image_data[0].shape","metadata":{"execution":{"iopub.status.busy":"2023-10-19T07:38:28.764159Z","iopub.execute_input":"2023-10-19T07:38:28.764837Z","iopub.status.idle":"2023-10-19T07:38:28.776822Z","shell.execute_reply.started":"2023-10-19T07:38:28.764807Z","shell.execute_reply":"2023-10-19T07:38:28.776101Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Training Images Visualization","metadata":{}},{"cell_type":"code","source":"plt.figure(figsize=(30,50))\nj=1\nfor i in range(60):\n    plt.subplot(10,6,j)\n    plt.imshow(image_data[i])\n    plt.title(f\"Label:{class_labels[image_label[i]]}\")\n    j+=1","metadata":{"execution":{"iopub.status.busy":"2023-10-19T07:38:28.778965Z","iopub.execute_input":"2023-10-19T07:38:28.779226Z","iopub.status.idle":"2023-10-19T07:38:42.995599Z","shell.execute_reply.started":"2023-10-19T07:38:28.779207Z","shell.execute_reply":"2023-10-19T07:38:42.994082Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"set(image_label)","metadata":{"execution":{"iopub.status.busy":"2023-10-19T07:38:42.997031Z","iopub.execute_input":"2023-10-19T07:38:42.997364Z","iopub.status.idle":"2023-10-19T07:38:43.004377Z","shell.execute_reply.started":"2023-10-19T07:38:42.997336Z","shell.execute_reply":"2023-10-19T07:38:43.003338Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Covert Training Image Data Into Array","metadata":{}},{"cell_type":"code","source":"x = np.array(image_data) \ny = np.array(image_label)","metadata":{"execution":{"iopub.status.busy":"2023-10-19T07:38:43.005823Z","iopub.execute_input":"2023-10-19T07:38:43.006272Z","iopub.status.idle":"2023-10-19T07:38:43.143885Z","shell.execute_reply.started":"2023-10-19T07:38:43.006232Z","shell.execute_reply":"2023-10-19T07:38:43.142987Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(x.shape)\nprint(y.shape)","metadata":{"execution":{"iopub.status.busy":"2023-10-19T07:38:43.145312Z","iopub.execute_input":"2023-10-19T07:38:43.145554Z","iopub.status.idle":"2023-10-19T07:38:43.149759Z","shell.execute_reply.started":"2023-10-19T07:38:43.145533Z","shell.execute_reply":"2023-10-19T07:38:43.148726Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import joblib\n\n# Save the NumPy array to a file\njoblib.dump(x, 'x_data.joblib')\njoblib.dump(y, 'y_data.joblib')","metadata":{"execution":{"iopub.status.busy":"2023-10-19T07:38:43.150923Z","iopub.execute_input":"2023-10-19T07:38:43.151223Z","iopub.status.idle":"2023-10-19T07:38:43.694497Z","shell.execute_reply.started":"2023-10-19T07:38:43.151189Z","shell.execute_reply":"2023-10-19T07:38:43.693563Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# import joblib\n# x_data = joblib.load(\"/kaggle/working/x_data.joblib\")\n# y_data = joblib.load(\"/kaggle/working/y_data.joblib\")\n# print(x_data.shape)\n# print(y_data.shape)\n# # #print(loaded_data)","metadata":{"execution":{"iopub.status.busy":"2023-10-19T07:38:43.695512Z","iopub.execute_input":"2023-10-19T07:38:43.695777Z","iopub.status.idle":"2023-10-19T07:38:43.699337Z","shell.execute_reply.started":"2023-10-19T07:38:43.695755Z","shell.execute_reply":"2023-10-19T07:38:43.698529Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Split The Data","metadata":{}},{"cell_type":"code","source":"x_train, x_test ,y_train, y_test = train_test_split(x, y, test_size=0.04, shuffle=True)\nprint(x_train.shape)\nprint(x_test.shape)\nprint(y_train.shape)\nprint(y_test.shape)","metadata":{"execution":{"iopub.status.busy":"2023-10-19T07:38:43.702371Z","iopub.execute_input":"2023-10-19T07:38:43.702759Z","iopub.status.idle":"2023-10-19T07:38:43.830556Z","shell.execute_reply.started":"2023-10-19T07:38:43.702738Z","shell.execute_reply":"2023-10-19T07:38:43.829666Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Train Image Visualization","metadata":{}},{"cell_type":"code","source":"plt.figure(figsize=(40,40))\nfor i in range(64):\n    plt.subplot(8,8,i+1)\n    plt.imshow(x_train[i])\n    plt.title(f\"Label:{class_labels[y_train[i]]}\")","metadata":{"execution":{"iopub.status.busy":"2023-10-19T07:38:43.83169Z","iopub.execute_input":"2023-10-19T07:38:43.832184Z","iopub.status.idle":"2023-10-19T07:38:59.637438Z","shell.execute_reply.started":"2023-10-19T07:38:43.832133Z","shell.execute_reply":"2023-10-19T07:38:59.635767Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Test Image Visualization","metadata":{}},{"cell_type":"code","source":"plt.figure(figsize=(25,25))\nfor i in range(20):\n    plt.subplot(5,5,i+1)\n    plt.imshow(x_test[i])\n    plt.title(f\"Label:{class_labels[y_test[i]]}\")","metadata":{"execution":{"iopub.status.busy":"2023-10-19T07:38:59.639068Z","iopub.execute_input":"2023-10-19T07:38:59.639386Z","iopub.status.idle":"2023-10-19T07:39:04.344697Z","shell.execute_reply.started":"2023-10-19T07:38:59.639354Z","shell.execute_reply":"2023-10-19T07:39:04.343365Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Scale The Data","metadata":{}},{"cell_type":"code","source":"x_train_scaled = x_train/255\nx_test_scaled = x_test/255","metadata":{"execution":{"iopub.status.busy":"2023-10-19T07:39:04.345986Z","iopub.execute_input":"2023-10-19T07:39:04.34629Z","iopub.status.idle":"2023-10-19T07:39:05.436731Z","shell.execute_reply.started":"2023-10-19T07:39:04.34626Z","shell.execute_reply":"2023-10-19T07:39:05.43588Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import tensorflow_hub as hub","metadata":{"execution":{"iopub.status.busy":"2023-10-19T07:39:05.437911Z","iopub.execute_input":"2023-10-19T07:39:05.438244Z","iopub.status.idle":"2023-10-19T07:39:05.442578Z","shell.execute_reply.started":"2023-10-19T07:39:05.438218Z","shell.execute_reply":"2023-10-19T07:39:05.441637Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Model Building Using EfficientNet V2 Model","metadata":{}},{"cell_type":"code","source":"eff_512x512 = \"https://tfhub.dev/google/imagenet/efficientnet_v2_imagenet21k_ft1k_xl/classification/2\"\nkaggle_eff_512x512 = \"/kaggle/input/efficientnet-v2/tensorflow2/imagenet21k-ft1k-xl-classification/1\"\n\nmodel_hub = hub.KerasLayer(kaggle_eff_512x512,  input_shape=(512,512,3), trainable=False)\n\nnum_class = 6\nmodel = Sequential()\nmodel.add(model_hub)\nmodel.add(Dense(500,activation='relu'))\nmodel.add(Dropout(0.2))\nmodel.add(Dense(500,activation='relu'))\nmodel.add(Dropout(0.2))\nmodel.add(Dense(units=num_class, activation=\"softmax\"))\n\n\nmodel.compile(optimizer=\"adam\",loss=\"sparse_categorical_crossentropy\",\n             metrics=[\"accuracy\"])\n\n\nmodel.summary()","metadata":{"execution":{"iopub.status.busy":"2023-10-19T07:39:05.443767Z","iopub.execute_input":"2023-10-19T07:39:05.444043Z","iopub.status.idle":"2023-10-19T07:39:37.806253Z","shell.execute_reply.started":"2023-10-19T07:39:05.44402Z","shell.execute_reply":"2023-10-19T07:39:37.805395Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"history = model.fit(x_train_scaled,y_train,epochs=5,\n         batch_size=16 , validation_data=(x_test_scaled,y_test))","metadata":{"execution":{"iopub.status.busy":"2023-10-19T07:39:37.807264Z","iopub.execute_input":"2023-10-19T07:39:37.807515Z","iopub.status.idle":"2023-10-19T07:44:12.460631Z","shell.execute_reply.started":"2023-10-19T07:39:37.807494Z","shell.execute_reply":"2023-10-19T07:44:12.459758Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Save the model to a file\nmodel.save(\"EfficientNet_512x512_model_5.h5\")","metadata":{"execution":{"iopub.status.busy":"2023-10-19T07:44:30.935928Z","iopub.execute_input":"2023-10-19T07:44:30.936676Z","iopub.status.idle":"2023-10-19T07:44:34.205324Z","shell.execute_reply.started":"2023-10-19T07:44:30.936645Z","shell.execute_reply":"2023-10-19T07:44:34.204237Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Model Evaluation on Train & Test Data","metadata":{}},{"cell_type":"code","source":"loss ,acc = model.evaluate(x_train_scaled, y_train)\nprint(\"Accuracy on Train Data:\",acc)\nprint()\nloss ,acc = model.evaluate(x_test_scaled, y_test )\nprint(\"Accuracy on Test Data:\",acc)","metadata":{"execution":{"iopub.status.busy":"2023-10-19T07:44:45.163894Z","iopub.execute_input":"2023-10-19T07:44:45.164597Z","iopub.status.idle":"2023-10-19T07:45:50.101762Z","shell.execute_reply.started":"2023-10-19T07:44:45.164569Z","shell.execute_reply":"2023-10-19T07:45:50.100954Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"y_pred = model.predict(x_test_scaled)\ny_pred_test = [np.argmax(i) for i in y_pred]","metadata":{"execution":{"iopub.status.busy":"2023-10-19T07:46:24.282374Z","iopub.execute_input":"2023-10-19T07:46:24.283055Z","iopub.status.idle":"2023-10-19T07:46:30.345178Z","shell.execute_reply.started":"2023-10-19T07:46:24.283027Z","shell.execute_reply":"2023-10-19T07:46:30.344193Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"len(y_pred_test)","metadata":{"execution":{"iopub.status.busy":"2023-10-19T07:46:30.346986Z","iopub.execute_input":"2023-10-19T07:46:30.34768Z","iopub.status.idle":"2023-10-19T07:46:30.353102Z","shell.execute_reply.started":"2023-10-19T07:46:30.347646Z","shell.execute_reply":"2023-10-19T07:46:30.35214Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Metrics Evaluation on Test Data","metadata":{}},{"cell_type":"code","source":"print(\"Confusion Matrix:\\n\",confusion_matrix(y_test,y_pred_test))\nprint()\nprint(\"Classification Report:\\n\",classification_report(y_test,y_pred_test))","metadata":{"execution":{"iopub.status.busy":"2023-10-19T07:48:00.645398Z","iopub.execute_input":"2023-10-19T07:48:00.645737Z","iopub.status.idle":"2023-10-19T07:48:00.660598Z","shell.execute_reply.started":"2023-10-19T07:48:00.645713Z","shell.execute_reply":"2023-10-19T07:48:00.65987Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Compare Actual & Predicted Labels","metadata":{}},{"cell_type":"code","source":"plt.figure(figsize=(25,25))\nfor i in range(22):\n    plt.subplot(5,5,i+1)\n    plt.imshow(x_test[i])\n    plt.title(f\"Actual Label:{class_labels[y_test[i]]}\\nPredicted Label:{class_labels[y_pred_test[i]]}\")\n    plt.axis(\"off\")","metadata":{"execution":{"iopub.status.busy":"2023-10-19T07:48:33.684473Z","iopub.execute_input":"2023-10-19T07:48:33.685204Z","iopub.status.idle":"2023-10-19T07:48:36.876963Z","shell.execute_reply.started":"2023-10-19T07:48:33.685174Z","shell.execute_reply":"2023-10-19T07:48:36.875546Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}