{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"import pandas as pd\nimport numpy as np\nfrom matplotlib import pyplot as plt\nimport torch\nimport torchvision.transforms as transforms\nfrom torch import nn,functional\nfrom torch.autograd import Variable\nfrom sklearn.model_selection import train_test_split\n%matplotlib inline","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true},"cell_type":"code","source":"data=pd.read_csv(\"../input/Kannada-MNIST/train.csv\")\ntrain_batch_size=127\ntest_batch_size=127","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"x=data.loc[:,data.columns!='label'].values/255\ny=data.label.values\n\nx_train=torch.from_numpy(x)\ny_train=torch.from_numpy(y).type(torch.LongTensor)\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"te=pd.read_csv(\"../input/Kannada-MNIST/Dig-MNIST.csv\")\n\nx=te.loc[:,te.columns!='label'].values/255\ny=te.label.values\n\nx_test=torch.from_numpy(x)\ny_test=torch.from_numpy(y).type(torch.LongTensor)\n\ntrain=torch.utils.data.TensorDataset(x_train,y_train)\ntest=torch.utils.data.TensorDataset(x_test,y_test)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"batch_size=130\ntrain_loader=torch.utils.data.DataLoader(train,batch_size=batch_size,shuffle=False)\ntest_loader=torch.utils.data.DataLoader(test,batch_size=batch_size,shuffle=False)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#CNN\n\nclass Net(nn.Module):\n    def __init__(self):\n        super(Net,self).__init__()\n        self.cnn_1 = nn.Conv2d(in_channels = 1, out_channels = 16, kernel_size = 5, stride=1, padding=0)\n        self.cnn_2 = nn.Conv2d(in_channels = 16, out_channels = 32, kernel_size = 5, stride=1, padding=0)\n        self.relu = nn.ReLU()\n        self.maxpool = nn.MaxPool2d(2,2)\n        self.dropout = nn.Dropout(p=0.2)\n        self.dropout2d = nn.Dropout2d(p=0.2)\n        \n        self.fc1 = nn.Linear(32 * 4 * 4, 128) \n        self.fc2 = nn.Linear(128, 64) \n        self.out = nn.Linear(64, 10) \n        \n    def forward(self,x):\n        \n        out = self.cnn_1(x)\n        out = self.relu(out)\n        out = self.dropout2d(out)\n        out = self.maxpool(out)\n        \n        out = self.cnn_2(out)\n        out = self.relu(out)\n        out = self.dropout2d(out)\n        out = self.maxpool(out)\n        \n        out = out.view(out.size(0), -1)\n        out = self.fc1(out)\n        out = self.dropout(out)\n        out = self.fc2(out)\n        out = self.dropout(out)\n        out = self.out(out)\n        \n        return out","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model=Net()\nmodel.double()\ncriterion=nn.CrossEntropyLoss()\noptimizer=torch.optim.Adam(model.parameters(),lr=0.003)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"epochs=17\ntrain_losses, test_losses = [] ,[]\nfor epoch in range(epochs):\n    running_loss = 0\n    for images,labels in train_loader:\n        train = Variable(images.view(-1,1,28,28))\n        labels = Variable(labels)\n        \n        optimizer.zero_grad()\n        \n        output = model(train)\n        loss = criterion(output,labels)\n        loss.backward()\n        optimizer.step()\n        \n        running_loss += loss.item()\n    else:\n        test_loss = 0\n        accuracy = 0\n        \n        with torch.no_grad(): #Turning off gradients to speed up\n            model.eval()\n            for images,labels in test_loader:\n                \n                test = Variable(images.view(-1,1,28,28))\n                labels = Variable(labels)\n                \n                log_ps = model(test)\n                test_loss += criterion(log_ps,labels)\n                \n                ps = torch.exp(log_ps)\n                top_p, top_class = ps.topk(1, dim = 1)\n                equals = top_class == labels.view(*top_class.shape)\n                accuracy += torch.mean(equals.type(torch.FloatTensor))\n        model.train()        \n        train_losses.append(running_loss/len(train_loader))\n        test_losses.append(test_loss/len(test_loader))\n\n        print(\"Epoch: {}/{}.. \".format(epoch+1, epochs),\n              \"Training Loss: {:.3f}.. \".format(running_loss/len(train_loader)),\n              \"Test Loss: {:.3f}.. \".format(test_loss/len(test_loader)),\n              \"Test Accuracy: {:.3f}\".format(accuracy/len(test_loader)))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"plt.plot(train_losses, label='training loss')\nplt.plot(test_losses, label='test loss')\nplt.legend(frameon=False)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"test_images=pd.read_csv(\"../input/Kannada-MNIST/test.csv\")\ntest_image=test_images.loc[:,test_images.columns!='label'].values/255\n\ntest_dataset=torch.from_numpy(test_image)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"tester=torch.utils.data.DataLoader(test_dataset,batch_size=100,shuffle=False)\n\nresults = []\nwith torch.no_grad():\n    model.eval()\n    for images in tester:\n        #test = Variable(images.view(-1,1,28,28))\n        output = model(test)\n        ps = torch.exp(output)\n        top_p, top_class = ps.topk(1, dim = 1)\n        results += top_class.numpy().tolist()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"predictions=np.array(results).flatten()\nsubmissions=pd.DataFrame({\"id\": list(range(1,len(predictions)+1)),\n                         \"label\": predictions})\nsubmissions.to_csv(\"submission.csv\", index=False)","execution_count":null,"outputs":[]}],"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":4,"nbformat_minor":1}