{"cells":[{"metadata":{},"cell_type":"markdown","source":"# Learning GAN's from simple to complicated architectures with PyTorch!"},{"metadata":{},"cell_type":"markdown","source":"## Import modules"},{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"from pathlib import Path\nimport os\nimport numpy as np\nfrom matplotlib import pyplot as plt\n\nfrom PIL import Image\nimport torch\nimport torchvision.transforms as transforms\nfrom torch.utils.data import Dataset, DataLoader","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Define data location"},{"metadata":{"trusted":true},"cell_type":"code","source":"!ls /kaggle/input/gan-getting-started","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true},"cell_type":"code","source":"DATA_PATH = Path('/kaggle/input/gan-getting-started')\n\nMONET_PATH = DATA_PATH / 'monet_jpg'\nPHOTO_PATH = DATA_PATH / 'photo_jpg'","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"len(os.listdir(MONET_PATH)), len(os.listdir(PHOTO_PATH))","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### There are 300 Monet paintings and 7038 photos"},{"metadata":{},"cell_type":"markdown","source":"## Look at pictures"},{"metadata":{"trusted":true},"cell_type":"code","source":"sample_monet_path = os.listdir(MONET_PATH)\nsample_photo_path = os.listdir(PHOTO_PATH)\n\n\ndef show_samples(sample_monet_path, sample_photo_path, i):\n    fig, ax = plt.subplots(1, 2)\n    ax[0].imshow(Image.open(MONET_PATH / sample_monet_path[i]))\n    ax[0].set_title('Monet')\n    ax[1].imshow(Image.open(PHOTO_PATH / sample_photo_path[i]))\n    ax[1].set_title('Photo')\n    plt.show()\n    \nshow_samples(sample_monet_path, sample_photo_path, 1)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### You can chage the last number in function in order to get the intuitions about the data"},{"metadata":{"trusted":true},"cell_type":"code","source":"show_samples(sample_monet_path, sample_photo_path, 3)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Count statistics"},{"metadata":{},"cell_type":"markdown","source":"### We need mean and std for every color channel (rgb)"},{"metadata":{"trusted":true},"cell_type":"code","source":"def get_statistics(path):\n    red_pixels = []\n    green_pixels = []\n    blue_pixels = []\n    images = os.listdir(path)\n    for img in images:\n        img = Image.open(path / img)\n        img_arr = np.array(img)\n        red = img_arr[:, :, 0]\n        green = img_arr[:, :, 1]\n        blue = img_arr[:, :, 2]\n\n        red_pixels.append(red)\n        green_pixels.append(green)\n        blue_pixels.append(blue)\n\n    red_pixels = np.array(red_pixels)\n    green_pixels = np.array(green_pixels)\n    blue_pixels = np.array(blue_pixels)\n    \n    means = np.array((red_pixels.mean(), green_pixels.mean(), blue_pixels.mean()))\n    std = np.array((red_pixels.std(), green_pixels.std(), blue_pixels.std()))\n    \n    return means, std","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"monet_mean, monet_std = get_statistics(MONET_PATH)\nphoto_mean, photo_std = get_statistics(PHOTO_PATH)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Define transforms"},{"metadata":{"trusted":true},"cell_type":"code","source":"monet_transform = transforms.Compose([\n    transforms.ToTensor(),\n    transforms.Normalize(mean=monet_mean, std=monet_std)\n])\n\nphoto_transform = transforms.Compose([\n    transforms.ToTensor(),\n    transforms.Normalize(mean=photo_mean, std=photo_std)\n])","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Define PyTorch Dataset class"},{"metadata":{"trusted":true},"cell_type":"code","source":"class ImageDataset(Dataset):\n    def __init__(self, dataset_path, transform=None):\n        self.path = dataset_path\n        self.images = os.listdir(self.path)\n        if transform:\n            self.transform = transform\n    \n    def __len__(self):\n        return len(self.images)\n    \n    def __getitem__(self, i):\n        img_name = self.images[i]\n        img_path = self.path / img_name\n        img = Image.open(img_path)\n        if self.transfom:\n            img = self.transform(img)\n        return img","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"monet_dataset = ImageDataset(MONET_PATH, monet_transform)\nphoto_dataset = ImageDataset(PHOTO_PATH, photo_transform)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Create DataLoaders"},{"metadata":{"trusted":true},"cell_type":"code","source":"BATCH_SIZE = 16\n\nmonet_dataloader = DataLoader(monet_dataset, shuffle=True, batch_size=BATCH_SIZE)\nphoto_dataloader = DataLoader(photo_dataset, shuffle=True, batch_size=BATCH_SIZE)","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}