{"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 torch\nfrom PIL import Image\nfrom sklearn.model_selection import train_test_split\nfrom torch import nn\nfrom torch import optim\nimport torch.nn.functional as F\nimport torchvision.transforms.functional as transF\nimport numpy as np\nfrom torch.utils.data import DataLoader, Dataset\nfrom torchvision import datasets, transforms, models\nfrom torchvision.datasets import ImageFolder\nimport matplotlib.pyplot as plt\nimport matplotlib.ticker as mticker\nfrom tqdm import tqdm","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2021-10-11T17:26:54.043738Z","iopub.execute_input":"2021-10-11T17:26:54.044051Z","iopub.status.idle":"2021-10-11T17:26:54.050105Z","shell.execute_reply.started":"2021-10-11T17:26:54.044023Z","shell.execute_reply":"2021-10-11T17:26:54.049442Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\nprint(device)","metadata":{"execution":{"iopub.status.busy":"2021-10-11T17:26:54.051605Z","iopub.execute_input":"2021-10-11T17:26:54.051986Z","iopub.status.idle":"2021-10-11T17:26:54.063564Z","shell.execute_reply.started":"2021-10-11T17:26:54.051952Z","shell.execute_reply":"2021-10-11T17:26:54.062810Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_dir = r'../input/animals-classification/Classification (Train_Val)/Train'","metadata":{"execution":{"iopub.status.busy":"2021-10-11T17:26:54.065360Z","iopub.execute_input":"2021-10-11T17:26:54.065594Z","iopub.status.idle":"2021-10-11T17:26:54.071490Z","shell.execute_reply.started":"2021-10-11T17:26:54.065562Z","shell.execute_reply":"2021-10-11T17:26:54.070679Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"class SquarePad:\n    def __call__(self, image):\n        max_wh = max(image.size)\n        p_left, p_top = [(max_wh - s) // 2 for s in image.size]\n        p_right, p_bottom = [max_wh - (s+pad) for s, pad in zip(image.size, [p_left, p_top])]\n        padding = (p_left, p_top, p_right, p_bottom)\n        return transF.pad(image, padding, 0, 'constant')","metadata":{"execution":{"iopub.status.busy":"2021-10-11T17:26:54.073616Z","iopub.execute_input":"2021-10-11T17:26:54.074324Z","iopub.status.idle":"2021-10-11T17:26:54.081095Z","shell.execute_reply.started":"2021-10-11T17:26:54.074289Z","shell.execute_reply":"2021-10-11T17:26:54.080088Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_transforms = transforms.Compose([SquarePad(),\n                                      transforms.Resize((330, 330)),\n                                      transforms.ToTensor()])\n\ntrain_dataset = datasets.ImageFolder(train_dir, transform=train_transforms)\ntrain_loader = DataLoader(dataset=train_dataset, batch_size=32, shuffle=True)\nprint(len(train_loader))","metadata":{"execution":{"iopub.status.busy":"2021-10-11T17:26:54.082336Z","iopub.execute_input":"2021-10-11T17:26:54.082604Z","iopub.status.idle":"2021-10-11T17:26:54.160272Z","shell.execute_reply.started":"2021-10-11T17:26:54.082571Z","shell.execute_reply":"2021-10-11T17:26:54.159587Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def cal_mean_std_3d_image(loader):\n    mean, std = 0.0, 0.0\n    num_batch = 0\n    channel_sum, channel_squared_sum = 0, 0\n    for imgs, _ in tqdm(loader):\n        num_batch += 1\n        channel_sum += torch.mean(imgs, dim=[0,2,3])\n        channel_squared_sum += torch.mean(imgs**2, dim=[0,2,3])\n    mean = channel_sum / num_batch\n    std = (channel_squared_sum / num_batch - mean**2) ** 0.5\n    return mean, std","metadata":{"execution":{"iopub.status.busy":"2021-10-11T17:26:54.161422Z","iopub.execute_input":"2021-10-11T17:26:54.161808Z","iopub.status.idle":"2021-10-11T17:26:54.168485Z","shell.execute_reply.started":"2021-10-11T17:26:54.161774Z","shell.execute_reply":"2021-10-11T17:26:54.167643Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(cal_mean_std_3d_image(train_loader))","metadata":{"execution":{"iopub.status.busy":"2021-10-11T17:26:54.169663Z","iopub.execute_input":"2021-10-11T17:26:54.170018Z","iopub.status.idle":"2021-10-11T17:28:19.823477Z","shell.execute_reply.started":"2021-10-11T17:26:54.169982Z","shell.execute_reply":"2021-10-11T17:28:19.821168Z"},"trusted":true},"execution_count":null,"outputs":[]}]}