{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.7.12","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"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-03-30T10:36:16.106118Z","iopub.execute_input":"2023-03-30T10:36:16.106502Z","iopub.status.idle":"2023-03-30T10:36:16.137302Z","shell.execute_reply.started":"2023-03-30T10:36:16.106466Z","shell.execute_reply":"2023-03-30T10:36:16.136211Z"},"trusted":true},"execution_count":1,"outputs":[{"name":"stdout","text":"/kaggle/input/digit-recognizer/sample_submission.csv\n/kaggle/input/digit-recognizer/train.csv\n/kaggle/input/digit-recognizer/test.csv\n","output_type":"stream"}]},{"cell_type":"code","source":"# Load the image data\n# i * 28 + j, where i and j are integers between 0 and 27, inclusive\ntrain_ds = pd.read_csv('/kaggle/input/digit-recognizer/train.csv')\ntest_ds = pd.read_csv('/kaggle/input/digit-recognizer/test.csv')\ntrain_ds_orig = pd.DataFrame.copy(train_ds)\ntrain_ds\n\ntrain_ds_label = train_ds[['label']]\nprint(train_ds_label)\ntrain_ds.drop(['label'], axis=1, inplace=True)\n\n# label: 0-9\n# pixel0, ... pixel783\n","metadata":{"execution":{"iopub.status.busy":"2023-03-30T10:36:20.57503Z","iopub.execute_input":"2023-03-30T10:36:20.576213Z","iopub.status.idle":"2023-03-30T10:36:26.784245Z","shell.execute_reply.started":"2023-03-30T10:36:20.576164Z","shell.execute_reply":"2023-03-30T10:36:26.782503Z"},"trusted":true},"execution_count":2,"outputs":[{"name":"stdout","text":"       label\n0          1\n1          0\n2          1\n3          4\n4          0\n...      ...\n41995      0\n41996      1\n41997      7\n41998      6\n41999      9\n\n[42000 rows x 1 columns]\n","output_type":"stream"}]},{"cell_type":"code","source":"train_ds.info()\ntrain_ds.describe()\n","metadata":{"execution":{"iopub.status.busy":"2023-03-28T20:49:56.164928Z","iopub.execute_input":"2023-03-28T20:49:56.165323Z","iopub.status.idle":"2023-03-28T20:49:57.870046Z","shell.execute_reply.started":"2023-03-28T20:49:56.165279Z","shell.execute_reply":"2023-03-28T20:49:57.869107Z"},"trusted":true},"execution_count":130,"outputs":[{"name":"stdout","text":"<class 'pandas.core.frame.DataFrame'>\nRangeIndex: 42000 entries, 0 to 41999\nColumns: 784 entries, pixel0 to pixel783\ndtypes: int64(784)\nmemory usage: 251.2 MB\n","output_type":"stream"},{"execution_count":130,"output_type":"execute_result","data":{"text/plain":"        pixel0   pixel1   pixel2   pixel3   pixel4   pixel5   pixel6   pixel7  \\\ncount  42000.0  42000.0  42000.0  42000.0  42000.0  42000.0  42000.0  42000.0   \nmean       0.0      0.0      0.0      0.0      0.0      0.0      0.0      0.0   \nstd        0.0      0.0      0.0      0.0      0.0      0.0      0.0      0.0   \nmin        0.0      0.0      0.0      0.0      0.0      0.0      0.0      0.0   \n25%        0.0      0.0      0.0      0.0      0.0      0.0      0.0      0.0   \n50%        0.0      0.0      0.0      0.0      0.0      0.0      0.0      0.0   \n75%        0.0      0.0      0.0      0.0      0.0      0.0      0.0      0.0   \nmax        0.0      0.0      0.0      0.0      0.0      0.0      0.0      0.0   \n\n        pixel8   pixel9  ...      pixel774      pixel775      pixel776  \\\ncount  42000.0  42000.0  ...  42000.000000  42000.000000  42000.000000   \nmean       0.0      0.0  ...      0.219286      0.117095      0.059024   \nstd        0.0      0.0  ...      6.312890      4.633819      3.274488   \nmin        0.0      0.0  ...      0.000000      0.000000      0.000000   \n25%        0.0      0.0  ...      0.000000      0.000000      0.000000   \n50%        0.0      0.0  ...      0.000000      0.000000      0.000000   \n75%        0.0      0.0  ...      0.000000      0.000000      0.000000   \nmax        0.0      0.0  ...    254.000000    254.000000    253.000000   \n\n          pixel777      pixel778      pixel779  pixel780  pixel781  pixel782  \\\ncount  42000.00000  42000.000000  42000.000000   42000.0   42000.0   42000.0   \nmean       0.02019      0.017238      0.002857       0.0       0.0       0.0   \nstd        1.75987      1.894498      0.414264       0.0       0.0       0.0   \nmin        0.00000      0.000000      0.000000       0.0       0.0       0.0   \n25%        0.00000      0.000000      0.000000       0.0       0.0       0.0   \n50%        0.00000      0.000000      0.000000       0.0       0.0       0.0   \n75%        0.00000      0.000000      0.000000       0.0       0.0       0.0   \nmax      253.00000    254.000000     62.000000       0.0       0.0       0.0   \n\n       pixel783  \ncount   42000.0  \nmean        0.0  \nstd         0.0  \nmin         0.0  \n25%         0.0  \n50%         0.0  \n75%         0.0  \nmax         0.0  \n\n[8 rows x 784 columns]","text/html":"<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>pixel0</th>\n      <th>pixel1</th>\n      <th>pixel2</th>\n      <th>pixel3</th>\n      <th>pixel4</th>\n      <th>pixel5</th>\n      <th>pixel6</th>\n      <th>pixel7</th>\n      <th>pixel8</th>\n      <th>pixel9</th>\n      <th>...</th>\n      <th>pixel774</th>\n      <th>pixel775</th>\n      <th>pixel776</th>\n      <th>pixel777</th>\n      <th>pixel778</th>\n      <th>pixel779</th>\n      <th>pixel780</th>\n      <th>pixel781</th>\n      <th>pixel782</th>\n      <th>pixel783</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>count</th>\n      <td>42000.0</td>\n      <td>42000.0</td>\n      <td>42000.0</td>\n      <td>42000.0</td>\n      <td>42000.0</td>\n      <td>42000.0</td>\n      <td>42000.0</td>\n      <td>42000.0</td>\n      <td>42000.0</td>\n      <td>42000.0</td>\n      <td>...</td>\n      <td>42000.000000</td>\n      <td>42000.000000</td>\n      <td>42000.000000</td>\n      <td>42000.00000</td>\n      <td>42000.000000</td>\n      <td>42000.000000</td>\n      <td>42000.0</td>\n      <td>42000.0</td>\n      <td>42000.0</td>\n      <td>42000.0</td>\n    </tr>\n    <tr>\n      <th>mean</th>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>...</td>\n      <td>0.219286</td>\n      <td>0.117095</td>\n      <td>0.059024</td>\n      <td>0.02019</td>\n      <td>0.017238</td>\n      <td>0.002857</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n    </tr>\n    <tr>\n      <th>std</th>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>...</td>\n      <td>6.312890</td>\n      <td>4.633819</td>\n      <td>3.274488</td>\n      <td>1.75987</td>\n      <td>1.894498</td>\n      <td>0.414264</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n    </tr>\n    <tr>\n      <th>min</th>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>...</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.00000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n    </tr>\n    <tr>\n      <th>25%</th>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>...</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.00000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n    </tr>\n    <tr>\n      <th>50%</th>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>...</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.00000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n    </tr>\n    <tr>\n      <th>75%</th>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>...</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.00000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n    </tr>\n    <tr>\n      <th>max</th>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>...</td>\n      <td>254.000000</td>\n      <td>254.000000</td>\n      <td>253.000000</td>\n      <td>253.00000</td>\n      <td>254.000000</td>\n      <td>62.000000</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n    </tr>\n  </tbody>\n</table>\n<p>8 rows × 784 columns</p>\n</div>"},"metadata":{}}]},{"cell_type":"code","source":"import matplotlib.pyplot as plt\nimport random\n\ndef plot(i):\n    # Visualize one of the samples\n    sample_label = train_ds_label.iloc[i][0]\n    sample = train_ds.iloc[i]\n\n    # The rest of columns are pixels\n    sample = np.array(sample, dtype='uint8')\n    \n    # Reshape the array into 28 x 28 array (2-dimensional array)\n    sample = sample.reshape((28, 28))\n\n    # Plot\n    plt.title('{i}th Label is {label}'.format(i=i, label=sample_label))\n    plt.imshow(sample, cmap='gray')\n    plt.show()\n    print(sample_label)\n        \nplot(random.randint(0,len(train_ds)-1))","metadata":{"execution":{"iopub.status.busy":"2023-03-30T10:36:37.304811Z","iopub.execute_input":"2023-03-30T10:36:37.305229Z","iopub.status.idle":"2023-03-30T10:36:37.537833Z","shell.execute_reply.started":"2023-03-30T10:36:37.305188Z","shell.execute_reply":"2023-03-30T10:36:37.536658Z"},"trusted":true},"execution_count":3,"outputs":[{"output_type":"display_data","data":{"text/plain":"<Figure size 640x480 with 1 Axes>","image/png":"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\n"},"metadata":{}},{"name":"stdout","text":"0\n","output_type":"stream"}]},{"cell_type":"code","source":"# Scaling for the individual pixel values 0-255 to 0-1\n#from sklearn.preprocessing import MinMaxScaler\n#\n#for column in train_ds.columns:\n#    col = train_ds[[column]]\n#    min_max_scaler = MinMaxScaler(feature_range=(0, 1))\n#    col_scaled = min_max_scaler.fit_transform(col)\n#    train_ds[[column]] = col_scaled\n#   \n#    col = test_ds[[column]]\n#    min_max_scaler = MinMaxScaler(feature_range=(0, 1))\n#    col_scaled = min_max_scaler.fit_transform(col)\n#    test_ds[[column]] = col_scaled\n\n\n# Simple scaling:\ntrain_ds = train_ds / 255.0\ntest_ds = test_ds / 255.0\nprint(train_ds.iloc[0].values)\n\n\n","metadata":{"execution":{"iopub.status.busy":"2023-03-30T10:36:46.3871Z","iopub.execute_input":"2023-03-30T10:36:46.388059Z","iopub.status.idle":"2023-03-30T10:36:46.499068Z","shell.execute_reply.started":"2023-03-30T10:36:46.38802Z","shell.execute_reply":"2023-03-30T10:36:46.497956Z"},"trusted":true},"execution_count":4,"outputs":[{"name":"stdout","text":"[0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.7372549  1.         0.36862745 0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.74901961 0.98039216 0.99215686\n 0.36470588 0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.48235294 0.97254902 0.99215686 0.65490196 0.03921569 0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.31372549 0.96862745 0.99215686\n 0.81568627 0.05098039 0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.11372549 0.81176471 0.99215686 0.92156863 0.30196078 0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.21176471 0.81960784 0.99215686\n 0.99215686 0.34509804 0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.36470588 0.99607843 0.99215686 0.93333333 0.66666667 0.06666667\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.09019608 0.82352941 0.99607843\n 0.99215686 0.62352941 0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.0627451  0.81960784 0.99215686 0.99607843 0.94117647 0.31764706\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.10588235 0.99215686\n 0.99215686 0.99607843 0.05098039 0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.07843137 0.80784314 0.99607843 0.99607843 0.77647059\n 0.02745098 0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.65882353\n 0.99215686 0.99215686 0.76862745 0.02745098 0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.07843137 0.79607843 0.99215686 0.97254902\n 0.29803922 0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.08627451\n 0.7372549  0.99215686 0.96078431 0.36470588 0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.40392157 0.99215686 0.99215686\n 0.74901961 0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.34901961 0.94117647 0.99215686 0.76470588 0.09803922 0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.05882353 0.8627451  0.99215686\n 0.99215686 0.31372549 0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.36862745 0.99215686 0.99215686 0.99215686 0.36862745\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.34901961\n 0.98431373 0.99215686 0.98039216 0.51372549 0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.83921569 0.85490196\n 0.37254902 0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.         0.         0.\n 0.         0.         0.         0.        ]\n","output_type":"stream"}]},{"cell_type":"code","source":"# Simple Neural network\n\n# Train using a deep neural network\nimport torch\nimport torch.nn as nn\n\n# Define the input and output sizes\ninput_size = len(train_ds.columns)\noutput_size = 10  # Change to 10 for 10 categories\n\n# Define the number of units in each hidden layer\nhidden_size = 500\n\n# Define the neural network architecture\nclass Net(nn.Module):\n    def __init__(self):\n        super(Net, self).__init__()\n        self.fc1 = nn.Linear(input_size, hidden_size)\n        self.fc2 = nn.Linear(hidden_size, hidden_size)\n        self.fc3 = nn.Linear(hidden_size, output_size)\n\n    def forward(self, x):\n        x = torch.relu(self.fc1(x))\n        x = torch.relu(self.fc2(x))\n        x = torch.softmax(self.fc3(x), dim=1)  # Change to softmax activation\n        return x\n\n# Instantiate the neural network\nnet = Net()\n\n# Define the loss function\ncriterion = nn.CrossEntropyLoss()  # Change to categorical cross-entropy loss\n\n# Define the optimizer\noptimizer = torch.optim.Adam(net.parameters(), lr=0.001)\n\n# Convert the pandas dataframe to a PyTorch tensor\ndata = torch.Tensor(train_ds.values)\n\n# Define the target values\ntarget = torch.tensor(train_ds_label.values.squeeze(), dtype=torch.long)  # Use torch.tensor and dtype=torch.long for categorical labels\n\n# Train the neural network\nnum_epochs = 100\nfor epoch in range(num_epochs):\n    # Forward pass\n    outputs = net(data)\n    loss = criterion(outputs, target)\n\n    # Backward and optimize\n    optimizer.zero_grad()\n    loss.backward()\n    optimizer.step()\n\n    # Print the loss every 10 epochs\n    if (epoch+1) % 10 == 0:\n        print('Epoch [{}/{}], Loss: {:.4f}'.format(epoch+1, num_epochs, loss.item()))\nprint('Complete')","metadata":{"execution":{"iopub.status.busy":"2023-03-28T20:29:16.819391Z","iopub.execute_input":"2023-03-28T20:29:16.819793Z","iopub.status.idle":"2023-03-28T20:34:00.928577Z","shell.execute_reply.started":"2023-03-28T20:29:16.819755Z","shell.execute_reply":"2023-03-28T20:34:00.927778Z"},"trusted":true},"execution_count":119,"outputs":[{"name":"stdout","text":"Epoch [10/100], Loss: 1.9951\nEpoch [20/100], Loss: 1.6978\nEpoch [30/100], Loss: 1.6431\nEpoch [40/100], Loss: 1.6244\nEpoch [50/100], Loss: 1.6152\nEpoch [60/100], Loss: 1.6095\nEpoch [70/100], Loss: 1.5778\nEpoch [80/100], Loss: 1.5520\nEpoch [90/100], Loss: 1.5385\nEpoch [100/100], Loss: 1.5314\nComplete\n","output_type":"stream"}]},{"cell_type":"code","source":"# Simple Neural network with Batching\n\n# Train using a deep neural network\nimport torch\nimport torch.nn as nn\nfrom torch.utils.data import DataLoader, TensorDataset\n\n# Define the input and output sizes\ninput_size = len(train_ds.columns)\noutput_size = 10  # Change to 10 for 10 categories\n\n# Define the number of units in each hidden layer\nhidden_size = 500\n\n# Define the neural network architecture\nclass Net(nn.Module):\n    def __init__(self):\n        super(Net, self).__init__()\n        self.fc1 = nn.Linear(input_size, hidden_size)\n        self.fc2 = nn.Linear(hidden_size, hidden_size)\n        self.fc3 = nn.Linear(hidden_size, output_size)\n\n    def forward(self, x):\n        x = torch.relu(self.fc1(x))\n        x = torch.relu(self.fc2(x))\n        x = self.fc3(x)  # Remove softmax activation\n        # x = torch.softmax(self.fc3(x), dim=1)  # Change to softmax activation\n        return x\n\n# Instantiate the neural network\nnet = Net()\n\n# Define the loss function\ncriterion = nn.CrossEntropyLoss()  # Change to categorical cross-entropy loss\n\n# Define the optimizer\noptimizer = torch.optim.Adam(net.parameters(), lr=0.001)\n\n# Convert the pandas dataframe to a PyTorch tensor\ndata = torch.Tensor(train_ds.values)\n\n# Define the target values\ntarget = torch.tensor(train_ds_label.values.squeeze(), dtype=torch.long)  # Use torch.tensor and dtype=torch.long for categorical labels\n\n# Create a TensorDataset and DataLoader\ndataset = TensorDataset(data, target)\nbatch_size = 128  # Reasonable batch size\ndataloader = DataLoader(dataset, batch_size=batch_size, shuffle=True)\n\n# Train the neural network\nnum_epochs = 1000\nfor epoch in range(num_epochs):\n    for i, (inputs, labels) in enumerate(dataloader):\n        # Forward pass\n        outputs = net(inputs)\n        loss = criterion(outputs, labels)\n\n        # Backward and optimize\n        optimizer.zero_grad()\n        loss.backward()\n        optimizer.step()\n\n    # Print the loss every 10 epochs\n    if (epoch+1) % 10 == 0:\n        print('Epoch [{}/{}], Loss: {:.8f}'.format(epoch+1, num_epochs, loss.item()))\nprint('Complete')\n","metadata":{"execution":{"iopub.status.busy":"2023-03-30T10:37:13.423018Z","iopub.execute_input":"2023-03-30T10:37:13.423794Z","iopub.status.idle":"2023-03-30T10:37:32.797174Z","shell.execute_reply.started":"2023-03-30T10:37:13.423751Z","shell.execute_reply":"2023-03-30T10:37:32.795924Z"},"trusted":true},"execution_count":5,"outputs":[{"traceback":["\u001b[0;31m---------------------------------------------------------------------------\u001b[0m","\u001b[0;31mKeyboardInterrupt\u001b[0m                         Traceback (most recent call last)","\u001b[0;32m/tmp/ipykernel_27/31502986.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m     53\u001b[0m     \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0minputs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlabels\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32min\u001b[0m \u001b[0menumerate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdataloader\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     54\u001b[0m         \u001b[0;31m# Forward pass\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 55\u001b[0;31m         \u001b[0moutputs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnet\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0minputs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     56\u001b[0m         \u001b[0mloss\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcriterion\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0moutputs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlabels\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     57\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/opt/conda/lib/python3.7/site-packages/torch/nn/modules/module.py\u001b[0m in \u001b[0;36m_call_impl\u001b[0;34m(self, *input, **kwargs)\u001b[0m\n\u001b[1;32m   1188\u001b[0m         if not (self._backward_hooks or self._forward_hooks or self._forward_pre_hooks or _global_backward_hooks\n\u001b[1;32m   1189\u001b[0m                 or _global_forward_hooks or _global_forward_pre_hooks):\n\u001b[0;32m-> 1190\u001b[0;31m             \u001b[0;32mreturn\u001b[0m \u001b[0mforward_call\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0minput\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   1191\u001b[0m         \u001b[0;31m# Do not call functions when jit is used\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1192\u001b[0m         \u001b[0mfull_backward_hooks\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnon_full_backward_hooks\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/tmp/ipykernel_27/31502986.py\u001b[0m in \u001b[0;36mforward\u001b[0;34m(self, x)\u001b[0m\n\u001b[1;32m     23\u001b[0m     \u001b[0;32mdef\u001b[0m \u001b[0mforward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     24\u001b[0m         \u001b[0mx\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtorch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrelu\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfc1\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 25\u001b[0;31m         \u001b[0mx\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtorch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrelu\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfc2\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     26\u001b[0m         \u001b[0mx\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfc3\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m  \u001b[0;31m# Remove softmax activation\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     27\u001b[0m         \u001b[0;31m# x = torch.softmax(self.fc3(x), dim=1)  # Change to softmax activation\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/opt/conda/lib/python3.7/site-packages/torch/nn/modules/module.py\u001b[0m in \u001b[0;36m_call_impl\u001b[0;34m(self, *input, **kwargs)\u001b[0m\n\u001b[1;32m   1188\u001b[0m         if not (self._backward_hooks or self._forward_hooks or self._forward_pre_hooks or _global_backward_hooks\n\u001b[1;32m   1189\u001b[0m                 or _global_forward_hooks or _global_forward_pre_hooks):\n\u001b[0;32m-> 1190\u001b[0;31m             \u001b[0;32mreturn\u001b[0m \u001b[0mforward_call\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0minput\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   1191\u001b[0m         \u001b[0;31m# Do not call functions when jit is used\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1192\u001b[0m         \u001b[0mfull_backward_hooks\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnon_full_backward_hooks\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/opt/conda/lib/python3.7/site-packages/torch/nn/modules/linear.py\u001b[0m in \u001b[0;36mforward\u001b[0;34m(self, input)\u001b[0m\n\u001b[1;32m    112\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    113\u001b[0m     \u001b[0;32mdef\u001b[0m \u001b[0mforward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0minput\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mTensor\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0mTensor\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 114\u001b[0;31m         \u001b[0;32mreturn\u001b[0m \u001b[0mF\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlinear\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0minput\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mweight\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbias\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    115\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    116\u001b[0m     \u001b[0;32mdef\u001b[0m \u001b[0mextra_repr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0mstr\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;31mKeyboardInterrupt\u001b[0m: "],"ename":"KeyboardInterrupt","evalue":"","output_type":"error"}]},{"cell_type":"code","source":"# Convolutional Neural Network (CNN) for the MNIST dataset\nimport torch\nimport torch.nn as nn\nfrom torch.utils.data import DataLoader, TensorDataset\nimport torch.nn.functional as F\n\n# Define constants\nIMG_WIDTH = 28\nIMG_HEIGHT = 28\nIMG_CHANNELS = 1\nNUM_CLASSES = 10\nBATCH_SIZE = 128\nNUM_EPOCHS = 500\nNUM_CONV_CHANNELS_1 = 32\nNUM_CONV_CHANNELS_2 = 64\n\n# Define the CNN architecture\nclass CNN(nn.Module):\n    def __init__(self):\n        super(CNN, self).__init__()\n        self.conv1 = nn.Conv2d(IMG_CHANNELS, NUM_CONV_CHANNELS_1, kernel_size=3, padding=1)\n        self.conv2 = nn.Conv2d(NUM_CONV_CHANNELS_1, NUM_CONV_CHANNELS_2, kernel_size=3, padding=1)\n        self.pool = nn.MaxPool2d(2, 2)\n        self.dropout = nn.Dropout(0.25)\n        self.fc1 = nn.Linear(NUM_CONV_CHANNELS_2 * 7 * 7, 128)\n        self.fc2 = nn.Linear(128, NUM_CLASSES)\n\n    def forward(self, x):\n        x = self.pool(F.relu(self.conv1(x)))\n        x = self.pool(F.relu(self.conv2(x)))\n        x = self.dropout(x)\n        x = x.view(-1, NUM_CONV_CHANNELS_2 * 7 * 7)\n        x = F.relu(self.fc1(x))\n        x = self.dropout(x)\n        x = self.fc2(x)\n        return x\n\n# Instantiate the CNN\ncnn = CNN()\n\n# Define the loss function\ncriterion = nn.CrossEntropyLoss()\n\n# Define the optimizer\noptimizer = torch.optim.Adam(cnn.parameters(), lr=0.001)\n\n# Reshape the input data to be in the format (N, C, H, W)\ndata = torch.Tensor(train_ds.values).view(-1, IMG_CHANNELS, IMG_HEIGHT, IMG_WIDTH)\n\n# Define the target values\ntarget = torch.tensor(train_ds_label.values.squeeze(), dtype=torch.long)\n\n# Create a TensorDataset and DataLoader\ndataset = TensorDataset(data, target)\ndataloader = DataLoader(dataset, batch_size=BATCH_SIZE, shuffle=True)\n\n# Train the CNN\nfor epoch in range(NUM_EPOCHS):\n    for i, (inputs, labels) in enumerate(dataloader):\n        # Forward pass\n        outputs = cnn(inputs)\n        loss = criterion(outputs, labels)\n\n        # Backward and optimize\n        optimizer.zero_grad()\n        loss.backward()\n        optimizer.step()\n\n    # Print the loss every 10 epochs\n    if (epoch + 1) % 10 == 0:\n        print('Epoch [{}/{}], Loss: {:.8f}'.format(epoch + 1, NUM_EPOCHS, loss.item()))\nprint('Complete')","metadata":{"execution":{"iopub.status.busy":"2023-03-30T10:40:33.816921Z","iopub.execute_input":"2023-03-30T10:40:33.817643Z","iopub.status.idle":"2023-03-30T14:01:22.440865Z","shell.execute_reply.started":"2023-03-30T10:40:33.817602Z","shell.execute_reply":"2023-03-30T14:01:22.439439Z"},"trusted":true},"execution_count":7,"outputs":[{"name":"stdout","text":"Epoch [10/500], Loss: 0.00021044\nEpoch [20/500], Loss: 0.00073644\nEpoch [30/500], Loss: 0.04451482\nEpoch [40/500], Loss: 0.00082840\nEpoch [50/500], Loss: 0.00889883\nEpoch [60/500], Loss: 0.00000007\nEpoch [70/500], Loss: 0.00001348\nEpoch [80/500], Loss: 0.00009195\nEpoch [90/500], Loss: 0.00014341\nEpoch [100/500], Loss: 0.00000168\nEpoch [110/500], Loss: 0.00000001\nEpoch [120/500], Loss: 0.00002798\nEpoch [130/500], Loss: 0.00002211\nEpoch [140/500], Loss: 0.00000037\nEpoch [150/500], Loss: 0.00000031\nEpoch [160/500], Loss: 0.00000001\nEpoch [170/500], Loss: 0.00001350\nEpoch [180/500], Loss: 0.00000017\nEpoch [190/500], Loss: 0.00000000\nEpoch [200/500], Loss: 0.00000396\nEpoch [210/500], Loss: 0.00000000\nEpoch [220/500], Loss: 0.00000025\nEpoch [230/500], Loss: 0.00000232\nEpoch [240/500], Loss: 0.00052706\nEpoch [250/500], Loss: 0.00000000\nEpoch [260/500], Loss: 0.00000001\nEpoch [270/500], Loss: 0.00000001\nEpoch [280/500], Loss: 0.00009223\nEpoch [290/500], Loss: 0.00000000\nEpoch [300/500], Loss: 0.00000038\nEpoch [310/500], Loss: 0.00000000\nEpoch [320/500], Loss: 0.00000005\nEpoch [330/500], Loss: 0.00000000\nEpoch [340/500], Loss: 0.00000000\nEpoch [350/500], Loss: 0.00000000\nEpoch [360/500], Loss: 0.00000000\nEpoch [370/500], Loss: 0.00000000\nEpoch [380/500], Loss: 0.00000000\nEpoch [390/500], Loss: 0.00000018\nEpoch [400/500], Loss: 0.00000000\nEpoch [410/500], Loss: 0.00000000\nEpoch [420/500], Loss: 0.00000005\nEpoch [430/500], Loss: 0.00000000\nEpoch [440/500], Loss: 0.00000000\nEpoch [450/500], Loss: 0.00000000\nEpoch [460/500], Loss: 0.00010827\nEpoch [470/500], Loss: 0.00000000\nEpoch [480/500], Loss: 0.00000000\nEpoch [490/500], Loss: 0.00000000\nEpoch [500/500], Loss: 0.00000044\nComplete\n","output_type":"stream"}]},{"cell_type":"code","source":"#### NOT CONVOLUTED CODE\n\n# Convert the test dataframe to a PyTorch tensor\ntest_data = torch.Tensor(test_ds.values)\nprint(test_data.shape)\n\n# Make predictions on the test data\ntest_outputs_logits = net(test_data)\n\n# Apply the softmax function to convert logits to probabilities\nprobabilities = torch.softmax(test_outputs_logits, dim=1)\n\n# Get the class index with the highest probability\npredicted_classes = torch.argmax(test_outputs_logits, dim=1)\n\n# Convert the predicted_classes tensor to a DataFrame\npredicted_classes_df = pd.DataFrame(predicted_classes.numpy(), columns=['Label'])\n\n# Set the DataFrame index to be 1-based\npredicted_classes_df.index += 1\n\n# Reset the index and rename the index column\npredicted_classes_df.reset_index(inplace=True)\npredicted_classes_df.rename(columns={'index': 'ImageId'}, inplace=True)\n\nprint(predicted_classes_df)\n\n","metadata":{"execution":{"iopub.status.busy":"2023-03-28T21:00:01.435172Z","iopub.execute_input":"2023-03-28T21:00:01.435757Z","iopub.status.idle":"2023-03-28T21:00:02.185281Z","shell.execute_reply.started":"2023-03-28T21:00:01.435701Z","shell.execute_reply":"2023-03-28T21:00:02.184143Z"},"trusted":true},"execution_count":143,"outputs":[{"name":"stdout","text":"torch.Size([28000, 784])\n       ImageId  Label\n0            1      2\n1            2      0\n2            3      9\n3            4      0\n4            5      3\n...        ...    ...\n27995    27996      9\n27996    27997      7\n27997    27998      3\n27998    27999      9\n27999    28000      2\n\n[28000 rows x 2 columns]\n","output_type":"stream"}]},{"cell_type":"code","source":"# Convoluted predictions\n# Convert the test dataframe to a PyTorch tensor\ntest_data = torch.Tensor(test_ds.values).view(-1, IMG_CHANNELS, IMG_HEIGHT, IMG_WIDTH)\n\n# Make predictions on the test data\ntest_outputs_logits = cnn(test_data)\n\n# Apply the softmax function to convert logits to probabilities\nprobabilities = torch.softmax(test_outputs_logits, dim=1)\n\n# Get the class index with the highest probability\npredicted_classes = torch.argmax(test_outputs_logits, dim=1)\n\n# Convert the predicted_classes tensor to a DataFrame\npredicted_classes_df = pd.DataFrame(predicted_classes.numpy(), columns=['Label'])\n\n# Set the DataFrame index to be 1-based\npredicted_classes_df.index += 1\n\n# Reset the index and rename the index column\npredicted_classes_df.reset_index(inplace=True)\npredicted_classes_df.rename(columns={'index': 'ImageId'}, inplace=True)\n\nprint(predicted_classes_df)","metadata":{"execution":{"iopub.status.busy":"2023-03-30T14:29:57.365274Z","iopub.execute_input":"2023-03-30T14:29:57.365749Z","iopub.status.idle":"2023-03-30T14:30:10.54245Z","shell.execute_reply.started":"2023-03-30T14:29:57.365713Z","shell.execute_reply":"2023-03-30T14:30:10.541437Z"},"trusted":true},"execution_count":8,"outputs":[{"name":"stdout","text":"       ImageId  Label\n0            1      2\n1            2      0\n2            3      9\n3            4      9\n4            5      3\n...        ...    ...\n27995    27996      9\n27996    27997      7\n27997    27998      3\n27998    27999      9\n27999    28000      2\n\n[28000 rows x 2 columns]\n","output_type":"stream"}]},{"cell_type":"code","source":"predicted_classes_df.to_csv('mnist6.csv', index=False)\n","metadata":{"execution":{"iopub.status.busy":"2023-03-30T14:30:13.761853Z","iopub.execute_input":"2023-03-30T14:30:13.76223Z","iopub.status.idle":"2023-03-30T14:30:13.802982Z","shell.execute_reply.started":"2023-03-30T14:30:13.762196Z","shell.execute_reply":"2023-03-30T14:30:13.8017Z"},"trusted":true},"execution_count":9,"outputs":[]}]}