{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"from __future__ import print_function, division\nimport os\nimport pandas as pd\nimport torch\nimport torch.nn as nn\nimport torchvision\nfrom torchvision import models\nfrom tqdm import tqdm\n\n\n# Compare Algorithms\nimport matplotlib.pyplot as plt\nfrom sklearn import preprocessing\nfrom sklearn.model_selection import train_test_split\nfrom sklearn import model_selection\nfrom sklearn.linear_model import LogisticRegression\nfrom sklearn.tree import DecisionTreeClassifier\nfrom sklearn.neighbors import KNeighborsClassifier\nfrom sklearn.discriminant_analysis import LinearDiscriminantAnalysis\nfrom sklearn.naive_bayes import GaussianNB\nfrom sklearn.svm import SVC\nfrom sklearn.ensemble import RandomForestClassifier\nfrom sklearn.ensemble import GradientBoostingClassifier\nfrom sklearn.preprocessing import MinMaxScaler\nfrom sklearn.linear_model import SGDClassifier\nfrom sklearn.semi_supervised import LabelPropagation\nfrom sklearn.metrics import accuracy_score\n\n\ndevice = \"cuda\"","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model = models.resnet34(pretrained=True)\nmodel = model.to(device)\n\n# remove last fully-connected layer\nembedding_generator = nn.Sequential(*list(model.children())[:-1], nn.Flatten())","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"from torchvision import datasets, transforms\nfrom torch.utils.data import Dataset, DataLoader\n\ntransform = transforms.Compose(\n            [transforms.RandomResizedCrop(224),\n                transforms.ToTensor(),\n                transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"\ntrain_dataset = torchvision.datasets.ImageFolder(\"/kaggle/input/semi-inat-2021/l_train/l_train/\", transform=transform)\nval_dataset = torchvision.datasets.ImageFolder(\"/kaggle/input/semi-inat-2021/val/val/\", transform=transform)\ntest_dataset = torchvision.datasets.ImageFolder(\"/kaggle/input/semi-inat-2021/test/\", transform=transform)\nunlabeled_dataset = torchvision.datasets.ImageFolder(\"/kaggle/input/semi-inat-2021/u_train/\", transform=transform)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"trainloader = DataLoader(   train_dataset,batch_size=32, shuffle=False, num_workers=0) \nvalloader = DataLoader(   val_dataset,batch_size=32, shuffle=False, num_workers=0) \ntestloader = DataLoader(   test_dataset,batch_size=32, shuffle=False, num_workers=0) \nunlabeledloader = DataLoader(   unlabeled_dataset,batch_size=32, shuffle=False, num_workers=0) ","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"X_train = pd.DataFrame()\ny_train = []\n\nfor data in tqdm(trainloader):\n    inputs, labels = data[0], data[1]\n    inputs = inputs.to(device) \n    inputs = inputs.float()\n    X_train = X_train.append(pd.DataFrame(embedding_generator(inputs).to(\"cpu\").detach().numpy()), ignore_index=True)\n    y_train = y_train + labels.detach().cpu().tolist()\n    \nX_train = X_train.to_numpy()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"X_val = pd.DataFrame()\ny_val = []\n\nfor data in tqdm(valloader):\n    inputs, labels = data[0], data[1]\n    inputs = inputs.to(device) \n    inputs = inputs.float()\n    X_val = X_val.append(pd.DataFrame(embedding_generator(inputs).to(\"cpu\").detach().numpy()), ignore_index=True)\n    y_val = y_val + labels.detach().cpu().tolist()    \n\nX_val = X_val.to_numpy()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"X_test = pd.DataFrame()\n\nfor data in tqdm(testloader):\n    inputs, labels = data[0], data[1]\n    inputs = inputs.to(device) \n    inputs = inputs.float()\n    X_test = X_test.append(pd.DataFrame(embedding_generator(inputs).to(\"cpu\").detach().numpy()), ignore_index=True)  \n\nX_test = X_test.to_numpy()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"X_unlabeled = pd.DataFrame()\nY_unlabeled = []\n\nfor data in tqdm(unlabeledloader):\n    inputs, labels = data[0], data[1]\n    inputs = inputs.to(device) \n    inputs = inputs.float()\n    X_unlabeled = X_unlabeled.append(pd.DataFrame(embedding_generator(inputs).to(\"cpu\").detach().numpy()), ignore_index=True)\n    Y_unlabeled = Y_unlabeled + [-1]*len(inputs)\n\nX_unlabeled = X_unlabeled.to_numpy()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"best_results = 0.\nfor k in range(2,50):\n    knn = KNeighborsClassifier(n_neighbors= k,  n_jobs=-1)\n    knn.fit(X_train, y_train)\n    results = accuracy_score(y_val, knn.predict(X_val)) \n    if results > best_results:\n        print(k, results)\n        best_results = results","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","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}