{"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":"none","dataSources":[{"sourceId":5441,"databundleVersionId":38425,"sourceType":"competition"},{"sourceId":3404,"sourceType":"modelInstanceVersion","modelInstanceId":2508}],"dockerImageVersionId":30626,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"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\nimport numpy as np # linear algebra\nimport 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\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))\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-12-21T17:13:06.860381Z","iopub.execute_input":"2023-12-21T17:13:06.861148Z","iopub.status.idle":"2023-12-21T17:13:06.879367Z","shell.execute_reply.started":"2023-12-21T17:13:06.861102Z","shell.execute_reply":"2023-12-21T17:13:06.878259Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import pandas as pd\nimport numpy as np\nimport tensorflow as tf\nfrom tensorflow.keras import Sequential\nfrom tensorflow.keras.layers import Dense\nimport cv2","metadata":{"execution":{"iopub.status.busy":"2023-12-21T17:13:06.882028Z","iopub.execute_input":"2023-12-21T17:13:06.882944Z","iopub.status.idle":"2023-12-21T17:13:06.889555Z","shell.execute_reply.started":"2023-12-21T17:13:06.882903Z","shell.execute_reply":"2023-12-21T17:13:06.888205Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import os\ndirectory_path = \"/kaggle/working/train/train\"\nfilenames = []\norg_name=[]\n\n# Loop through files in the directory\nfor filename in os.listdir(directory_path):\n    # Split the filename and extension\n    name, extension = os.path.splitext(filename)\n    file_path = os.path.join(directory_path, filename)\n    file_name=filename\n#     print(file_path)\n    filenames.append(file_path)\n    org_name.append(file_name)\n\nfilenames[:5]\norg_name[:5]","metadata":{"execution":{"iopub.status.busy":"2023-12-21T17:13:06.891432Z","iopub.execute_input":"2023-12-21T17:13:06.89205Z","iopub.status.idle":"2023-12-21T17:13:07.051328Z","shell.execute_reply.started":"2023-12-21T17:13:06.892006Z","shell.execute_reply":"2023-12-21T17:13:07.050203Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\n\n# img_height=192\n# img_width=192\n# batch_size=32\n\n\n# # data_dir = pathlib.Path(data_dir).with_suffix('')\n# train_ds = tf.keras.utils.image_dataset_from_directory(\n#  \"/kaggle/working/train\",\n#   validation_split=0.2,\n#   subset=\"training\",\n#   seed=123,\n#   image_size=(img_height, img_width),\n#   batch_size=batch_size,\n#   label_mode=\"int\")\n\n\n# val_ds = tf.keras.utils.image_dataset_from_directory(\n#  \"/kaggle/working/train\",\n#   validation_split=0.2,\n#   subset=\"validation\",\n#   seed=123,\n#   image_size=(img_height, img_width),\n#   batch_size=batch_size,\n#   label_mode=\"int\")\n\nIMG_SIZE=128\ntrain_img=[]\ntrain_img_label=[]\n\nfor filename in os.listdir(directory_path):\n    \n    file_path = os.path.join(directory_path, filename)\n    \n    img=cv2.imread(file_path)\n    \n    img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)/255.0\n    img_rgb=tf.constant(img_rgb)\n    img_rgb=tf.image.resize(img_rgb,size=[IMG_SIZE,IMG_SIZE])\n    train_img.append(img_rgb)\n    train_img_label.append((filename.split(\".\")[0]))\n    if(len(train_img)==1000):\n        break\n    \n\n\n    \n","metadata":{"execution":{"iopub.status.busy":"2023-12-21T17:13:07.055791Z","iopub.execute_input":"2023-12-21T17:13:07.056196Z","iopub.status.idle":"2023-12-21T17:13:12.763537Z","shell.execute_reply.started":"2023-12-21T17:13:07.056163Z","shell.execute_reply":"2023-12-21T17:13:12.762314Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import matplotlib.pyplot as plt\ntrain_img_label[6]\nplt.imshow(train_img[6])\ntrain_img[0]","metadata":{"execution":{"iopub.status.busy":"2023-12-21T17:13:12.765071Z","iopub.execute_input":"2023-12-21T17:13:12.767566Z","iopub.status.idle":"2023-12-21T17:13:13.210229Z","shell.execute_reply.started":"2023-12-21T17:13:12.767528Z","shell.execute_reply":"2023-12-21T17:13:13.209024Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import matplotlib.pyplot as plt\nfor i in range(0,8):\n     plt.imshow(train_img[i])\n     plt.title(train_img_label[i])\n     plt.axis(\"off\")\n     plt.show()\n   ","metadata":{"execution":{"iopub.status.busy":"2023-12-21T17:13:13.211892Z","iopub.execute_input":"2023-12-21T17:13:13.212248Z","iopub.status.idle":"2023-12-21T17:13:15.454246Z","shell.execute_reply.started":"2023-12-21T17:13:13.212217Z","shell.execute_reply":"2023-12-21T17:13:15.453103Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_img_blabel=[]\nfor label in train_img_label:\n    if(label==\"dog\"):\n        train_img_blabel.append(1)\n    else:\n        train_img_blabel.append(0)\n    \n    ","metadata":{"execution":{"iopub.status.busy":"2023-12-21T17:13:15.45564Z","iopub.execute_input":"2023-12-21T17:13:15.455998Z","iopub.status.idle":"2023-12-21T17:13:15.462394Z","shell.execute_reply.started":"2023-12-21T17:13:15.455966Z","shell.execute_reply":"2023-12-21T17:13:15.461187Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\nX=train_img\n\ny=train_img_blabel\n\n","metadata":{"execution":{"iopub.status.busy":"2023-12-21T17:13:15.464287Z","iopub.execute_input":"2023-12-21T17:13:15.464974Z","iopub.status.idle":"2023-12-21T17:13:15.473756Z","shell.execute_reply.started":"2023-12-21T17:13:15.464939Z","shell.execute_reply":"2023-12-21T17:13:15.472814Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for i in range(0,10):\n    plt.imshow(train_img[i])\n    plt.title(train_img_blabel[i])\n    plt.show()","metadata":{"execution":{"iopub.status.busy":"2023-12-21T17:13:15.475216Z","iopub.execute_input":"2023-12-21T17:13:15.475588Z","iopub.status.idle":"2023-12-21T17:13:19.36584Z","shell.execute_reply.started":"2023-12-21T17:13:15.475558Z","shell.execute_reply":"2023-12-21T17:13:19.364615Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.model_selection import train_test_split\n\nX_train,X_val,y_train,y_val=train_test_split(X,y,test_size=0.2)\n","metadata":{"execution":{"iopub.status.busy":"2023-12-21T17:13:19.370737Z","iopub.execute_input":"2023-12-21T17:13:19.37119Z","iopub.status.idle":"2023-12-21T17:13:19.378155Z","shell.execute_reply.started":"2023-12-21T17:13:19.371157Z","shell.execute_reply":"2023-12-21T17:13:19.376868Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"len(X_train), len(y_train)\ny_train=tf.constant(y_train)","metadata":{"execution":{"iopub.status.busy":"2023-12-21T17:13:19.380116Z","iopub.execute_input":"2023-12-21T17:13:19.380586Z","iopub.status.idle":"2023-12-21T17:13:19.388241Z","shell.execute_reply.started":"2023-12-21T17:13:19.380542Z","shell.execute_reply":"2023-12-21T17:13:19.38689Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for i in range(0,8):\n     plt.imshow(X_train[i])\n     \n     plt.axis(\"off\")\n     plt.show()\n   ","metadata":{"execution":{"iopub.status.busy":"2023-12-21T17:13:19.389729Z","iopub.execute_input":"2023-12-21T17:13:19.390182Z","iopub.status.idle":"2023-12-21T17:13:21.124901Z","shell.execute_reply.started":"2023-12-21T17:13:19.390148Z","shell.execute_reply":"2023-12-21T17:13:21.123696Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"y_train[:10]","metadata":{"execution":{"iopub.status.busy":"2023-12-21T17:13:21.126336Z","iopub.execute_input":"2023-12-21T17:13:21.126667Z","iopub.status.idle":"2023-12-21T17:13:21.138106Z","shell.execute_reply.started":"2023-12-21T17:13:21.126638Z","shell.execute_reply":"2023-12-21T17:13:21.1369Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"y_val=tf.constant(y_val)","metadata":{"execution":{"iopub.status.busy":"2023-12-21T17:13:21.139595Z","iopub.execute_input":"2023-12-21T17:13:21.139958Z","iopub.status.idle":"2023-12-21T17:13:21.147983Z","shell.execute_reply.started":"2023-12-21T17:13:21.139927Z","shell.execute_reply":"2023-12-21T17:13:21.146661Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def get_img_label(X,y):\n    return (X,y)\n\n\n\ndata=tf.data.Dataset.from_tensor_slices((X_train,y_train))\n\ndata=data.shuffle(buffer_size=len(X_train)) # Buffer size is just how many elements we want to shuffle\n\ndata_batch=data.map((get_img_label)).batch(32)","metadata":{"execution":{"iopub.status.busy":"2023-12-21T17:13:21.149569Z","iopub.execute_input":"2023-12-21T17:13:21.15017Z","iopub.status.idle":"2023-12-21T17:13:21.289384Z","shell.execute_reply.started":"2023-12-21T17:13:21.150136Z","shell.execute_reply":"2023-12-21T17:13:21.288473Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"data_val=tf.data.Dataset.from_tensor_slices((X_val,y_val))\n\ndata_val=data.shuffle(buffer_size=len(X_val)) # Buffer size is just how many elements we want to shuffle\n\ndata_batch_val=data.map((get_img_label)).batch(32)","metadata":{"execution":{"iopub.status.busy":"2023-12-21T17:13:21.29067Z","iopub.execute_input":"2023-12-21T17:13:21.291279Z","iopub.status.idle":"2023-12-21T17:13:21.333647Z","shell.execute_reply.started":"2023-12-21T17:13:21.291238Z","shell.execute_reply":"2023-12-21T17:13:21.332483Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import tensorflow_hub as hub\n\nINPUT_SHAPE=[None,128,128,3]\nOUTPUT_SHAPE=1\nMODEL_URL=\"https://www.kaggle.com/models/google/mobilenet-v2/frameworks/TensorFlow2/variations/035-128-classification/versions/2\"\n\n\n\ndef create_model(input_shape=INPUT_SHAPE,output_shape=OUTPUT_SHAPE,model_url=MODEL_URL):\n    \n    \n\n    model=tf.keras.Sequential([\n      hub.KerasLayer(model_url),\n      tf.keras.layers.Dense(units=output_shape,activation=\"sigmoid\")\n  ])\n\n    model.compile(\n      loss=tf.keras.losses.BinaryCrossentropy(),\n      optimizer=tf.keras.optimizers.Adam(),\n      metrics=[\"accuracy\"]\n  )\n\n    model.build(input_shape)\n\n    return model","metadata":{"execution":{"iopub.status.busy":"2023-12-21T17:13:21.334874Z","iopub.execute_input":"2023-12-21T17:13:21.335189Z","iopub.status.idle":"2023-12-21T17:13:21.343133Z","shell.execute_reply.started":"2023-12-21T17:13:21.335162Z","shell.execute_reply":"2023-12-21T17:13:21.34214Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model=create_model()\nmodel.summary()","metadata":{"execution":{"iopub.status.busy":"2023-12-21T17:13:21.344574Z","iopub.execute_input":"2023-12-21T17:13:21.344962Z","iopub.status.idle":"2023-12-21T17:13:24.079427Z","shell.execute_reply.started":"2023-12-21T17:13:21.344932Z","shell.execute_reply":"2023-12-21T17:13:24.078296Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"early_stopping= tf.keras.callbacks.EarlyStopping(monitor=\"val_accuracy\",\n                                                 patience=3)","metadata":{"execution":{"iopub.status.busy":"2023-12-21T17:13:24.080996Z","iopub.execute_input":"2023-12-21T17:13:24.081421Z","iopub.status.idle":"2023-12-21T17:13:24.086974Z","shell.execute_reply.started":"2023-12-21T17:13:24.08139Z","shell.execute_reply":"2023-12-21T17:13:24.085685Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.fit(data_batch,epochs=100,callbacks=[early_stopping],validation_data=data_batch_val)","metadata":{"execution":{"iopub.status.busy":"2023-12-21T17:13:24.088755Z","iopub.execute_input":"2023-12-21T17:13:24.089303Z","iopub.status.idle":"2023-12-21T17:15:22.865176Z","shell.execute_reply.started":"2023-12-21T17:13:24.089271Z","shell.execute_reply":"2023-12-21T17:15:22.864233Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"np.random.seed(42)\npreds=model.predict(data_batch_val)\npreds[:10]","metadata":{"execution":{"iopub.status.busy":"2023-12-21T17:15:22.867927Z","iopub.execute_input":"2023-12-21T17:15:22.869189Z","iopub.status.idle":"2023-12-21T17:15:25.064354Z","shell.execute_reply.started":"2023-12-21T17:15:22.869138Z","shell.execute_reply":"2023-12-21T17:15:25.062996Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"preds=preds.round()","metadata":{"execution":{"iopub.status.busy":"2023-12-21T17:15:25.066032Z","iopub.execute_input":"2023-12-21T17:15:25.066506Z","iopub.status.idle":"2023-12-21T17:15:25.072443Z","shell.execute_reply.started":"2023-12-21T17:15:25.066453Z","shell.execute_reply":"2023-12-21T17:15:25.071185Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for i in range(20,40):\n    plt.imshow(X_val[i])\n    \n    if(preds[i]==1):\n        \n        plt.title(\"Dog\")\n    else:\n        plt.title(\"Cat\")\n    \n    plt.show()\n    \n\n","metadata":{"execution":{"iopub.status.busy":"2023-12-21T17:15:25.074048Z","iopub.execute_input":"2023-12-21T17:15:25.074499Z","iopub.status.idle":"2023-12-21T17:15:32.071846Z","shell.execute_reply.started":"2023-12-21T17:15:25.074457Z","shell.execute_reply":"2023-12-21T17:15:32.070911Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"y=tf.constant(y)\ny","metadata":{"execution":{"iopub.status.busy":"2023-12-21T17:15:32.07317Z","iopub.execute_input":"2023-12-21T17:15:32.074227Z","iopub.status.idle":"2023-12-21T17:15:32.08674Z","shell.execute_reply.started":"2023-12-21T17:15:32.074188Z","shell.execute_reply":"2023-12-21T17:15:32.08557Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\ndata_full=tf.data.Dataset.from_tensor_slices((X,y))\n\ndata_full=data.shuffle(buffer_size=len(X)) # Buffer size is just how many elements we want to shuffle\n\ndata_batch_full=data.map((get_img_label)).batch(32)","metadata":{"execution":{"iopub.status.busy":"2023-12-21T17:15:32.087752Z","iopub.execute_input":"2023-12-21T17:15:32.088089Z","iopub.status.idle":"2023-12-21T17:15:32.242994Z","shell.execute_reply.started":"2023-12-21T17:15:32.088061Z","shell.execute_reply":"2023-12-21T17:15:32.241891Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"full_model=create_model()","metadata":{"execution":{"iopub.status.busy":"2023-12-21T17:15:32.244494Z","iopub.execute_input":"2023-12-21T17:15:32.244945Z","iopub.status.idle":"2023-12-21T17:15:34.455297Z","shell.execute_reply.started":"2023-12-21T17:15:32.244904Z","shell.execute_reply":"2023-12-21T17:15:34.454313Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"len(X)","metadata":{"execution":{"iopub.status.busy":"2023-12-21T17:15:34.456678Z","iopub.execute_input":"2023-12-21T17:15:34.457129Z","iopub.status.idle":"2023-12-21T17:15:34.463875Z","shell.execute_reply.started":"2023-12-21T17:15:34.457098Z","shell.execute_reply":"2023-12-21T17:15:34.46268Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"IMG_SIZE=128\ntrain_img_full=[]\ntrain_img_label_full=[]\n\nfor filename in os.listdir(directory_path):\n    \n    file_path = os.path.join(directory_path, filename)\n    \n    img=cv2.imread(file_path)\n    \n    img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)/255.0\n    img_rgb=tf.constant(img_rgb)\n    img_rgb=tf.image.resize(img_rgb,size=[IMG_SIZE,IMG_SIZE])\n    train_img_full.append(img_rgb)\n    train_img_label_full.append((filename.split(\".\")[0]))\n    ","metadata":{"execution":{"iopub.status.busy":"2023-12-21T17:15:34.46926Z","iopub.execute_input":"2023-12-21T17:15:34.469604Z","iopub.status.idle":"2023-12-21T17:17:57.251456Z","shell.execute_reply.started":"2023-12-21T17:15:34.469574Z","shell.execute_reply":"2023-12-21T17:17:57.250075Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_img_blabel_full=[]\nfor label in train_img_label_full:\n    if(label==\"dog\"):\n        train_img_blabel_full.append(1)\n    else:\n        train_img_blabel_full.append(0)","metadata":{"execution":{"iopub.status.busy":"2023-12-21T17:17:57.252971Z","iopub.execute_input":"2023-12-21T17:17:57.253322Z","iopub.status.idle":"2023-12-21T17:17:57.267276Z","shell.execute_reply.started":"2023-12-21T17:17:57.253292Z","shell.execute_reply":"2023-12-21T17:17:57.266338Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"data_full=tf.data.Dataset.from_tensor_slices((train_img_full,train_img_blabel_full))\n\ndata_full=data_full.shuffle(buffer_size=len(train_img_full)) # Buffer size is just how many elements we want to shuffle\n\ndata_batch_full=data_full.map((get_img_label)).batch(32)","metadata":{"execution":{"iopub.status.busy":"2023-12-21T17:17:57.269147Z","iopub.execute_input":"2023-12-21T17:17:57.269509Z","iopub.status.idle":"2023-12-21T17:18:06.138567Z","shell.execute_reply.started":"2023-12-21T17:17:57.269478Z","shell.execute_reply":"2023-12-21T17:18:06.137347Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"full_model.fit(data_batch_full,epochs=100,callbacks=[early_stopping])","metadata":{"execution":{"iopub.status.busy":"2023-12-21T17:58:41.29198Z","iopub.execute_input":"2023-12-21T17:58:41.292403Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"IMG_SIZE=128\ntest_img_full=[]\ntrain_img_label_full=[]\ndirectory_path_test=\"/kaggle/working/test/test\"\nfor filename in os.listdir(directory_path_test):\n    \n    file_path = os.path.join(directory_path_test, filename)\n    \n    img=cv2.imread(file_path)\n    \n    img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)/255.0\n    img_rgb=tf.constant(img_rgb)\n    img_rgb=tf.image.resize(img_rgb,size=[IMG_SIZE,IMG_SIZE])\n    test_img_full.append(img_rgb)\n   ","metadata":{"execution":{"iopub.status.busy":"2023-12-21T19:48:51.097172Z","iopub.execute_input":"2023-12-21T19:48:51.097496Z","iopub.status.idle":"2023-12-21T19:49:55.970658Z","shell.execute_reply.started":"2023-12-21T19:48:51.097468Z","shell.execute_reply":"2023-12-21T19:49:55.969476Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"data_test_full=tf.data.Dataset.from_tensor_slices((test_img_full))\ndata_batch_test_full=data_test_full.batch(32)","metadata":{"execution":{"iopub.status.busy":"2023-12-21T19:47:57.687531Z","iopub.execute_input":"2023-12-21T19:47:57.68873Z","iopub.status.idle":"2023-12-21T19:48:21.684455Z","shell.execute_reply.started":"2023-12-21T19:47:57.688687Z","shell.execute_reply":"2023-12-21T19:48:21.683243Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"final_preds=full_model.predict(data_batch_test_full)","metadata":{"execution":{"iopub.status.busy":"2023-12-21T19:48:21.686976Z","iopub.execute_input":"2023-12-21T19:48:21.688078Z","iopub.status.idle":"2023-12-21T19:48:51.094768Z","shell.execute_reply.started":"2023-12-21T19:48:21.688025Z","shell.execute_reply":"2023-12-21T19:48:51.09376Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}