{"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\nimport seaborn as sns\n\nimport tensorflow as tf\nfrom tensorflow.keras import metrics\nfrom keras.utils.np_utils import to_categorical\nfrom tensorflow.keras.models import Sequential, Model\nfrom tensorflow.keras.layers import Dense, Conv2D, MaxPool2D, Flatten, Dropout, BatchNormalization, Input, Lambda, LeakyReLU, Reshape\nfrom keras.optimizers import RMSprop, Adam\nfrom tensorflow.keras.callbacks import EarlyStopping\nfrom keras.initializers import Zeros, RandomNormal, glorot_normal, glorot_uniform\nfrom tensorflow.keras.layers import Input, Dense, Lambda\n\nfrom sklearn.model_selection import train_test_split\n        \nimport warnings\nwarnings.filterwarnings(\"ignore\")\nwarnings.warn(\"this will not show\")\n\nfrom keras.datasets import mnist","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2023-09-15T13:53:18.313900Z","iopub.execute_input":"2023-09-15T13:53:18.314272Z","iopub.status.idle":"2023-09-15T13:53:18.323062Z","shell.execute_reply.started":"2023-09-15T13:53:18.314242Z","shell.execute_reply":"2023-09-15T13:53:18.321837Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train = pd.read_csv(\"/kaggle/input/digit-recognizer/train.csv\")\ntest = pd.read_csv(\"/kaggle/input/digit-recognizer/test.csv\")","metadata":{"execution":{"iopub.status.busy":"2023-09-15T13:10:41.151741Z","iopub.execute_input":"2023-09-15T13:10:41.152444Z","iopub.status.idle":"2023-09-15T13:10:47.013623Z","shell.execute_reply.started":"2023-09-15T13:10:41.152412Z","shell.execute_reply":"2023-09-15T13:10:47.012664Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(\"train shape : \", train.shape)\nprint(\"test shape : \", test.shape)","metadata":{"execution":{"iopub.status.busy":"2023-09-15T12:34:14.700526Z","iopub.execute_input":"2023-09-15T12:34:14.700943Z","iopub.status.idle":"2023-09-15T12:34:14.708414Z","shell.execute_reply.started":"2023-09-15T12:34:14.700905Z","shell.execute_reply":"2023-09-15T12:34:14.707160Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X = train.drop(columns = [\"label\"]) \ny = train[\"label\"]","metadata":{"execution":{"iopub.status.busy":"2023-09-15T13:10:51.138734Z","iopub.execute_input":"2023-09-15T13:10:51.139419Z","iopub.status.idle":"2023-09-15T13:10:51.224789Z","shell.execute_reply.started":"2023-09-15T13:10:51.139369Z","shell.execute_reply":"2023-09-15T13:10:51.223540Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X = X / 255.0\ntest = test / 255.0\n\nX = X.values.reshape(-1,28,28,1)\ntest = test.values.reshape(-1,28,28,1)","metadata":{"execution":{"iopub.status.busy":"2023-09-15T12:34:29.767267Z","iopub.execute_input":"2023-09-15T12:34:29.767666Z","iopub.status.idle":"2023-09-15T12:34:29.968569Z","shell.execute_reply.started":"2023-09-15T12:34:29.767635Z","shell.execute_reply":"2023-09-15T12:34:29.967427Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(\"X shape : \", X.shape)\nprint(\"test shape : \", test.shape)","metadata":{"execution":{"iopub.status.busy":"2023-09-08T12:11:08.782976Z","iopub.execute_input":"2023-09-08T12:11:08.783340Z","iopub.status.idle":"2023-09-08T12:11:08.789669Z","shell.execute_reply.started":"2023-09-08T12:11:08.783309Z","shell.execute_reply":"2023-09-08T12:11:08.787958Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.imshow(X[5], cmap='Greys');","metadata":{"execution":{"iopub.status.busy":"2023-09-08T12:11:17.871316Z","iopub.execute_input":"2023-09-08T12:11:17.871692Z","iopub.status.idle":"2023-09-08T12:11:18.243460Z","shell.execute_reply.started":"2023-09-08T12:11:17.871660Z","shell.execute_reply":"2023-09-08T12:11:18.242148Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"n_classes = 10\ny = to_categorical(y, n_classes)","metadata":{"execution":{"iopub.status.busy":"2023-09-08T12:11:24.710151Z","iopub.execute_input":"2023-09-08T12:11:24.713897Z","iopub.status.idle":"2023-09-08T12:11:24.731214Z","shell.execute_reply.started":"2023-09-08T12:11:24.713831Z","shell.execute_reply":"2023-09-08T12:11:24.729538Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.1, random_state = 1)","metadata":{"execution":{"iopub.status.busy":"2023-09-08T12:13:05.314783Z","iopub.execute_input":"2023-09-08T12:13:05.315663Z","iopub.status.idle":"2023-09-08T12:13:05.685286Z","shell.execute_reply.started":"2023-09-08T12:13:05.315627Z","shell.execute_reply":"2023-09-08T12:13:05.684279Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"b_init = Zeros()\nw_init = RandomNormal(stddev = 1.0)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model = Sequential()\n\nmodel.add(Conv2D(filters = 32, kernel_size = (3, 3), padding = \"same\", activation =\"relu\", input_shape = (28,28,1),\n                 kernel_initializer = w_init, bias_initializer = b_init))\nmodel.add(Conv2D(filters = 32, kernel_size = (3, 3), padding = \"same\", activation =\"relu\"))\nmodel.add(MaxPool2D(pool_size = (2,2)))\nmodel.add(Dropout(0.25))\n\n\nmodel.add(Conv2D(filters = 64, kernel_size = (3,3), padding = \"same\", activation =\"relu\"))\nmodel.add(Conv2D(filters = 64, kernel_size = (3,3), padding = \"same\", activation =\"relu\"))\nmodel.add(BatchNormalization())\nmodel.add(MaxPool2D(pool_size = (2,2), strides = (2, 2)))\nmodel.add(Dropout(0.25))\n\n\nmodel.add(Flatten())\nmodel.add(Dense(256, activation = \"relu\"))\nmodel.add(BatchNormalization())\nmodel.add(Dropout(0.5))\nmodel.add(Dense(10, activation = \"softmax\"))","metadata":{"execution":{"iopub.status.busy":"2023-09-08T12:52:50.277448Z","iopub.execute_input":"2023-09-08T12:52:50.277850Z","iopub.status.idle":"2023-09-08T12:52:50.400893Z","shell.execute_reply.started":"2023-09-08T12:52:50.277819Z","shell.execute_reply":"2023-09-08T12:52:50.399947Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"optimizer = RMSprop(lr = 0.001, rho = 0.9, epsilon = 1e-08, decay = 0.0)\n\nmodel.compile(optimizer = optimizer , loss = \"categorical_crossentropy\", metrics=[\"accuracy\"])","metadata":{"execution":{"iopub.status.busy":"2023-09-08T12:52:52.465187Z","iopub.execute_input":"2023-09-08T12:52:52.465566Z","iopub.status.idle":"2023-09-08T12:52:52.477726Z","shell.execute_reply.started":"2023-09-08T12:52:52.465534Z","shell.execute_reply":"2023-09-08T12:52:52.476664Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"early_stop = EarlyStopping(monitor = 'val_loss', patience = 11)\n\nmodel.fit(X_train, y_train, batch_size = 32, epochs = 20, validation_data = (X_test, y_test),callbacks = [early_stop])","metadata":{"execution":{"iopub.status.busy":"2023-09-08T13:17:12.493064Z","iopub.execute_input":"2023-09-08T13:17:12.493445Z","iopub.status.idle":"2023-09-08T13:20:34.740819Z","shell.execute_reply.started":"2023-09-08T13:17:12.493412Z","shell.execute_reply":"2023-09-08T13:20:34.739720Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Gans","metadata":{}},{"cell_type":"code","source":"img_rows = 28\nimg_cols = 28\nchannels = 1\n\n# Input image dimensions\nimg_shape = (img_rows, img_cols, channels)\n\n# Size of the noise vector, used as input to the Generator\nz_dim = 100","metadata":{"execution":{"iopub.status.busy":"2023-09-15T13:53:24.192803Z","iopub.execute_input":"2023-09-15T13:53:24.193201Z","iopub.status.idle":"2023-09-15T13:53:24.199112Z","shell.execute_reply.started":"2023-09-15T13:53:24.193173Z","shell.execute_reply":"2023-09-15T13:53:24.197823Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def build_generator(img_shape, z_dim):\n\n    model = Sequential()\n\n    # Fully connected layer\n    model.add(Dense(128, input_dim=z_dim))\n\n    # Leaky ReLU activation\n    model.add(LeakyReLU(alpha=0.01))\n\n    # Output layer with tanh activation\n    model.add(Dense(28 * 28 * 1, activation='tanh'))\n\n    # Reshape the Generator output to image dimensions\n    model.add(Reshape(img_shape))\n\n    return model","metadata":{"execution":{"iopub.status.busy":"2023-09-15T13:53:25.779541Z","iopub.execute_input":"2023-09-15T13:53:25.779927Z","iopub.status.idle":"2023-09-15T13:53:25.786845Z","shell.execute_reply.started":"2023-09-15T13:53:25.779899Z","shell.execute_reply":"2023-09-15T13:53:25.785516Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def build_discriminator(img_shape):\n\n    model = Sequential()\n\n    # Flatten the input image\n    model.add(Flatten(input_shape=img_shape))\n\n    # Fully connected layer\n    model.add(Dense(128))\n\n    # Leaky ReLU activation\n    model.add(LeakyReLU(alpha=0.01))\n\n    # Output layer with sigmoid activation\n    model.add(Dense(1, activation='sigmoid'))\n\n    return model","metadata":{"execution":{"iopub.status.busy":"2023-09-15T13:53:26.745588Z","iopub.execute_input":"2023-09-15T13:53:26.746484Z","iopub.status.idle":"2023-09-15T13:53:26.753197Z","shell.execute_reply.started":"2023-09-15T13:53:26.746446Z","shell.execute_reply":"2023-09-15T13:53:26.751869Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def build_gan(generator, discriminator):\n\n    model = Sequential()\n\n    # Combined Generator -> Discriminator model\n    model.add(generator)\n    model.add(discriminator)\n\n    return model","metadata":{"execution":{"iopub.status.busy":"2023-09-15T13:53:30.871386Z","iopub.execute_input":"2023-09-15T13:53:30.871766Z","iopub.status.idle":"2023-09-15T13:53:30.877023Z","shell.execute_reply.started":"2023-09-15T13:53:30.871736Z","shell.execute_reply":"2023-09-15T13:53:30.875905Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Build and compile the Discriminator\ndiscriminator = build_discriminator(img_shape)\ndiscriminator.compile(loss='binary_crossentropy',\n                      optimizer=Adam(),\n                      metrics=['accuracy'])\n\n# Build the Generator\ngenerator = build_generator(img_shape, z_dim)\n\n# Keep Discriminator’s parameters constant for Generator training\ndiscriminator.trainable = False\n\n# Build and compile GAN model with fixed Discriminator to train the Generator\ngan = build_gan(generator, discriminator)\ngan.compile(loss='binary_crossentropy', optimizer=Adam())","metadata":{"execution":{"iopub.status.busy":"2023-09-15T13:53:31.802275Z","iopub.execute_input":"2023-09-15T13:53:31.802659Z","iopub.status.idle":"2023-09-15T13:53:31.910383Z","shell.execute_reply.started":"2023-09-15T13:53:31.802605Z","shell.execute_reply":"2023-09-15T13:53:31.909369Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"losses = []\naccuracies = []\niteration_checkpoints = []\n\n\ndef train(iterations, batch_size, sample_interval):\n\n    # Load the MNIST dataset\n    (X_train, _), (_, _) = mnist.load_data()\n\n    # Rescale [0, 255] grayscale pixel values to [-1, 1]\n    X_train = X_train / 127.5 - 1.0\n    X_train = np.expand_dims(X_train, axis=3)\n\n    # Labels for real images: all ones\n    real = np.ones((batch_size, 1))\n\n    # Labels for fake images: all zeros\n    fake = np.zeros((batch_size, 1))\n\n    for iteration in range(iterations):\n\n        # -------------------------\n        #  Train the Discriminator\n        # -------------------------\n\n        # Get a random batch of real images\n        idx = np.random.randint(0, X_train.shape[0], batch_size)\n        imgs = X_train[idx]\n\n        # Generate a batch of fake images\n        z = np.random.normal(0, 1, (batch_size, 100))\n        gen_imgs = generator.predict(z)\n\n        # Train Discriminator\n        d_loss_real = discriminator.train_on_batch(imgs, real)\n        d_loss_fake = discriminator.train_on_batch(gen_imgs, fake)\n        d_loss, accuracy = 0.5 * np.add(d_loss_real, d_loss_fake)\n\n        # ---------------------\n        #  Train the Generator\n        # ---------------------\n\n        # Generate a batch of fake images\n        z = np.random.normal(0, 1, (batch_size, 100))\n        gen_imgs = generator.predict(z)\n\n        # Train Generator\n        g_loss = gan.train_on_batch(z, real)\n\n        if (iteration + 1) % sample_interval == 0:\n\n            # Save losses and accuracies so they can be plotted after training\n            losses.append((d_loss, g_loss))\n            accuracies.append(100.0 * accuracy)\n            iteration_checkpoints.append(iteration + 1)\n\n            # Output training progress\n            print(\"%d [D loss: %f, acc.: %.2f%%] [G loss: %f]\" %\n                  (iteration + 1, d_loss, 100.0 * accuracy, g_loss))\n\n            # Output a sample of generated image\n            sample_images(generator)","metadata":{"execution":{"iopub.status.busy":"2023-09-15T13:53:33.420035Z","iopub.execute_input":"2023-09-15T13:53:33.420924Z","iopub.status.idle":"2023-09-15T13:53:33.432978Z","shell.execute_reply.started":"2023-09-15T13:53:33.420881Z","shell.execute_reply":"2023-09-15T13:53:33.432029Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def sample_images(generator, image_grid_rows=4, image_grid_columns=4):\n\n    # Sample random noise\n    z = np.random.normal(0, 1, (image_grid_rows * image_grid_columns, z_dim))\n\n    # Generate images from random noise\n    gen_imgs = generator.predict(z)\n\n    # Rescale image pixel values to [0, 1]\n    gen_imgs = 0.5 * gen_imgs + 0.5\n\n    # Set image grid\n    fig, axs = plt.subplots(image_grid_rows,\n                            image_grid_columns,\n                            figsize=(4, 4),\n                            sharey=True,\n                            sharex=True)\n\n    cnt = 0\n    for i in range(image_grid_rows):\n        for j in range(image_grid_columns):\n            # Output a grid of images\n            axs[i, j].imshow(gen_imgs[cnt, :, :, 0], cmap='gray')\n            axs[i, j].axis('off')\n            cnt += 1","metadata":{"execution":{"iopub.status.busy":"2023-09-15T13:53:35.837517Z","iopub.execute_input":"2023-09-15T13:53:35.838201Z","iopub.status.idle":"2023-09-15T13:53:35.845792Z","shell.execute_reply.started":"2023-09-15T13:53:35.838168Z","shell.execute_reply":"2023-09-15T13:53:35.844788Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Set hyperparameters\niterations = 2\nbatch_size = 128\nsample_interval = 1000\n\n# Train the GAN for the specified number of iterations\ntrain(iterations, batch_size, sample_interval)","metadata":{"execution":{"iopub.status.busy":"2023-09-15T13:54:28.776262Z","iopub.execute_input":"2023-09-15T13:54:28.776636Z","iopub.status.idle":"2023-09-15T13:54:29.542995Z","shell.execute_reply.started":"2023-09-15T13:54:28.776591Z","shell.execute_reply":"2023-09-15T13:54:29.542014Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}