{"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"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import numpy as np\nimport pandas as pd\nimport matplotlib.pyplot as plt\nimport torch\nimport torch.nn as nn\nfrom torch.autograd import Variable\nfrom torch.utils.data import DataLoader\nimport pandas as pd\nfrom sklearn.model_selection import train_test_split","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2023-08-31T10:31:30.145247Z","iopub.execute_input":"2023-08-31T10:31:30.146097Z","iopub.status.idle":"2023-08-31T10:31:30.153585Z","shell.execute_reply.started":"2023-08-31T10:31:30.146041Z","shell.execute_reply":"2023-08-31T10:31:30.152467Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train = pd.read_csv(\"/kaggle/input/digit-recognizer/train.csv\",dtype = np.float32)\n\ntargets_numpy = train.label.values\nfeatures_numpy = train.loc[:,train.columns != \"label\"].values/255\n\nfeatures_train, features_test, targets_train, targets_test = train_test_split(features_numpy,\n                                                                             targets_numpy,\n                                                                             test_size = 0.2,\n                                                                             random_state = 42) \n\nfeaturesTrain = torch.from_numpy(features_train)\ntargetsTrain = torch.from_numpy(targets_train).type(torch.LongTensor)\n\nfeaturesTest = torch.from_numpy(features_test)\ntargetsTest = torch.from_numpy(targets_test).type(torch.LongTensor)\n\nbatch_size = 100\nn_iters = 10000\nnum_epochs = n_iters / (len(features_train) / batch_size)\nnum_epochs = int(num_epochs)\n\ntrain = torch.utils.data.TensorDataset(featuresTrain,targetsTrain)\ntest = torch.utils.data.TensorDataset(featuresTest,targetsTest)\n\ntrain_loader = DataLoader(train, batch_size = batch_size, shuffle = False)\ntest_loader = DataLoader(test, batch_size = batch_size, shuffle = False)","metadata":{"execution":{"iopub.status.busy":"2023-08-31T10:31:32.472329Z","iopub.execute_input":"2023-08-31T10:31:32.472842Z","iopub.status.idle":"2023-08-31T10:31:37.779822Z","shell.execute_reply.started":"2023-08-31T10:31:32.472801Z","shell.execute_reply":"2023-08-31T10:31:37.778511Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test2 = pd.read_csv(\"/kaggle/input/digit-recognizer/test.csv\",dtype = np.float32)\nfeatures_numpy2 = test2.loc[:].values/255\nfeaturesTest2 = torch.from_numpy(features_numpy2)\ntest2 = torch.utils.data.TensorDataset(featuresTest2)\ntest_loader2 = DataLoader(test2, batch_size = batch_size, shuffle = False)","metadata":{"execution":{"iopub.status.busy":"2023-08-31T10:31:45.150785Z","iopub.execute_input":"2023-08-31T10:31:45.151195Z","iopub.status.idle":"2023-08-31T10:31:48.153857Z","shell.execute_reply.started":"2023-08-31T10:31:45.151140Z","shell.execute_reply":"2023-08-31T10:31:48.152900Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.imshow(features_numpy[18].reshape(28,28))\nplt.axis(\"off\")\nplt.title(str(targets_numpy[18]))\nplt.savefig('graph.png')\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2023-08-31T10:31:54.283353Z","iopub.execute_input":"2023-08-31T10:31:54.283899Z","iopub.status.idle":"2023-08-31T10:31:54.543017Z","shell.execute_reply.started":"2023-08-31T10:31:54.283850Z","shell.execute_reply":"2023-08-31T10:31:54.541614Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"class NeuralNetwork(nn.Module):\n    \n    def __init__(self):\n        super(NeuralNetwork, self).__init__()\n        self.fc1 = nn.Linear(28*28, 150) \n        self.fc2 = nn.Linear(150, 150)\n        self.fc3 = nn.Linear(150, 150)\n        self.fc4 = nn.Linear(150, 150)\n        self.fc5 = nn.Linear(150, 10)\n        self.activation = nn.ReLU()\n    \n    def forward(self, x):\n        x = self.fc1(x)\n        x = self.activation(x)\n        \n        x = self.fc2(x)\n        x = self.activation(x)\n        \n        x = self.fc3(x)\n        x = self.activation(x)\n        \n        x = self.fc4(x)\n        x = self.activation(x)\n        \n        x = self.fc5(x)\n        return x\n\nmodel = NeuralNetwork()\nerror = nn.CrossEntropyLoss()\n\noptimizer = torch.optim.Adam(model.parameters())","metadata":{"execution":{"iopub.status.busy":"2023-08-31T10:32:59.125283Z","iopub.execute_input":"2023-08-31T10:32:59.125669Z","iopub.status.idle":"2023-08-31T10:32:59.139301Z","shell.execute_reply.started":"2023-08-31T10:32:59.125640Z","shell.execute_reply":"2023-08-31T10:32:59.137866Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"count = 0\nloss_list = []\niteration_list = []\naccuracy_list = []\nfor epoch in range(num_epochs):\n    for i, (images, labels) in enumerate(train_loader):\n\n        train = Variable(images.view(-1, 28*28))\n        labels = Variable(labels)\n        optimizer.zero_grad()\n        outputs = model(train)\n        loss = error(outputs, labels)\n        loss.backward()\n        optimizer.step()\n        count += 1\n        \n        if count % 50 == 0:      \n            correct = 0\n            total = 0\n            for images, labels in test_loader:\n\n                test = Variable(images.view(-1, 28*28))\n                outputs = model(test)\n                predicted = torch.max(outputs.data, 1)[1]\n                total += len(labels)\n                correct += (predicted == labels).sum()\n            \n            accuracy = 100 * correct / float(total)\n            \n            loss_list.append(loss.data)\n            iteration_list.append(count)\n            accuracy_list.append(accuracy)\n        if count % 500 == 0:\n            print('Iteration: {}  Loss: {}  Accuracy: {} %'.format(count, loss.data, accuracy))","metadata":{"execution":{"iopub.status.busy":"2023-08-31T10:33:00.450944Z","iopub.execute_input":"2023-08-31T10:33:00.451869Z","iopub.status.idle":"2023-08-31T10:34:29.100095Z","shell.execute_reply.started":"2023-08-31T10:33:00.451829Z","shell.execute_reply":"2023-08-31T10:34:29.098676Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.plot(iteration_list,loss_list)\nplt.xlabel(\"Number of iteration\")\nplt.ylabel(\"Loss\")\nplt.title(\"ANN: Loss vs Number of iteration\")\nplt.show()\n\nplt.plot(iteration_list,accuracy_list,color = \"red\")\nplt.xlabel(\"Number of iteration\")\nplt.ylabel(\"Accuracy\")\nplt.title(\"ANN: Accuracy vs Number of iteration\")\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2023-08-31T10:34:36.276770Z","iopub.execute_input":"2023-08-31T10:34:36.277498Z","iopub.status.idle":"2023-08-31T10:34:36.847212Z","shell.execute_reply.started":"2023-08-31T10:34:36.277460Z","shell.execute_reply":"2023-08-31T10:34:36.846021Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"prediction = []\nfor images in test_loader2:\n    test = Variable(images[0].view(-1, 28*28))\n    outputs = model(test)\n    predicted = torch.max(outputs.data, 1)[1]\n    prediction.append(predicted)","metadata":{"execution":{"iopub.status.busy":"2023-08-31T10:34:46.833123Z","iopub.execute_input":"2023-08-31T10:34:46.833607Z","iopub.status.idle":"2023-08-31T10:34:47.469323Z","shell.execute_reply.started":"2023-08-31T10:34:46.833573Z","shell.execute_reply":"2023-08-31T10:34:47.468392Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"prediction_numpy = np.array([], dtype=np.int32)\nfor batch in prediction:\n    prediction_numpy = np.append(prediction_numpy, batch.numpy())\nprediction_df = pd.DataFrame(data={'Label': prediction_numpy}, index=np.arange(1, 28001))\nprediction_df.index.rename('ImageId', inplace= True )\n\nprediction_df.to_csv(\"/kaggle/working/submission.csv\")","metadata":{"execution":{"iopub.status.busy":"2023-08-31T10:34:49.533302Z","iopub.execute_input":"2023-08-31T10:34:49.533738Z","iopub.status.idle":"2023-08-31T10:34:49.624396Z","shell.execute_reply.started":"2023-08-31T10:34:49.533705Z","shell.execute_reply":"2023-08-31T10:34:49.623416Z"},"trusted":true},"execution_count":null,"outputs":[]}],"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"}}