{"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":"code","source":"import numpy as np \nimport pandas as pd \nimport matplotlib.pyplot as plt\nfrom warnings import simplefilter\nimport os\nimport cv2\nfrom skimage import io\nimport re\nfrom torch.utils.data import Dataset\nimport torch\nimport torchvision.transforms as transforms","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2022-03-26T17:09:39.720223Z","iopub.execute_input":"2022-03-26T17:09:39.72065Z","iopub.status.idle":"2022-03-26T17:09:43.215265Z","shell.execute_reply.started":"2022-03-26T17:09:39.720546Z","shell.execute_reply":"2022-03-26T17:09:43.214159Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# **Create dataset in pytorch**","metadata":{}},{"cell_type":"code","source":"class UltraMNIST_TRAIN(Dataset):\n    def __init__(self,csv_file, root, transform=None):\n        self.df_sum=pd.read_csv(csv_file)\n        self.root = root\n        self.transform = transform\n \n    def __len__(self):\n        return len(self.df_sum)\n\n    def __getitem__(self, index):\n        img_path=os.path.join(self.root,self.df_sum.iloc[index,0])\n        image=io.imread(img_path+\".jpeg\")\n        #resize from 4000x4000 to 512x512\n        image = cv2.resize(image,(512,512), interpolation = cv2.INTER_AREA)\n        y_label=torch.tensor(int(self.df_sum.iloc[index,1]))\n        \n        if self.transform :\n            image = self.transform(image)\n        return (image,y_label)","metadata":{"execution":{"iopub.status.busy":"2022-03-26T17:14:13.602504Z","iopub.execute_input":"2022-03-26T17:14:13.602835Z","iopub.status.idle":"2022-03-26T17:14:13.613395Z","shell.execute_reply.started":"2022-03-26T17:14:13.602799Z","shell.execute_reply":"2022-03-26T17:14:13.611974Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# check if CUDA is available\ntrain_on_gpu = torch.cuda.is_available()\n\nif not train_on_gpu:\n    print('CUDA is not available.  Training on CPU ...')\nelse:\n    print('CUDA is available!  Training on GPU ...')\n#Set device\ndevice=torch.device('cuda' if torch.cuda.is_available() else 'cpu')","metadata":{"execution":{"iopub.status.busy":"2022-03-26T17:14:20.007404Z","iopub.execute_input":"2022-03-26T17:14:20.007799Z","iopub.status.idle":"2022-03-26T17:14:20.015752Z","shell.execute_reply.started":"2022-03-26T17:14:20.007759Z","shell.execute_reply":"2022-03-26T17:14:20.014493Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"TRAIN_DIR = \"../input/ultra-mnist/train\"\nTEST_DIR = \"../input/ultra-mnist/test\"\nTRAIN_CSV=\"../input/ultra-mnist/train.csv\"\ndataset=UltraMNIST_TRAIN(csv_file=TRAIN_CSV,root=TRAIN_DIR,transform=transforms.ToTensor())\ntrain_dataset,test_dataset=torch.utils.data.random_split(dataset, [25000, 3000])\nlen(train_dataset)","metadata":{"execution":{"iopub.status.busy":"2022-03-26T17:14:24.083112Z","iopub.execute_input":"2022-03-26T17:14:24.08403Z","iopub.status.idle":"2022-03-26T17:14:24.116727Z","shell.execute_reply.started":"2022-03-26T17:14:24.083991Z","shell.execute_reply":"2022-03-26T17:14:24.115704Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from torch.utils.data import DataLoader\nfrom torch.utils.data.sampler import SubsetRandomSampler\nbatch_size=32\nvalid_size = 0.2\n# obtain training indices that will be used for validation\nnum_train = len(train_dataset)\nindices = list(range(num_train))\nnp.random.shuffle(indices)\nsplit = int(np.floor(valid_size * num_train))\ntrain_idx, valid_idx = indices[split:], indices[:split]\n# define samplers for obtaining training and validation batches\ntrain_sampler = SubsetRandomSampler(train_idx)\nvalid_sampler = SubsetRandomSampler(valid_idx)\ntrain_loader = torch.utils.data.DataLoader(train_dataset, batch_size=batch_size,sampler=train_sampler, num_workers=0)\nvalid_loader = torch.utils.data.DataLoader(train_dataset, batch_size=batch_size,sampler=valid_sampler, num_workers=0)","metadata":{"execution":{"iopub.status.busy":"2022-03-26T17:14:35.451439Z","iopub.execute_input":"2022-03-26T17:14:35.451757Z","iopub.status.idle":"2022-03-26T17:14:35.463547Z","shell.execute_reply.started":"2022-03-26T17:14:35.451721Z","shell.execute_reply":"2022-03-26T17:14:35.462436Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"dataiter = iter(train_loader)\nimages, labels = dataiter.next()\nfig,ax=plt.subplots(1,1,figsize=(8,8))\nax.imshow(images[0][0],cmap='gray')\nprint(images[0][0].size())","metadata":{"execution":{"iopub.status.busy":"2022-03-26T17:14:42.976018Z","iopub.execute_input":"2022-03-26T17:14:42.97706Z","iopub.status.idle":"2022-03-26T17:14:47.059928Z","shell.execute_reply.started":"2022-03-26T17:14:42.977007Z","shell.execute_reply":"2022-03-26T17:14:47.058988Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{"execution":{"iopub.status.busy":"2022-03-26T17:22:16.102827Z","iopub.execute_input":"2022-03-26T17:22:16.103473Z","iopub.status.idle":"2022-03-26T17:22:16.774043Z","shell.execute_reply.started":"2022-03-26T17:22:16.103416Z","shell.execute_reply":"2022-03-26T17:22:16.772878Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## *Specify Loss Function and Optimizer*","metadata":{}},{"cell_type":"code","source":"","metadata":{"execution":{"iopub.status.busy":"2022-03-26T17:22:52.559602Z","iopub.execute_input":"2022-03-26T17:22:52.559988Z","iopub.status.idle":"2022-03-26T17:22:52.566264Z","shell.execute_reply.started":"2022-03-26T17:22:52.559938Z","shell.execute_reply":"2022-03-26T17:22:52.564541Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Train the Network","metadata":{}},{"cell_type":"code","source":"","metadata":{"execution":{"iopub.status.busy":"2022-03-26T17:22:58.573057Z","iopub.execute_input":"2022-03-26T17:22:58.574147Z","iopub.status.idle":"2022-03-26T17:39:33.359374Z","shell.execute_reply.started":"2022-03-26T17:22:58.574109Z","shell.execute_reply":"2022-03-26T17:39:33.355046Z"},"trusted":true},"execution_count":null,"outputs":[]}]}