{"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":3004,"databundleVersionId":861823,"sourceType":"competition"}],"dockerImageVersionId":30626,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"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-31T21:08:09.988775Z","iopub.execute_input":"2023-12-31T21:08:09.989056Z","iopub.status.idle":"2023-12-31T21:08:10.328969Z","shell.execute_reply.started":"2023-12-31T21:08:09.989029Z","shell.execute_reply":"2023-12-31T21:08:10.327971Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"#### IMPORTING LIBRARIES","metadata":{}},{"cell_type":"code","source":"!pip install keras_tuner","metadata":{"execution":{"iopub.status.busy":"2023-12-31T21:08:10.330728Z","iopub.execute_input":"2023-12-31T21:08:10.331208Z","iopub.status.idle":"2023-12-31T21:08:23.205830Z","shell.execute_reply.started":"2023-12-31T21:08:10.331175Z","shell.execute_reply":"2023-12-31T21:08:23.204718Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import os\nimport pandas as pd\nimport numpy as np\nimport matplotlib.pyplot as plt\nimport sklearn\nimport pickle\nimport seaborn as sns\nimport keras_tuner\nimport keras\nimport tensorflow as tf\nimport gc\n\nimport warnings\nwarnings.filterwarnings('ignore')\n\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.metrics import accuracy_score, f1_score, precision_score, recall_score, roc_auc_score, classification_report, confusion_matrix\n\nfrom keras.models import Sequential\nfrom keras.layers import Dense,Flatten,Dropout","metadata":{"execution":{"iopub.status.busy":"2023-12-31T21:08:23.207312Z","iopub.execute_input":"2023-12-31T21:08:23.207615Z","iopub.status.idle":"2023-12-31T21:08:34.628133Z","shell.execute_reply.started":"2023-12-31T21:08:23.207587Z","shell.execute_reply":"2023-12-31T21:08:34.627373Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"#### READING THE DATASETS","metadata":{}},{"cell_type":"code","source":"train = pd.read_csv('/kaggle/input/digit-recognizer/train.csv')\ntest = pd.read_csv('/kaggle/input/digit-recognizer/test.csv')","metadata":{"execution":{"iopub.status.busy":"2023-12-31T21:08:34.630071Z","iopub.execute_input":"2023-12-31T21:08:34.630587Z","iopub.status.idle":"2023-12-31T21:08:40.047400Z","shell.execute_reply.started":"2023-12-31T21:08:34.630560Z","shell.execute_reply":"2023-12-31T21:08:40.046583Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"#### EXPLORATORY ANALYSIS OF THE DATASET","metadata":{}},{"cell_type":"code","source":"print(train.shape)\nprint(test.shape)","metadata":{"execution":{"iopub.status.busy":"2023-12-31T21:08:40.048484Z","iopub.execute_input":"2023-12-31T21:08:40.048761Z","iopub.status.idle":"2023-12-31T21:08:40.053691Z","shell.execute_reply.started":"2023-12-31T21:08:40.048737Z","shell.execute_reply":"2023-12-31T21:08:40.052804Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.figure(figsize = (16,9))\nsns.countplot(train, x = 'label')","metadata":{"execution":{"iopub.status.busy":"2023-12-31T21:08:40.054748Z","iopub.execute_input":"2023-12-31T21:08:40.055002Z","iopub.status.idle":"2023-12-31T21:08:40.407267Z","shell.execute_reply.started":"2023-12-31T21:08:40.054980Z","shell.execute_reply":"2023-12-31T21:08:40.406430Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"#### SEPARATING THE PIXEL DATA AND DIGIT LABEL","metadata":{}},{"cell_type":"code","source":"label_train = train['label']\npixel_train = train\npixel_test = test\npixel_train = pixel_train.drop('label', axis = 1)\n\nlabel_train = np.array(label_train)\npixel_train = np.array(pixel_train)\npixel_test = np.array(pixel_test)\n\npixel_train = pixel_train.reshape(42000,28,28,1)\npixel_test = pixel_test.reshape(28000,28,28,1)\ngc.collect()","metadata":{"execution":{"iopub.status.busy":"2023-12-31T21:08:40.408434Z","iopub.execute_input":"2023-12-31T21:08:40.408722Z","iopub.status.idle":"2023-12-31T21:08:40.821088Z","shell.execute_reply.started":"2023-12-31T21:08:40.408697Z","shell.execute_reply":"2023-12-31T21:08:40.820193Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print (\" The shape of pixel_train is : \" + str(pixel_train.shape))\nprint (\" The shape of label_train is : \" + str(label_train.shape))\nprint (\" The shape of pixel_test is : \" + str(pixel_test.shape))","metadata":{"execution":{"iopub.status.busy":"2023-12-31T21:08:40.822278Z","iopub.execute_input":"2023-12-31T21:08:40.822565Z","iopub.status.idle":"2023-12-31T21:08:40.827666Z","shell.execute_reply.started":"2023-12-31T21:08:40.822540Z","shell.execute_reply":"2023-12-31T21:08:40.826844Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def show_train_img(int):\n    cap = label_train[int]\n    pixels = pixel_train[int]\n    plt.figure(figsize = (4,4))\n    plt.imshow(pixels)\n    plt.xlabel(str(cap))\n    plt.show\n    \ndef show_test_img(int):\n    pixels = pixel_test[int]\n    plt.figure(figsize = (4,4))\n    plt.imshow(pixels)\n    plt.show","metadata":{"execution":{"iopub.status.busy":"2023-12-31T21:08:40.828625Z","iopub.execute_input":"2023-12-31T21:08:40.828862Z","iopub.status.idle":"2023-12-31T21:08:40.837825Z","shell.execute_reply.started":"2023-12-31T21:08:40.828842Z","shell.execute_reply":"2023-12-31T21:08:40.836946Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"show_train_img(2)","metadata":{"execution":{"iopub.status.busy":"2023-12-31T21:08:40.841984Z","iopub.execute_input":"2023-12-31T21:08:40.842530Z","iopub.status.idle":"2023-12-31T21:08:41.086176Z","shell.execute_reply.started":"2023-12-31T21:08:40.842500Z","shell.execute_reply":"2023-12-31T21:08:41.085259Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"show_test_img(2)","metadata":{"execution":{"iopub.status.busy":"2023-12-31T21:08:41.087158Z","iopub.execute_input":"2023-12-31T21:08:41.087408Z","iopub.status.idle":"2023-12-31T21:08:41.324778Z","shell.execute_reply.started":"2023-12-31T21:08:41.087386Z","shell.execute_reply":"2023-12-31T21:08:41.323889Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"#### DATA SCALING","metadata":{}},{"cell_type":"code","source":"pixel_train = pixel_train * (1./255)\npixel_test = pixel_test * (1./255)\ngc.collect()","metadata":{"execution":{"iopub.status.busy":"2023-12-31T21:08:41.325703Z","iopub.execute_input":"2023-12-31T21:08:41.325942Z","iopub.status.idle":"2023-12-31T21:08:41.665961Z","shell.execute_reply.started":"2023-12-31T21:08:41.325921Z","shell.execute_reply":"2023-12-31T21:08:41.665116Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"#### TRAIN TEST SPLIT","metadata":{}},{"cell_type":"code","source":"x_train, x_test, y_train, y_test = train_test_split(pixel_train, label_train, test_size = 0.2, shuffle = True, random_state = 69)","metadata":{"execution":{"iopub.status.busy":"2023-12-31T21:08:41.666863Z","iopub.execute_input":"2023-12-31T21:08:41.667107Z","iopub.status.idle":"2023-12-31T21:08:42.037832Z","shell.execute_reply.started":"2023-12-31T21:08:41.667085Z","shell.execute_reply":"2023-12-31T21:08:42.037045Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"#### GETTING THE BEST FIT MODEL","metadata":{}},{"cell_type":"code","source":"def build_model(hp):\n    \n    model = keras.models.Sequential()\n\n    model.add(tf.keras.layers.Flatten(input_shape=(28,28)))\n\n    model.add(keras.layers.Dense(units=hp.Int('dense_1_units',min_value=8,max_value=1024,step=8),activation=hp.Choice('dense_1_activation',values=['relu', 'elu', 'selu']),kernel_initializer=hp.Choice('dense_1_kernel_initializer',values=['random_normal','glorot_normal', 'he_normal', 'glorot_uniform'])))\n\n    model.add(keras.layers.Dropout(rate=hp.Float('dropout_1_rate',min_value=0.1,max_value=0.9,step=0.05)))\n\n    model.add(keras.layers.Dense(units=hp.Int('dense_2_units',min_value=8,max_value=1024,step=8),activation=hp.Choice('dense_2_activation',values=['relu', 'elu', 'selu']),kernel_initializer=hp.Choice('dense_2_kernel_initializer',values=['random_normal','glorot_normal', 'he_normal', 'glorot_uniform'])))\n\n    model.add(keras.layers.Dropout(rate=hp.Float('dropout_2_rate',min_value=0.1,max_value=0.9,step=0.05)))\n\n    model.add(keras.layers.Dense(units=hp.Int('dense_3_units',min_value=8,max_value=1024,step=8),activation=hp.Choice('dense_3_activation',values=['relu', 'elu', 'selu']),kernel_initializer=hp.Choice('dense_3_kernel_initializer',values=['random_normal','glorot_normal', 'he_normal', 'glorot_uniform'])))\n\n    model.add(keras.layers.Dropout(rate=hp.Float('dropout_3_rate',min_value=0.1,max_value=0.9,step=0.05)))\n\n    model.add(keras.layers.Dense(units=hp.Int('dense_4_units',min_value=8,max_value=1024,step=8),activation=hp.Choice('dense_4_activation',values=['relu', 'elu', 'selu']),kernel_initializer=hp.Choice('dense_4_kernel_initializer',values=['random_normal','glorot_normal', 'he_normal', 'glorot_uniform'])))\n\n    model.add(keras.layers.Dense(10,activation='softmax'))\n\n    model.compile(optimizer=keras.optimizers.Adam(hp.Choice('learning_rate',values=[1e-2, 1e-3])),\n                                          loss='sparse_categorical_crossentropy',\n                                          metrics=['accuracy'])\n\n    return model","metadata":{"execution":{"iopub.status.busy":"2023-12-31T21:08:42.039031Z","iopub.execute_input":"2023-12-31T21:08:42.039331Z","iopub.status.idle":"2023-12-31T21:08:42.053259Z","shell.execute_reply.started":"2023-12-31T21:08:42.039306Z","shell.execute_reply":"2023-12-31T21:08:42.052387Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from keras_tuner import RandomSearch\nfrom keras_tuner.engine.hyperparameters import hyperparameters\n\ntuner_search = RandomSearch(build_model,objective='val_accuracy', max_trials = 500, directory='output', project_name=\"digit_recognition\")\n\ntuner_search.search(x_train, y_train,epochs = 5, batch_size = 128, validation_split=0.2)","metadata":{"execution":{"iopub.status.busy":"2023-12-31T21:08:42.054239Z","iopub.execute_input":"2023-12-31T21:08:42.054526Z","iopub.status.idle":"2023-12-31T21:18:07.771800Z","shell.execute_reply.started":"2023-12-31T21:08:42.054487Z","shell.execute_reply":"2023-12-31T21:18:07.770941Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model = tuner_search.get_best_models(num_models=1)[0]\nparameters=tuner_search.get_best_hyperparameters(1)[0]\nprint(parameters.values)","metadata":{"execution":{"iopub.status.busy":"2023-12-31T21:18:07.772927Z","iopub.execute_input":"2023-12-31T21:18:07.773251Z","iopub.status.idle":"2023-12-31T21:18:08.179793Z","shell.execute_reply.started":"2023-12-31T21:18:07.773223Z","shell.execute_reply":"2023-12-31T21:18:08.178760Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(model.summary)\nmodel_name='/kaggle/working/digit_detector.png'\nkeras.utils.plot_model(model, to_file=model_name, show_shapes=True, show_dtype=True, show_layer_names=True, expand_nested=True, dpi=96, show_layer_activations=True, show_trainable=True, rankdir='TB')","metadata":{"execution":{"iopub.status.busy":"2023-12-31T21:19:56.386840Z","iopub.execute_input":"2023-12-31T21:19:56.387720Z","iopub.status.idle":"2023-12-31T21:19:56.479927Z","shell.execute_reply.started":"2023-12-31T21:19:56.387686Z","shell.execute_reply":"2023-12-31T21:19:56.479182Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"#### FINAL MODEL IMPLEMENTATION","metadata":{}},{"cell_type":"code","source":"digits_detector = model","metadata":{"execution":{"iopub.status.busy":"2023-12-31T21:20:08.926822Z","iopub.execute_input":"2023-12-31T21:20:08.927315Z","iopub.status.idle":"2023-12-31T21:20:08.931884Z","shell.execute_reply.started":"2023-12-31T21:20:08.927276Z","shell.execute_reply":"2023-12-31T21:20:08.930842Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"digits_detector.fit(x_train, y_train, epochs = 100, batch_size = 128, validation_split = 0.2)","metadata":{"execution":{"iopub.status.busy":"2023-12-31T21:20:11.246886Z","iopub.execute_input":"2023-12-31T21:20:11.247264Z","iopub.status.idle":"2023-12-31T21:20:53.508736Z","shell.execute_reply.started":"2023-12-31T21:20:11.247235Z","shell.execute_reply":"2023-12-31T21:20:53.507818Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"#### EVALUATION OF THE CLASSIFIER","metadata":{}},{"cell_type":"code","source":"acc=digits_detector.history.history['accuracy']\nval_acc=digits_detector.history.history['val_accuracy']\nloss=digits_detector.history.history['loss']\nval_loss=digits_detector.history.history['val_loss']\nepochs=range(1,len(acc)+1)\n\nimport matplotlib.pyplot as plt\n\nplt.plot(epochs,acc,'r',label='Training accurary')\nplt.plot(epochs,val_acc,'g',label='Validation accurary')\nplt.title('Training and Validation Accuracy')\nplt.legend()\nplt.show()\nplt.plot(epochs,loss,'r',label='Training loss')\nplt.plot(epochs,val_loss,'b',label='Validation loss')\nplt.title('Training and Validation loss')\nplt.legend()\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2023-12-31T21:21:57.188039Z","iopub.execute_input":"2023-12-31T21:21:57.188756Z","iopub.status.idle":"2023-12-31T21:21:57.627064Z","shell.execute_reply.started":"2023-12-31T21:21:57.188721Z","shell.execute_reply":"2023-12-31T21:21:57.626216Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"y_probability= digits_detector.predict(x_test)\ny_predict = np.argmax(y_probability,axis=1)","metadata":{"execution":{"iopub.status.busy":"2023-12-31T21:22:01.747674Z","iopub.execute_input":"2023-12-31T21:22:01.748430Z","iopub.status.idle":"2023-12-31T21:22:02.485004Z","shell.execute_reply.started":"2023-12-31T21:22:01.748397Z","shell.execute_reply":"2023-12-31T21:22:02.484156Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print('The classification test results are : \\n')\nprint(classification_report(y_test,y_predict))\nprint('\\n')\nprint('The test accuracy percentage is :')\nprint((accuracy_score(y_test,y_predict))*100)\nprint('\\n')\nprint('The test precision percentage is :')\nprint((precision_score(y_test,y_predict,average='micro'))*100)\nprint('\\n')\nprint('The test recall percentage is :')\nprint((recall_score(y_test,y_predict,average='micro'))*100)\nprint('\\n')\nprint('The test f1 percentage is :')\nprint((f1_score(y_test,y_predict,average='micro'))*100)\nprint('\\n')\nprint('The test ROC AUC percentage is :')\nprint(roc_auc_score(y_test,y_probability,multi_class = 'ovr'))\n\nprint('Confusion Matrix :')\ncm=confusion_matrix(y_test,y_predict)\nplt.figure(figsize = (16,9))\nsns.heatmap(cm, annot = True, fmt = 'g')","metadata":{"execution":{"iopub.status.busy":"2023-12-31T21:22:06.016960Z","iopub.execute_input":"2023-12-31T21:22:06.017334Z","iopub.status.idle":"2023-12-31T21:22:06.634803Z","shell.execute_reply.started":"2023-12-31T21:22:06.017304Z","shell.execute_reply":"2023-12-31T21:22:06.634006Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"#### TEST CSV IMPLEMENTATION","metadata":{}},{"cell_type":"code","source":"test_labels_predicted = np.argmax(digits_detector.predict(pixel_test), axis = 1)\ntest_predictions = (test_labels_predicted).tolist()\ntest_digits = pd.Series((test_predictions))","metadata":{"execution":{"iopub.status.busy":"2023-12-31T21:22:14.627729Z","iopub.execute_input":"2023-12-31T21:22:14.628129Z","iopub.status.idle":"2023-12-31T21:22:16.667544Z","shell.execute_reply.started":"2023-12-31T21:22:14.628081Z","shell.execute_reply":"2023-12-31T21:22:16.666743Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_dataset_final = pd.concat([test,test_digits],axis = 1)\ntest_dataset_final.columns.values[784] = 'Predicted_Labels'","metadata":{"execution":{"iopub.status.busy":"2023-12-31T21:22:20.457647Z","iopub.execute_input":"2023-12-31T21:22:20.458024Z","iopub.status.idle":"2023-12-31T21:22:20.527481Z","shell.execute_reply.started":"2023-12-31T21:22:20.457997Z","shell.execute_reply":"2023-12-31T21:22:20.526282Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_dataset_final.to_csv('/kaggle/working/Processed_Test_Data.csv', index = False)","metadata":{"execution":{"iopub.status.busy":"2023-12-31T21:22:25.067129Z","iopub.execute_input":"2023-12-31T21:22:25.068111Z","iopub.status.idle":"2023-12-31T21:22:30.276092Z","shell.execute_reply.started":"2023-12-31T21:22:25.068069Z","shell.execute_reply":"2023-12-31T21:22:30.275061Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"#### REAL TIME TEST","metadata":{}},{"cell_type":"code","source":"real_test = pd.read_csv('/kaggle/working/Processed_Test_Data.csv')\nreal_test.head()","metadata":{"execution":{"iopub.status.busy":"2023-12-31T21:22:30.277702Z","iopub.execute_input":"2023-12-31T21:22:30.278006Z","iopub.status.idle":"2023-12-31T21:22:31.987910Z","shell.execute_reply.started":"2023-12-31T21:22:30.277981Z","shell.execute_reply":"2023-12-31T21:22:31.986974Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def show_digit(int):\n    pixels = np.array(real_test.iloc[int,:784])\n    cap = real_test.iloc[int,784]\n    plt.imshow(pixels.reshape(28,28,1))\n    plt.xlabel('Predicted_Digit : ' + str(cap))\n    plt.show","metadata":{"execution":{"iopub.status.busy":"2023-12-31T21:22:37.466998Z","iopub.execute_input":"2023-12-31T21:22:37.467388Z","iopub.status.idle":"2023-12-31T21:22:37.472784Z","shell.execute_reply.started":"2023-12-31T21:22:37.467359Z","shell.execute_reply":"2023-12-31T21:22:37.471859Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"show_digit(23)","metadata":{"execution":{"iopub.status.busy":"2023-12-31T21:22:42.067651Z","iopub.execute_input":"2023-12-31T21:22:42.068041Z","iopub.status.idle":"2023-12-31T21:22:42.325602Z","shell.execute_reply.started":"2023-12-31T21:22:42.068009Z","shell.execute_reply":"2023-12-31T21:22:42.324701Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"show_digit(56)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"show_digit(0)","metadata":{"execution":{"iopub.status.busy":"2023-12-31T21:22:50.107133Z","iopub.execute_input":"2023-12-31T21:22:50.107496Z","iopub.status.idle":"2023-12-31T21:22:50.300518Z","shell.execute_reply.started":"2023-12-31T21:22:50.107470Z","shell.execute_reply":"2023-12-31T21:22:50.299643Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"#### SAVING THE MODEL","metadata":{}},{"cell_type":"code","source":"pickle.dump(digits_detector ,open('/kaggle/working/digits_detector.pkl','wb'))","metadata":{"execution":{"iopub.status.busy":"2023-12-31T21:22:53.707509Z","iopub.execute_input":"2023-12-31T21:22:53.708482Z","iopub.status.idle":"2023-12-31T21:22:53.833904Z","shell.execute_reply.started":"2023-12-31T21:22:53.708443Z","shell.execute_reply":"2023-12-31T21:22:53.832850Z"},"trusted":true},"execution_count":null,"outputs":[]}]}