diff --git a/22-07-28/AnimeGan.ipynb b/22-07-28/AnimeGan.ipynb
new file mode 100644
index 0000000..2500a87
--- /dev/null
+++ b/22-07-28/AnimeGan.ipynb
@@ -0,0 +1,2771 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "view-in-github",
+ "colab_type": "text"
+ },
+ "source": [
+ ""
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "8DTALsG_tXIP"
+ },
+ "source": [
+ "**Anime Face Generator using GAN**\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {
+ "id": "3mECTqFTSf7g"
+ },
+ "outputs": [],
+ "source": [
+ "!pip install opendatasets --upgrade --quiet\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {
+ "id": "1zzYTqVuSt8Q"
+ },
+ "outputs": [],
+ "source": [
+ "import opendatasets as od"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "QztumO8pSt-t",
+ "outputId": "962358b0-242a-4cc3-ba0e-e420b8bf4291"
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "Please provide your Kaggle credentials to download this dataset. Learn more: http://bit.ly/kaggle-creds\n",
+ "Your Kaggle username: diwakargupta0\n",
+ "Your Kaggle Key: ··········\n",
+ "Downloading animefacedataset.zip to ./animefacedataset\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "name": "stderr",
+ "text": [
+ "100%|██████████| 395M/395M [00:02<00:00, 140MB/s]\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "\n"
+ ]
+ }
+ ],
+ "source": [
+ "dataset_url = 'https://www.kaggle.com/splcher/animefacedataset'\n",
+ "od.download(dataset_url)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "j605fU4cSuBJ",
+ "outputId": "170ae02d-dfaa-46b6-83e5-1ea794a3c161"
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "['images']\n"
+ ]
+ }
+ ],
+ "source": [
+ "import os\n",
+ "DATA_DIR = './animefacedataset'\n",
+ "print(os.listdir(DATA_DIR))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {
+ "id": "JrqOOIvLSuDt"
+ },
+ "outputs": [],
+ "source": [
+ "from torch.utils.data import DataLoader\n",
+ "from torchvision.datasets import ImageFolder\n",
+ "import torchvision.transforms as T"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {
+ "id": "yYznmIKGSuGM"
+ },
+ "outputs": [],
+ "source": [
+ "image_size = 64 \n",
+ "batch_size = 128 \n",
+ "# means of 0.5 and standard deviation 0.5\n",
+ "stats = (0.5, 0.5, 0.5), (0.5, 0.5, 0.5)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "Ck_UnyIYSuaa",
+ "outputId": "9814ce9e-ff53-409c-b8c5-504df5cd046a"
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stderr",
+ "text": [
+ "/usr/local/lib/python3.7/dist-packages/torch/utils/data/dataloader.py:560: UserWarning: This DataLoader will create 3 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n",
+ " cpuset_checked))\n"
+ ]
+ }
+ ],
+ "source": [
+ "train_ds = ImageFolder(DATA_DIR, transform=T.Compose([\n",
+ " T.Resize(image_size),\n",
+ " # converting image \n",
+ " T.CenterCrop(image_size),\n",
+ " # CentreCrop image \n",
+ " T.ToTensor(),\n",
+ " # coverting image into tensor \n",
+ " T.Normalize(*stats)]))\n",
+ " # Normalizing dataset (mean substract then diveide standard deviation )\n",
+ "\n",
+ "train_dl = DataLoader(train_ds, \n",
+ " batch_size, \n",
+ " shuffle=True, \n",
+ " num_workers=3, \n",
+ " pin_memory=True)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "jsCJ_lcHmfgV"
+ },
+ "source": [
+ "lets create helper function to denormalize the image tensors the image tensors and display some sampel image from a training batch "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {
+ "id": "Yngwxj4dSucZ"
+ },
+ "outputs": [],
+ "source": [
+ "import torch\n",
+ "from torchvision.utils import make_grid\n",
+ "import matplotlib.pyplot as plt\n",
+ "%matplotlib inline"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {
+ "id": "llg8TqT0SueG"
+ },
+ "outputs": [],
+ "source": [
+ "# for denormalizing image -> original value \n",
+ "def denorm(img_tensors):\n",
+ " return img_tensors * stats[1][0] + stats[0][0]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "metadata": {
+ "id": "fWCESTTLSuf6"
+ },
+ "outputs": [],
+ "source": [
+ "# we are converting imgae into orginal size again \n",
+ "def show_images(images, nmax=64):\n",
+ " fig, ax = plt.subplots(figsize=(8, 8))\n",
+ " ax.set_xticks([]); ax.set_yticks([])\n",
+ " ax.imshow(make_grid(denorm(images.detach()[:nmax]), nrow=8).permute(1, 2, 0))\n",
+ "\n",
+ "def show_batch(dl, nmax=64):\n",
+ " for images, _ in dl:\n",
+ " show_images(images, nmax)\n",
+ " break"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 524
+ },
+ "id": "PA5ZbG46Sf-B",
+ "outputId": "7a99ba1e-67ef-4bfe-a26b-675a3a32ba7c"
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stderr",
+ "text": [
+ "/usr/local/lib/python3.7/dist-packages/torch/utils/data/dataloader.py:560: UserWarning: This DataLoader will create 3 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n",
+ " cpuset_checked))\n"
+ ]
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ "