{"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":"markdown","source":"# 1. Imports ","metadata":{}},{"cell_type":"code","source":"import torch\nimport torch.nn as nn\nimport torch.optim as optim\nimport torch.nn.functional as F\nfrom torch.utils.data import DataLoader\nimport torchvision.datasets as datasets\nimport torchvision.transforms as transforms\nimport pandas as pd","metadata":{"execution":{"iopub.status.busy":"2023-02-28T20:23:16.497845Z","iopub.execute_input":"2023-02-28T20:23:16.498254Z","iopub.status.idle":"2023-02-28T20:23:16.504860Z","shell.execute_reply.started":"2023-02-28T20:23:16.498211Z","shell.execute_reply":"2023-02-28T20:23:16.502938Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# 2. Creat Network","metadata":{}},{"cell_type":"code","source":"class NN(nn.Module):\n    def __init__(self, inp_size, out_size):\n        super(NN, self).__init__()\n        self.fn1 = nn.Linear(inp_size, 1024)\n        self.fn2 = nn.Linear(1024, 2048)\n        self.fn3 = nn.Linear(2048, out_size)\n        \n    def forward(self, x):\n        x = F.relu(self.fn1(x))\n        x = F.relu(self.fn2(x))\n        x = self.fn3(x)\n        return x        ","metadata":{"execution":{"iopub.status.busy":"2023-02-28T20:23:16.762872Z","iopub.execute_input":"2023-02-28T20:23:16.763173Z","iopub.status.idle":"2023-02-28T20:23:16.769908Z","shell.execute_reply.started":"2023-02-28T20:23:16.763145Z","shell.execute_reply":"2023-02-28T20:23:16.768892Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# 3. Set device","metadata":{}},{"cell_type":"code","source":"device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')","metadata":{"execution":{"iopub.status.busy":"2023-02-28T20:23:18.172704Z","iopub.execute_input":"2023-02-28T20:23:18.173331Z","iopub.status.idle":"2023-02-28T20:23:18.224871Z","shell.execute_reply.started":"2023-02-28T20:23:18.173292Z","shell.execute_reply":"2023-02-28T20:23:18.223663Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"device.type","metadata":{"execution":{"iopub.status.busy":"2023-02-28T20:23:19.949909Z","iopub.execute_input":"2023-02-28T20:23:19.950635Z","iopub.status.idle":"2023-02-28T20:23:19.958358Z","shell.execute_reply.started":"2023-02-28T20:23:19.950596Z","shell.execute_reply":"2023-02-28T20:23:19.957224Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# 4. Hyperparameters","metadata":{}},{"cell_type":"code","source":"inp_size = 784\nout_size = 10\nlearning_rate = 0.01\nbatch_size = 32\nepochs = 1","metadata":{"execution":{"iopub.status.busy":"2023-02-28T20:23:21.534080Z","iopub.execute_input":"2023-02-28T20:23:21.534791Z","iopub.status.idle":"2023-02-28T20:23:21.539801Z","shell.execute_reply.started":"2023-02-28T20:23:21.534752Z","shell.execute_reply":"2023-02-28T20:23:21.538586Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# 5. Load data","metadata":{}},{"cell_type":"code","source":"df_subm = pd.read_csv('/kaggle/input/digit-recognizer/sample_submission.csv')\ndf_train = pd.read_csv('/kaggle/input/digit-recognizer/train.csv')\ndf_test = pd.read_csv('/kaggle/input/digit-recognizer/test.csv')","metadata":{"execution":{"iopub.status.busy":"2023-02-28T20:23:23.301289Z","iopub.execute_input":"2023-02-28T20:23:23.301659Z","iopub.status.idle":"2023-02-28T20:23:28.093831Z","shell.execute_reply.started":"2023-02-28T20:23:23.301627Z","shell.execute_reply":"2023-02-28T20:23:28.092729Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# df_subm\n# df_train\ndf_test","metadata":{"execution":{"iopub.status.busy":"2023-02-28T20:23:28.095894Z","iopub.execute_input":"2023-02-28T20:23:28.096379Z","iopub.status.idle":"2023-02-28T20:23:28.122659Z","shell.execute_reply.started":"2023-02-28T20:23:28.096341Z","shell.execute_reply":"2023-02-28T20:23:28.121559Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"class DigitDataset(torch.utils.data.Dataset):\n    def __init__(self, path_train_csv, transform=None):\n        self.data = pd.read_csv(path_train_csv)\n        self.transform = transform\n        \n        self.labels = torch.tensor(self.data.pop('label').values, dtype=torch.long)\n        self.features = torch.tensor(self.data.values,  dtype=torch.float)\n        \n    \n    def __len__(self):\n        return len(self.data)\n    \n    def __getitem__(self, index):\n        features = self.features[index]\n        label = self.labels[index]\n        \n        if self.transform:\n            features = self.transform(features)\n        \n        return (features, label)\n        \n    \nclass DigitDatasetTest(torch.utils.data.Dataset):\n    def __init__(self, path_train_csv, transform=None):\n        self.data = pd.read_csv(path_train_csv)\n        self.transform = transform\n        \n        # self.labels = torch.tensor(self.data.pop('label').values, dtype=torch.long)\n        self.features = torch.tensor(self.data.values,  dtype=torch.float)\n        \n    \n    def __len__(self):\n        return len(self.data)\n    \n    def __getitem__(self, index):\n        features = self.features[index]\n        \n        if self.transform:\n            features = self.transform(features)\n        \n        return (features)\n        \n    ","metadata":{"execution":{"iopub.status.busy":"2023-02-28T20:23:28.124280Z","iopub.execute_input":"2023-02-28T20:23:28.124729Z","iopub.status.idle":"2023-02-28T20:23:28.137174Z","shell.execute_reply.started":"2023-02-28T20:23:28.124692Z","shell.execute_reply":"2023-02-28T20:23:28.136104Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"dataset_train = DigitDataset('/kaggle/input/digit-recognizer/train.csv')\ndataloader_train = DataLoader(dataset_train, batch_size = batch_size, shuffle=True)\n\ndataset_test = DigitDatasetTest('/kaggle/input/digit-recognizer/test.csv')\ndataloader_test = DataLoader(dataset_test,batch_size = batch_size, shuffle=True)","metadata":{"execution":{"iopub.status.busy":"2023-02-28T20:23:28.139881Z","iopub.execute_input":"2023-02-28T20:23:28.140252Z","iopub.status.idle":"2023-02-28T20:23:31.846606Z","shell.execute_reply.started":"2023-02-28T20:23:28.140210Z","shell.execute_reply":"2023-02-28T20:23:31.845365Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# 6. Initialize network","metadata":{}},{"cell_type":"code","source":"model = NN(inp_size, out_size).to(device)","metadata":{"execution":{"iopub.status.busy":"2023-02-28T20:23:31.848978Z","iopub.execute_input":"2023-02-28T20:23:31.849756Z","iopub.status.idle":"2023-02-28T20:23:34.682619Z","shell.execute_reply.started":"2023-02-28T20:23:31.849715Z","shell.execute_reply":"2023-02-28T20:23:34.681279Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# 7. Loader and Optimizer","metadata":{}},{"cell_type":"code","source":"loss_func = nn.CrossEntropyLoss()\noptimizer = optim.Adam(model.parameters(), lr=learning_rate)","metadata":{"execution":{"iopub.status.busy":"2023-02-28T20:23:34.685128Z","iopub.execute_input":"2023-02-28T20:23:34.686025Z","iopub.status.idle":"2023-02-28T20:23:34.693947Z","shell.execute_reply.started":"2023-02-28T20:23:34.685984Z","shell.execute_reply":"2023-02-28T20:23:34.692765Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# 8. Train network","metadata":{}},{"cell_type":"code","source":"for epoch in range(epochs):\n    for batch_index, (features, y) in enumerate(dataloader_train):\n        features = features.to(device)\n        y = y.to(device)\n        \n        y_hat = model(features)\n        loss = loss_func(y_hat, y)\n        \n        optimizer.zero_grad()\n        loss.backward()\n        \n        optimizer.step()\n        \n    print(epoch+1)","metadata":{"execution":{"iopub.status.busy":"2023-02-28T20:23:58.985460Z","iopub.execute_input":"2023-02-28T20:23:58.986457Z","iopub.status.idle":"2023-02-28T20:24:01.839740Z","shell.execute_reply.started":"2023-02-28T20:23:58.986392Z","shell.execute_reply":"2023-02-28T20:24:01.838558Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# 9. Prediction / Evaluate","metadata":{}},{"cell_type":"code","source":"res = []\n\nmodel.eval()\n\nwith torch.no_grad():\n    for features in dataloader_test:\n        features = features.to(device)\n        \n        y_hat = model(features)\n        predict = torch.argmax(F.softmax(y_hat, dim=1), dim=1)\n        res.append(predict)\n\nres = torch.cat(res, dim=0)\nmodel.train()\nprint(res.shape)","metadata":{"execution":{"iopub.status.busy":"2023-02-28T20:24:12.889119Z","iopub.execute_input":"2023-02-28T20:24:12.889843Z","iopub.status.idle":"2023-02-28T20:24:13.570420Z","shell.execute_reply.started":"2023-02-28T20:24:12.889803Z","shell.execute_reply":"2023-02-28T20:24:13.569156Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_subm['Label'] = res.to('cpu')","metadata":{"execution":{"iopub.status.busy":"2023-02-28T20:24:13.572586Z","iopub.execute_input":"2023-02-28T20:24:13.573058Z","iopub.status.idle":"2023-02-28T20:24:13.578991Z","shell.execute_reply.started":"2023-02-28T20:24:13.573017Z","shell.execute_reply":"2023-02-28T20:24:13.577864Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_subm.to_csv('res.csv')","metadata":{"execution":{"iopub.status.busy":"2023-02-28T20:24:41.864541Z","iopub.execute_input":"2023-02-28T20:24:41.865803Z","iopub.status.idle":"2023-02-28T20:24:41.905552Z","shell.execute_reply.started":"2023-02-28T20:24:41.865752Z","shell.execute_reply":"2023-02-28T20:24:41.904583Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}