{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"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 in \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 \"../input/\" directory.\n# For example, running this (by clicking run or pressing Shift+Enter) will list the files in the input directory\n\nimport os\n\n# Any results you write to the current directory are saved as output.\n\n# https://github.com/pytorch/examples/blob/master/mnist/main.py\nfrom __future__ import print_function\nimport argparse\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nimport torch.optim as optim\nfrom torchvision import datasets, transforms\nfrom torch.autograd import Variable\n\n# Training settings\nbatch_size = 64\n\n# MNIST Dataset\nfrom torch.utils.data import Dataset, DataLoader\nfrom sklearn.model_selection import train_test_split","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"52d1da53b20f5db65d9604efe9db91ece55d025f"},"cell_type":"code","source":"df = pd.read_csv('../input/train.csv')\nLabel = df['label']\nData = df.drop(['label'],axis=1)\nX_train, X_test, y_train, y_test = train_test_split(Data,Label,test_size=0.3)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"a091acf1808fc8518a08ecc9b354cb5511cc6d1b"},"cell_type":"code","source":"class TrainDataset(Dataset):\n    \"\"\" Train dataset.\"\"\"\n\n    # Initialize your data, download, etc.\n    def __init__(self,X_Data, y_Data):\n        self.len = X_Data.shape[0]\n        self.x_data = torch.tensor(X_Data.values)\n        self.y_data = torch.tensor(y_Data.values)\n        print (self.x_data,self.y_data)\n\n    def __getitem__(self, index):\n        return self.x_data[index], self.y_data[index]\n\n    def __len__(self):\n        return self.len\n\n\ntrain_dataset = TrainDataset(X_train,y_train)\nval_dataset = TrainDataset(X_test,y_test)\n\nclass TestDataset(Dataset):\n    \"\"\" Test dataset.\"\"\"\n\n    # Initialize your data, download, etc.\n    def __init__(self):\n        xy = pd.read_csv('../input/test.csv')\n        self.len = xy.shape[0]\n        self.x_data = torch.tensor(xy.values)\n\n    def __getitem__(self, index):\n        return self.x_data[index]\n\n    def __len__(self):\n        return self.len\n\n\ntest_dataset = TestDataset()\n","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","trusted":true},"cell_type":"code","source":"# Data Loader (Input Pipeline)\ntrain_loader = torch.utils.data.DataLoader(dataset=train_dataset,\n                                           batch_size=batch_size,\n                                           shuffle=True)\nval_loader = torch.utils.data.DataLoader(dataset=val_dataset,\n                                           batch_size=batch_size,\n                                           shuffle=True)\ntest_loader = torch.utils.data.DataLoader(dataset=test_dataset,\n                                          batch_size=batch_size,\n                                          shuffle=False)\n\n\nclass Net(nn.Module):\n\n    def __init__(self):\n        super(Net, self).__init__()\n        self.conv1 = nn.Conv2d(1, 10, kernel_size=5)\n        self.conv2 = nn.Conv2d(10, 20, kernel_size=5)\n        self.mp = nn.MaxPool2d(2)\n        self.fc = nn.Linear(320, 10)\n\n    def forward(self, x):\n        in_size = x.size(0)\n        x = x.reshape(in_size,1,28,28)\n        x = x.type(torch.FloatTensor)\n        x = F.relu(self.mp(self.conv1(x)))\n        x = F.relu(self.mp(self.conv2(x)))\n        x = x.view(in_size, -1)  # flatten the tensor\n        x = self.fc(x)\n        return F.log_softmax(x)\n\n\nmodel = Net()\n\noptimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.5)\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"071e29656606e8bcc678ac4e2306e14146015d1c","scrolled":true},"cell_type":"code","source":"def train(epoch):\n    model.train()\n    for batch_idx, (data, target) in enumerate(train_loader):\n        data, target = Variable(data), Variable(target)\n        optimizer.zero_grad()\n        output = model(data)\n        loss = F.nll_loss(output, target)\n        loss.backward()\n        optimizer.step()\n        if batch_idx % 10 == 0:\n            print('Train Epoch: {} [{}/{} ({:.0f}%)]\\tLoss: {:.6f}'.format(\n                epoch, batch_idx * len(data), len(train_loader.dataset),\n                100. * batch_idx / len(train_loader), loss.data[0]))\n\n\ndef val():\n    model.eval()\n    test_loss = 0\n    correct = 0\n    for data, target in val_loader:\n        data, target = Variable(data, volatile=True), Variable(target)\n        output = model(data)\n        # sum up batch loss\n        test_loss += F.nll_loss(output, target, size_average=False).data[0]\n        # get the index of the max log-probability\n        pred = output.data.max(1, keepdim=True)[1]\n        correct += pred.eq(target.data.view_as(pred)).cpu().sum()\n\n    test_loss /= len(val_loader.dataset)\n    print('\\nTest set: Average loss: {:.4f}, Accuracy: {}/{} ({:.0f}%)\\n'.format(\n        test_loss, correct, len(val_loader.dataset),\n        100. * correct / len(val_loader.dataset)))\nfinal_out = []\ndef test():\n    model.eval()\n    test_loss = 0\n    correct = 0\n    for image_id,data in enumerate(test_loader):\n        data = Variable(data, volatile=True)\n        output = model(data)\n        # get the index of the max log-probability\n        pred = output.data.max(1, keepdim=True)[1].data.cpu().numpy() \n        final_out.append(pred)\n    x = [j for i in final_out for j in i]\n    return x\nfor epoch in range(1, 10):\n    train(epoch)\n    val()\nresult = test()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"d4a612532babb77ff2a1bc95e95b5998a9228efc"},"cell_type":"code","source":"final_result=[y for x in result for y in x]\nimage_id = [i for i in range(1,len(final_result)+1)]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"3c81d2b1802917a86ea6f0f7025077dfb29690e1"},"cell_type":"code","source":"df_result = pd.DataFrame({'ImageId':image_id,'Label':final_result})","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"f2978aa919f17a0824cb03c92336142ab66a3cd1","_kg_hide-output":false,"_kg_hide-input":false},"cell_type":"code","source":"df_result.to_csv('final_submission.csv',index=None)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"733607933ce460326590fa3e234f0b1ce23e2294"},"cell_type":"code","source":"df_result","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"586c33309821b500515ffbe5a27810f84a0c4ed4"},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"name":"python","version":"3.6.6","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat":4,"nbformat_minor":1}