{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"name": "DCGAN-intro for cifar10",
"provenance": [],
"collapsed_sections": [],
"include_colab_link": true
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
},
"accelerator": "GPU"
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
""
]
},
{
"cell_type": "code",
"metadata": {
"id": "h7wmtd7wI9U7",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 413
},
"outputId": "0f1110a2-6d3d-4fce-ecba-9f2023339d01"
},
"source": [
"# for tf 2.0\n",
"!pip install -U tensorflow-gpu"
],
"execution_count": 1,
"outputs": [
{
"output_type": "stream",
"text": [
"Requirement already up-to-date: tensorflow-gpu in /usr/local/lib/python3.6/dist-packages (2.0.0)\n",
"Requirement already satisfied, skipping upgrade: absl-py>=0.7.0 in /usr/local/lib/python3.6/dist-packages (from tensorflow-gpu) (0.8.0)\n",
"Requirement already satisfied, skipping upgrade: astor>=0.6.0 in /usr/local/lib/python3.6/dist-packages (from tensorflow-gpu) (0.8.0)\n",
"Requirement already satisfied, skipping upgrade: numpy<2.0,>=1.16.0 in /usr/local/lib/python3.6/dist-packages (from tensorflow-gpu) (1.16.5)\n",
"Requirement already satisfied, skipping upgrade: tensorboard<2.1.0,>=2.0.0 in /usr/local/lib/python3.6/dist-packages (from tensorflow-gpu) (2.0.0)\n",
"Requirement already satisfied, skipping upgrade: wrapt>=1.11.1 in /usr/local/lib/python3.6/dist-packages (from tensorflow-gpu) (1.11.2)\n",
"Requirement already satisfied, skipping upgrade: protobuf>=3.6.1 in /usr/local/lib/python3.6/dist-packages (from tensorflow-gpu) (3.7.1)\n",
"Requirement already satisfied, skipping upgrade: keras-preprocessing>=1.0.5 in /usr/local/lib/python3.6/dist-packages (from tensorflow-gpu) (1.1.0)\n",
"Requirement already satisfied, skipping upgrade: termcolor>=1.1.0 in /usr/local/lib/python3.6/dist-packages (from tensorflow-gpu) (1.1.0)\n",
"Requirement already satisfied, skipping upgrade: grpcio>=1.8.6 in /usr/local/lib/python3.6/dist-packages (from tensorflow-gpu) (1.15.0)\n",
"Requirement already satisfied, skipping upgrade: six>=1.10.0 in /usr/local/lib/python3.6/dist-packages (from tensorflow-gpu) (1.12.0)\n",
"Requirement already satisfied, skipping upgrade: gast==0.2.2 in /usr/local/lib/python3.6/dist-packages (from tensorflow-gpu) (0.2.2)\n",
"Requirement already satisfied, skipping upgrade: tensorflow-estimator<2.1.0,>=2.0.0 in /usr/local/lib/python3.6/dist-packages (from tensorflow-gpu) (2.0.0)\n",
"Requirement already satisfied, skipping upgrade: google-pasta>=0.1.6 in /usr/local/lib/python3.6/dist-packages (from tensorflow-gpu) (0.1.7)\n",
"Requirement already satisfied, skipping upgrade: opt-einsum>=2.3.2 in /usr/local/lib/python3.6/dist-packages (from tensorflow-gpu) (3.0.1)\n",
"Requirement already satisfied, skipping upgrade: wheel>=0.26 in /usr/local/lib/python3.6/dist-packages (from tensorflow-gpu) (0.33.6)\n",
"Requirement already satisfied, skipping upgrade: keras-applications>=1.0.8 in /usr/local/lib/python3.6/dist-packages (from tensorflow-gpu) (1.0.8)\n",
"Requirement already satisfied, skipping upgrade: werkzeug>=0.11.15 in /usr/local/lib/python3.6/dist-packages (from tensorboard<2.1.0,>=2.0.0->tensorflow-gpu) (0.16.0)\n",
"Requirement already satisfied, skipping upgrade: setuptools>=41.0.0 in /usr/local/lib/python3.6/dist-packages (from tensorboard<2.1.0,>=2.0.0->tensorflow-gpu) (41.2.0)\n",
"Requirement already satisfied, skipping upgrade: markdown>=2.6.8 in /usr/local/lib/python3.6/dist-packages (from tensorboard<2.1.0,>=2.0.0->tensorflow-gpu) (3.1.1)\n",
"Requirement already satisfied, skipping upgrade: h5py in /usr/local/lib/python3.6/dist-packages (from keras-applications>=1.0.8->tensorflow-gpu) (2.8.0)\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "ckOHCuiArv5c",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 35
},
"outputId": "17fbbc4e-0259-4021-df68-7c52d3cc030a"
},
"source": [
"import tensorflow as tf\n",
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"import os\n",
"import PIL\n",
"import time\n",
"from skimage.io import imshow\n",
"\n",
"from IPython.display import display\n",
"tf.__version__"
],
"execution_count": 2,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"'2.0.0'"
]
},
"metadata": {
"tags": []
},
"execution_count": 2
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "1V2PJHrDrxf2",
"colab_type": "code",
"colab": {}
},
"source": [
"(train_images, train_labels), (test_images, test_labels) = tf.keras.datasets.cifar10.load_data()\n"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "L0iNo21Arykj",
"colab_type": "code",
"outputId": "4a060d43-807f-48f4-b491-8ce75101fd0a",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 35
}
},
"source": [
"train_images.dtype, train_images.shape"
],
"execution_count": 4,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"(dtype('uint8'), (50000, 32, 32, 3))"
]
},
"metadata": {
"tags": []
},
"execution_count": 4
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "uAcCsSinus1d",
"colab_type": "code",
"outputId": "d2236984-695d-4873-bf4c-73ff65daec34",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 315
}
},
"source": [
"imshow(train_images[2])"
],
"execution_count": 5,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
""
]
},
"metadata": {
"tags": []
},
"execution_count": 5
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"