{"cells":[{"metadata":{},"cell_type":"markdown","source":"!pip uninstall kaggle<br>\n!pip install --upgrade pip<br>\n!pip install kaggle==1.5.6<br>\n!mkdir -p ~/.kaggle<br>\n!cp kaggle.json ~/.kaggle<br>\n!ls -lha kaggle.json<br>\n!chmood 600 ~/.kaggle/kaggle.json<br>","execution_count":null},{"metadata":{"id":"ecdqKqdTrbdF","outputId":"c5473980-a871-4175-d8b9-1008e46a467e","trusted":false},"cell_type":"code","source":"#!kaggle competitions download -c 2020-ai-exam-fashionmnist-4","execution_count":null,"outputs":[]},{"metadata":{"id":"VimwY582rg-D","outputId":"ee6882aa-e447-42a3-bbe9-a1725077b4d7","trusted":false},"cell_type":"code","source":"#!unzip 2020-ai-exam-fashionmnist-4.zip","execution_count":null,"outputs":[]},{"metadata":{"id":"ddu_yXt2rjq0","trusted":false},"cell_type":"code","source":"import torch\nimport torchvision.datasets as data\nimport torchvision.transforms as transforms\nimport random\n\nimport pandas as pd\nimport numpy as np\n","execution_count":null,"outputs":[]},{"metadata":{"id":"JVV2iSb6rrnB","trusted":false},"cell_type":"code","source":"device = 'cuda' if torch.cuda.is_available() else 'cpu'\n\nrandom.seed(777)\ntorch.manual_seed(777)\nif device == 'cuda':\n  torch.cuda.manual_seed_all(777)","execution_count":null,"outputs":[]},{"metadata":{"id":"xd79tdVNr8_E","trusted":false},"cell_type":"code","source":"learning_rate = 0.001\ntraining_epochs = 15\nbatch_size = 100","execution_count":null,"outputs":[]},{"metadata":{"id":"A2QPzVXFsHWx","trusted":false},"cell_type":"code","source":"train_data = pd.read_csv('../input/2020-ai-exam-fashionmnist-4/mnist_train_label.csv', header = None)\ntest_data = pd.read_csv('../input/2020-ai-exam-fashionmnist-4/mnist_test.csv', header = None, usecols=range(1, 785))","execution_count":null,"outputs":[]},{"metadata":{"id":"PHZpyAJCs_fi","outputId":"b8807a62-97f3-4fe5-ec6c-2406ac9aa4e7","trusted":false},"cell_type":"code","source":"test_data","execution_count":null,"outputs":[]},{"metadata":{"id":"xSeCtLEks0ig","outputId":"e2244800-b491-4e86-b2c9-6e7a6b8788ce","trusted":false},"cell_type":"code","source":"train_data","execution_count":null,"outputs":[]},{"metadata":{"id":"9vkKrrlstqE0","outputId":"bf7af70e-caed-4db0-980a-d1a3331586ef","trusted":false},"cell_type":"code","source":"x_train_data = train_data.loc[:, 1:784]\ny_train_data = train_data.loc[:, 0]\n\n#데이터 정규화\nx_train_data = x_train_data/255\nx_train_data","execution_count":null,"outputs":[]},{"metadata":{"id":"L-ZS-TVP0YoA","trusted":false},"cell_type":"code","source":"  \nx_train_data = np.array(x_train_data)\ny_train_data = np.array(y_train_data)\nx_train_data = torch.FloatTensor(x_train_data)\ny_train_data = torch.LongTensor(y_train_data)","execution_count":null,"outputs":[]},{"metadata":{"id":"caoEpWKauTrY","trusted":false},"cell_type":"code","source":"train_dataset =  torch.utils.data.TensorDataset(x_train_data, y_train_data)","execution_count":null,"outputs":[]},{"metadata":{"id":"7QrSYKAruKch","trusted":false},"cell_type":"code","source":"data_loader = torch.utils.data.DataLoader(dataset=train_dataset, \n                                          batch_size=batch_size, \n                                          shuffle = True, \n                                          drop_last = True)","execution_count":null,"outputs":[]},{"metadata":{"id":"Nie5bETTukEe","trusted":false},"cell_type":"code","source":"linear1 = torch.nn.Linear(784,256, bias = True)\nlinear2 = torch.nn.Linear(256,256, bias = True)\nlinear3 = torch.nn.Linear(256,128, bias = True)\nlinear4 = torch.nn.Linear(128,128, bias = True)\nlinear5 = torch.nn.Linear(128,10, bias = True)\nReLU = torch.nn.ReLU()\ndropout = torch.nn.Dropout(p=0.3)","execution_count":null,"outputs":[]},{"metadata":{"id":"7KudOpwJuqsF","outputId":"29b884ae-30a0-413c-f752-6945dc1a74d2","trusted":false},"cell_type":"code","source":"torch.nn.init.xavier_normal_(linear1.weight)\ntorch.nn.init.xavier_normal_(linear2.weight)\ntorch.nn.init.xavier_normal_(linear3.weight)\ntorch.nn.init.xavier_normal_(linear4.weight)\ntorch.nn.init.xavier_normal_(linear5.weight)","execution_count":null,"outputs":[]},{"metadata":{"id":"lyozySTiuufb","trusted":false},"cell_type":"code","source":"model = torch.nn.Sequential(linear1, ReLU,dropout,\n                            linear2, ReLU,dropout,\n                            linear3, ReLU,dropout,\n                            linear4, ReLU,dropout,\n                            linear5).to(device)","execution_count":null,"outputs":[]},{"metadata":{"id":"CqCjnzIyuy76","trusted":false},"cell_type":"code","source":"loss = torch.nn.CrossEntropyLoss().to(device)\noptimizer = torch.optim.Adam(model.parameters(), lr = learning_rate)","execution_count":null,"outputs":[]},{"metadata":{"id":"88GWTc34u8Jj","outputId":"e502f381-1e79-4015-d825-a63e42b1546e","trusted":false},"cell_type":"code","source":"total_batch = len(data_loader)\nfor epoch in range(training_epochs):\n  avg_cost = 0\n\n  for X, Y in data_loader:\n    X = X.to(device)\n    Y = Y.to(device)\n\n    optimizer.zero_grad()\n    hypothesis = model(X)\n    cost = loss(hypothesis, Y)\n    cost.backward()\n    optimizer.step()\n\n    avg_cost += cost/total_batch\n  print(epoch+1)\n  print(avg_cost)\nprint(\"f\")","execution_count":null,"outputs":[]},{"metadata":{"id":"fHyg5MhBvcWQ","outputId":"268fa460-3540-473b-8136-180bae0f903a","trusted":false},"cell_type":"code","source":"with torch.no_grad():\n  test_data.loc[:, 783] = 0\n  x_test = test_data.loc[:,:]\n  x_test = x_test/255\n  x_test = np.array(x_test)\n  x_test = torch.from_numpy(x_test).float().to(device)\n  prediction = model(x_test)\n  correct = torch.argmax(prediction, 1)\ncorrect","execution_count":null,"outputs":[]},{"metadata":{"id":"tanB4Ygavnek","outputId":"dc5ba8c4-e9c3-472d-8c67-7a3f51b5be55","trusted":false},"cell_type":"code","source":"correct = correct.cpu().numpy().reshape(-1, 1)\ncorrect","execution_count":null,"outputs":[]},{"metadata":{"id":"Tpdgm0ImxCAI","outputId":"b55bbbfa-de06-4889-fac0-c5082df41f8c","trusted":false},"cell_type":"code","source":"submit = pd.read_csv('../input/2020-ai-exam-fashionmnist-4/submission.csv')\nsubmit","execution_count":null,"outputs":[]},{"metadata":{"id":"qtJXW-wsxbY0","outputId":"140c5fc9-4328-4c58-ea59-9c9ff9c2bb28","trusted":false},"cell_type":"code","source":"for i in range(len(correct)):\n  submit['Category'][i] = correct[i].item()\nsubmit","execution_count":null,"outputs":[]},{"metadata":{"id":"NU6SSHQDzCXy","trusted":false},"cell_type":"code","source":"submit.to_csv('submission.csv', index = False, header = True)","execution_count":null,"outputs":[]},{"metadata":{"id":"c2ts9YvqxkL7","outputId":"e540b109-08c5-4987-b30f-b48b03bc8747","trusted":false},"cell_type":"code","source":"#!kaggle competitions submit -c 2020-ai-exam-fashionmnist-4 -f submit.csv -m \"result\"","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":4}