Skip to content

Instantly share code, notes, and snippets.

@ceshine
Created October 8, 2018 08:53
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ceshine/f196d6b030adb1ec3a8d0b50642709dc to your computer and use it in GitHub Desktop.
Save ceshine/f196d6b030adb1ec3a8d0b50642709dc to your computer and use it in GitHub Desktop.
Keras Fashion MNIST - TPU
Display the source blob
Display the rendered blob
Raw
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"name": "Keras Fashion MNIST - TPU",
"version": "0.3.2",
"provenance": [],
"collapsed_sections": [],
"include_colab_link": true
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
},
"accelerator": "TPU"
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"[View in Colaboratory](https://colab.research.google.com/gist/ceshine/f196d6b030adb1ec3a8d0b50642709dc/keras-fashion-mnist-tpu.ipynb)"
]
},
{
"metadata": {
"id": "xdHrJctkrH9U",
"colab_type": "code",
"colab": {}
},
"cell_type": "code",
"source": [
"%%capture\n",
"!pip install watermark"
],
"execution_count": 0,
"outputs": []
},
{
"metadata": {
"id": "conjYMPerLfW",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 191
},
"outputId": "4c330169-c434-435f-a715-6077b7af88d4"
},
"cell_type": "code",
"source": [
"%load_ext watermark\n",
"%watermark -p tensorflow,numpy -m"
],
"execution_count": 2,
"outputs": [
{
"output_type": "stream",
"text": [
"tensorflow 1.11.0\n",
"numpy 1.14.6\n",
"\n",
"compiler : GCC 7.2.0\n",
"system : Linux\n",
"release : 4.14.33+\n",
"machine : x86_64\n",
"processor : x86_64\n",
"CPU cores : 2\n",
"interpreter: 64bit\n"
],
"name": "stdout"
}
]
},
{
"metadata": {
"id": "HpNsz6XM7b0P",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"(Adapted from https://github.com/tensorflow/tpu/blob/master/tools/colab/fashion_mnist.ipynb)"
]
},
{
"metadata": {
"id": "Ot79jiI7GiHR",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"# Fashion MNIST with Keras and TPUs\n",
"\n",
"Let's try out using `tf.keras` and Cloud TPUs to train a model on the fashion MNIST dataset.\n",
"\n",
"First, let's grab our dataset using `tf.keras.datasets`."
]
},
{
"metadata": {
"id": "Zo-Yk6LFGfSf",
"colab_type": "code",
"colab": {}
},
"cell_type": "code",
"source": [
"import os\n",
"\n",
"import tensorflow as tf\n",
"import numpy as np\n",
"import pandas as pd\n",
"from sklearn.model_selection import StratifiedShuffleSplit\n",
"\n",
"(x_train, y_train), (x_test, y_test) = tf.keras.datasets.fashion_mnist.load_data()\n",
"\n",
"# add empty color dimension\n",
"x_train = np.expand_dims(x_train, -1)\n",
"x_test = np.expand_dims(x_test, -1)"
],
"execution_count": 0,
"outputs": []
},
{
"metadata": {
"id": "bIBg5cUtso-o",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"Value distribution of X:"
]
},
{
"metadata": {
"id": "4OMHWt6osCz3",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 173
},
"outputId": "e16c9bda-7664-40ce-9f25-f40f5af6beaa"
},
"cell_type": "code",
"source": [
"pd.set_option('display.float_format', lambda x: '%.3f' % x)\n",
"pd.Series(x_train.reshape(-1)).describe()"
],
"execution_count": 4,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"count 47040000.000\n",
"mean 72.940\n",
"std 90.021\n",
"min 0.000\n",
"25% 0.000\n",
"50% 0.000\n",
"75% 163.000\n",
"max 255.000\n",
"dtype: float64"
]
},
"metadata": {
"tags": []
},
"execution_count": 4
}
]
},
{
"metadata": {
"id": "1C-WcdnNsyFU",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"Value distribution of Y:\n"
]
},
{
"metadata": {
"id": "MCOsHdxEsjQD",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 173
},
"outputId": "6d103e31-e400-4442-c0a0-151b124bd8fe"
},
"cell_type": "code",
"source": [
"pd.Series(y_train.reshape(-1)).describe()"
],
"execution_count": 5,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"count 60000.000\n",
"mean 4.500\n",
"std 2.872\n",
"min 0.000\n",
"25% 2.000\n",
"50% 4.500\n",
"75% 7.000\n",
"max 9.000\n",
"dtype: float64"
]
},
"metadata": {
"tags": []
},
"execution_count": 5
}
]
},
{
"metadata": {
"id": "Lx_VvBFNxHsr",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"### Create a validation set"
]
},
{
"metadata": {
"id": "flkZMTP7xGvc",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 34
},
"outputId": "47a84d00-6f1d-48c4-8b8b-b51cfb553efa"
},
"cell_type": "code",
"source": [
"sss = StratifiedShuffleSplit(n_splits=5, random_state=0, test_size=1/6)\n",
"train_index, valid_index = next(sss.split(x_train, y_train))\n",
"x_valid, y_valid = x_train[valid_index], y_train[valid_index]\n",
"x_train, y_train = x_train[train_index], y_train[train_index]\n",
"print(x_train.shape, x_valid.shape, x_test.shape)"
],
"execution_count": 6,
"outputs": [
{
"output_type": "stream",
"text": [
"(50000, 28, 28, 1) (10000, 28, 28, 1) (10000, 28, 28, 1)\n"
],
"name": "stdout"
}
]
},
{
"metadata": {
"id": "Hgc2FZKVMx15",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"# Defining our model\n",
"\n",
"We will use a standard conv-net for this example. We have 3 layers with drop-out and batch normalization between each layer."
]
},
{
"metadata": {
"id": "W7gMbs70GxA7",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 764
},
"outputId": "10d97676-c95f-4e00-dc54-e65155eb6716"
},
"cell_type": "code",
"source": [
"model = tf.keras.models.Sequential()\n",
"model.add(tf.keras.layers.BatchNormalization(input_shape=x_train.shape[1:]))\n",
"model.add(tf.keras.layers.Conv2D(64, (5, 5), padding='same', activation='elu'))\n",
"model.add(tf.keras.layers.MaxPooling2D(pool_size=(2, 2), strides=(2,2)))\n",
"model.add(tf.keras.layers.Dropout(0.25))\n",
"\n",
"model.add(tf.keras.layers.BatchNormalization(input_shape=x_train.shape[1:]))\n",
"model.add(tf.keras.layers.Conv2D(128, (5, 5), padding='same', activation='elu'))\n",
"model.add(tf.keras.layers.MaxPooling2D(pool_size=(2, 2)))\n",
"model.add(tf.keras.layers.Dropout(0.25))\n",
"\n",
"model.add(tf.keras.layers.BatchNormalization(input_shape=x_train.shape[1:]))\n",
"model.add(tf.keras.layers.Conv2D(256, (5, 5), padding='same', activation='elu'))\n",
"model.add(tf.keras.layers.MaxPooling2D(pool_size=(2, 2), strides=(2,2)))\n",
"model.add(tf.keras.layers.Dropout(0.25))\n",
"\n",
"model.add(tf.keras.layers.Flatten())\n",
"model.add(tf.keras.layers.Dense(256))\n",
"model.add(tf.keras.layers.Activation('elu'))\n",
"model.add(tf.keras.layers.Dropout(0.5))\n",
"model.add(tf.keras.layers.Dense(10))\n",
"model.add(tf.keras.layers.Activation('softmax'))\n",
"model.summary()"
],
"execution_count": 7,
"outputs": [
{
"output_type": "stream",
"text": [
"_________________________________________________________________\n",
"Layer (type) Output Shape Param # \n",
"=================================================================\n",
"batch_normalization (BatchNo (None, 28, 28, 1) 4 \n",
"_________________________________________________________________\n",
"conv2d (Conv2D) (None, 28, 28, 64) 1664 \n",
"_________________________________________________________________\n",
"max_pooling2d (MaxPooling2D) (None, 14, 14, 64) 0 \n",
"_________________________________________________________________\n",
"dropout (Dropout) (None, 14, 14, 64) 0 \n",
"_________________________________________________________________\n",
"batch_normalization_1 (Batch (None, 14, 14, 64) 256 \n",
"_________________________________________________________________\n",
"conv2d_1 (Conv2D) (None, 14, 14, 128) 204928 \n",
"_________________________________________________________________\n",
"max_pooling2d_1 (MaxPooling2 (None, 7, 7, 128) 0 \n",
"_________________________________________________________________\n",
"dropout_1 (Dropout) (None, 7, 7, 128) 0 \n",
"_________________________________________________________________\n",
"batch_normalization_2 (Batch (None, 7, 7, 128) 512 \n",
"_________________________________________________________________\n",
"conv2d_2 (Conv2D) (None, 7, 7, 256) 819456 \n",
"_________________________________________________________________\n",
"max_pooling2d_2 (MaxPooling2 (None, 3, 3, 256) 0 \n",
"_________________________________________________________________\n",
"dropout_2 (Dropout) (None, 3, 3, 256) 0 \n",
"_________________________________________________________________\n",
"flatten (Flatten) (None, 2304) 0 \n",
"_________________________________________________________________\n",
"dense (Dense) (None, 256) 590080 \n",
"_________________________________________________________________\n",
"activation (Activation) (None, 256) 0 \n",
"_________________________________________________________________\n",
"dropout_3 (Dropout) (None, 256) 0 \n",
"_________________________________________________________________\n",
"dense_1 (Dense) (None, 10) 2570 \n",
"_________________________________________________________________\n",
"activation_1 (Activation) (None, 10) 0 \n",
"=================================================================\n",
"Total params: 1,619,470\n",
"Trainable params: 1,619,084\n",
"Non-trainable params: 386\n",
"_________________________________________________________________\n"
],
"name": "stdout"
}
]
},
{
"metadata": {
"id": "xLeZATVaNAnE",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"# Training on the TPU\n",
"\n",
"We're ready to train! We first construct our model on the TPU, and compile it.\n",
"\n",
"Here we demonstrate that we can use a generator function and `fit_generator` to train the model. You can also pass in `x_train` and `y_train` to `tpu_model.fit()` instead."
]
},
{
"metadata": {
"id": "pWEYmd_hIWg8",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 347
},
"outputId": "6940ea43-b2ec-4409-cd0a-b9adc2ffa3ff"
},
"cell_type": "code",
"source": [
"tpu_model = tf.contrib.tpu.keras_to_tpu_model(\n",
" model,\n",
" strategy=tf.contrib.tpu.TPUDistributionStrategy(\n",
" tf.contrib.cluster_resolver.TPUClusterResolver(tpu='grpc://' + os.environ['COLAB_TPU_ADDR'])\n",
" )\n",
")\n",
"tpu_model.compile(\n",
" optimizer=tf.train.AdamOptimizer(learning_rate=1e-3, ),\n",
" loss=tf.keras.losses.sparse_categorical_crossentropy,\n",
" metrics=['sparse_categorical_accuracy']\n",
")"
],
"execution_count": 8,
"outputs": [
{
"output_type": "stream",
"text": [
"INFO:tensorflow:Querying Tensorflow master (b'grpc://10.111.100.242:8470') for TPU system metadata.\n",
"INFO:tensorflow:Found TPU system:\n",
"INFO:tensorflow:*** Num TPU Cores: 8\n",
"INFO:tensorflow:*** Num TPU Workers: 1\n",
"INFO:tensorflow:*** Num TPU Cores Per Worker: 8\n",
"INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:CPU:0, CPU, -1, 8719466739488700341)\n",
"INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:XLA_CPU:0, XLA_CPU, 17179869184, 5387697096584142034)\n",
"INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:XLA_GPU:0, XLA_GPU, 17179869184, 2449321996678620645)\n",
"INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:0, TPU, 17179869184, 2573529998940643254)\n",
"INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:1, TPU, 17179869184, 15218751418450842420)\n",
"INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:2, TPU, 17179869184, 2250829795696304903)\n",
"INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:3, TPU, 17179869184, 3074205643508661061)\n",
"INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:4, TPU, 17179869184, 17590475151113647496)\n",
"INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:5, TPU, 17179869184, 5799788512234859993)\n",
"INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:6, TPU, 17179869184, 2428910661628591312)\n",
"INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:7, TPU, 17179869184, 7546265101957865697)\n",
"INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU_SYSTEM:0, TPU_SYSTEM, 17179869184, 10408118999915313385)\n",
"WARNING:tensorflow:tpu_model (from tensorflow.contrib.tpu.python.tpu.keras_support) is experimental and may change or be removed at any time, and without warning.\n",
"INFO:tensorflow:Connecting to: b'grpc://10.111.100.242:8470'\n"
],
"name": "stdout"
}
]
},
{
"metadata": {
"id": "V1Zf7QtDvJAU",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 871
},
"outputId": "35e1088f-8c1b-4939-cd25-ff8931e4c569"
},
"cell_type": "code",
"source": [
"%%time\n",
"def train_gen(batch_size):\n",
" while True:\n",
" offset = np.random.randint(0, x_train.shape[0] - batch_size)\n",
" yield x_train[offset:offset+batch_size], y_train[offset:offset + batch_size]\n",
" \n",
"\n",
"tpu_model.fit_generator(\n",
" train_gen(512),\n",
" epochs=15,\n",
" steps_per_epoch=100,\n",
" validation_data=(x_valid, y_valid)\n",
")"
],
"execution_count": 9,
"outputs": [
{
"output_type": "stream",
"text": [
"Epoch 1/15\n",
"INFO:tensorflow:New input shapes; (re-)compiling: mode=train, [TensorSpec(shape=(64, 28, 28, 1), dtype=tf.float32, name='batch_normalization_input0'), TensorSpec(shape=(64, 1), dtype=tf.float32, name='activation_1_target0')]\n",
"INFO:tensorflow:Overriding default placeholder.\n",
"INFO:tensorflow:Remapping placeholder for batch_normalization_input\n",
"INFO:tensorflow:Started compiling\n",
"INFO:tensorflow:Finished compiling. Time elapsed: 2.6534595489501953 secs\n",
"INFO:tensorflow:Setting weights on TPU model.\n",
" 99/100 [============================>.] - ETA: 0s - loss: 1.0028 - sparse_categorical_accuracy: 0.7113INFO:tensorflow:New input shapes; (re-)compiling: mode=eval, [TensorSpec(shape=(64, 28, 28, 1), dtype=tf.float32, name='batch_normalization_input0'), TensorSpec(shape=(64, 1), dtype=tf.float32, name='activation_1_target0')]\n",
"INFO:tensorflow:Overriding default placeholder.\n",
"INFO:tensorflow:Remapping placeholder for batch_normalization_input\n",
"INFO:tensorflow:Started compiling\n",
"INFO:tensorflow:Finished compiling. Time elapsed: 1.2612757682800293 secs\n",
"INFO:tensorflow:New input shapes; (re-)compiling: mode=eval, [TensorSpec(shape=(34, 28, 28, 1), dtype=tf.float32, name='batch_normalization_input0'), TensorSpec(shape=(34, 1), dtype=tf.float32, name='activation_1_target0')]\n",
"INFO:tensorflow:Overriding default placeholder.\n",
"INFO:tensorflow:Remapping placeholder for batch_normalization_input\n",
"INFO:tensorflow:Started compiling\n",
"INFO:tensorflow:Finished compiling. Time elapsed: 1.3039376735687256 secs\n",
"100/100 [==============================] - 15s 152ms/step - loss: 1.0026 - sparse_categorical_accuracy: 0.7108 - val_loss: 0.9860 - val_sparse_categorical_accuracy: 0.6696\n",
"Epoch 2/15\n",
"100/100 [==============================] - 6s 64ms/step - loss: 0.4880 - sparse_categorical_accuracy: 0.8333 - val_loss: 0.7226 - val_sparse_categorical_accuracy: 0.7512\n",
"Epoch 3/15\n",
"100/100 [==============================] - 6s 61ms/step - loss: 0.4056 - sparse_categorical_accuracy: 0.8591 - val_loss: 0.5171 - val_sparse_categorical_accuracy: 0.8024\n",
"Epoch 4/15\n",
"100/100 [==============================] - 6s 62ms/step - loss: 0.3477 - sparse_categorical_accuracy: 0.8733 - val_loss: 0.3552 - val_sparse_categorical_accuracy: 0.8712\n",
"Epoch 5/15\n",
"100/100 [==============================] - 6s 62ms/step - loss: 0.2969 - sparse_categorical_accuracy: 0.8930 - val_loss: 0.2650 - val_sparse_categorical_accuracy: 0.9120\n",
"Epoch 6/15\n",
"100/100 [==============================] - 6s 62ms/step - loss: 0.2756 - sparse_categorical_accuracy: 0.8997 - val_loss: 0.2560 - val_sparse_categorical_accuracy: 0.9096\n",
"Epoch 7/15\n",
"100/100 [==============================] - 6s 62ms/step - loss: 0.2558 - sparse_categorical_accuracy: 0.9036 - val_loss: 0.2276 - val_sparse_categorical_accuracy: 0.9160\n",
"Epoch 8/15\n",
"100/100 [==============================] - 6s 64ms/step - loss: 0.2353 - sparse_categorical_accuracy: 0.9137 - val_loss: 0.2242 - val_sparse_categorical_accuracy: 0.9216\n",
"Epoch 9/15\n",
"100/100 [==============================] - 6s 62ms/step - loss: 0.1989 - sparse_categorical_accuracy: 0.9248 - val_loss: 0.2208 - val_sparse_categorical_accuracy: 0.9232\n",
"Epoch 10/15\n",
"100/100 [==============================] - 6s 64ms/step - loss: 0.2060 - sparse_categorical_accuracy: 0.9250 - val_loss: 0.2322 - val_sparse_categorical_accuracy: 0.9208\n",
"Epoch 11/15\n",
"100/100 [==============================] - 6s 62ms/step - loss: 0.1820 - sparse_categorical_accuracy: 0.9327 - val_loss: 0.2277 - val_sparse_categorical_accuracy: 0.9192\n",
"Epoch 12/15\n",
"100/100 [==============================] - 6s 62ms/step - loss: 0.1718 - sparse_categorical_accuracy: 0.9373 - val_loss: 0.2006 - val_sparse_categorical_accuracy: 0.9280\n",
"Epoch 13/15\n",
"100/100 [==============================] - 6s 63ms/step - loss: 0.1552 - sparse_categorical_accuracy: 0.9453 - val_loss: 0.2317 - val_sparse_categorical_accuracy: 0.9232\n",
"Epoch 14/15\n",
"100/100 [==============================] - 6s 62ms/step - loss: 0.1565 - sparse_categorical_accuracy: 0.9409 - val_loss: 0.2148 - val_sparse_categorical_accuracy: 0.9288\n",
"Epoch 15/15\n",
"100/100 [==============================] - 6s 62ms/step - loss: 0.1525 - sparse_categorical_accuracy: 0.9456 - val_loss: 0.2293 - val_sparse_categorical_accuracy: 0.9296\n",
"CPU times: user 16.5 s, sys: 3.08 s, total: 19.5 s\n",
"Wall time: 1min 42s\n"
],
"name": "stdout"
}
]
},
{
"metadata": {
"id": "ESL6ltQTMm05",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"# Checking our results (inference)\n",
"\n",
"Now that we're done training, let's see how well we can predict fashion categories! Keras/TPU prediction isn't working due to a small bug (fixed in TF 1.12!), but we can predict on the CPU to see how our results look."
]
},
{
"metadata": {
"id": "SaYPv_aKId2d",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 603
},
"outputId": "d050e277-271c-4330-93e0-400b55799b0c"
},
"cell_type": "code",
"source": [
"LABEL_NAMES = ['t_shirt', 'trouser', 'pullover', 'dress', 'coat', 'sandal', 'shirt', 'sneaker', 'bag', 'ankle_boots']\n",
"\n",
"\n",
"cpu_model = tpu_model.sync_to_cpu()\n",
"\n",
"from matplotlib import pyplot\n",
"%matplotlib inline\n",
"\n",
"def plot_predictions(images, predictions, true_labels):\n",
" n = images.shape[0]\n",
" nc = int(np.ceil(n / 4))\n",
" fig = pyplot.figure(figsize=(4,3))\n",
" # axes = fig.add_subplot(nc, 4)\n",
" f, axes = pyplot.subplots(nc, 4)\n",
" f.tight_layout()\n",
" for i in range(nc * 4):\n",
" y = i // 4\n",
" x = i % 4\n",
" axes[x, y].axis('off')\n",
" \n",
" label = LABEL_NAMES[np.argmax(predictions[i])]\n",
" confidence = np.max(predictions[i])\n",
" if i > n:\n",
" continue\n",
" axes[x, y].imshow(images[i])\n",
" pred_label = np.argmax(predictions[i])\n",
" axes[x, y].set_title(\"{} ({})\\n {:.3f}\".format(\n",
" LABEL_NAMES[pred_label], \n",
" LABEL_NAMES[true_labels[i]],\n",
" confidence\n",
" ), color=(\"green\" if true_labels[i] == pred_label else \"red\"))\n",
" pyplot.gcf().set_size_inches(8, 8) \n",
"\n",
"plot_predictions(\n",
" np.squeeze(x_test[:16]), \n",
" cpu_model.predict(x_test[:16]),\n",
" y_test[:16]\n",
")"
],
"execution_count": 27,
"outputs": [
{
"output_type": "stream",
"text": [
"INFO:tensorflow:Copying TPU weights to the CPU\n"
],
"name": "stdout"
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"<matplotlib.figure.Figure at 0x7fa3f53170b8>"
]
},
"metadata": {
"tags": []
}
},
{
"output_type": "display_data",
"data": {
"image/png": "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\nd1Jv09yLVrKLzZs482J4AE899RQAe+yxR1WWc5tAh774398HMmfZu/28adfrQHbbeF3wbp211loL\ngN/85jdVmd83B9b584ve0VNf4Mn9gv/tH3300Uo+4YQTgNYgZO/Kza6YNddcsyrzeY4+8YlPAHDi\niSdWZb6vufXWWys5B8q3a2t2K7bLoyOmD/8854DUK664oirbZpttKjnfI+i4974P8LqX9eSCCy6o\nyvyioV7O4QO+b/JLX2Sd8cGzq6++eiV7t5B3KXeHfyd62etUfwXQymIihBBCiMaggYkQQgghGsOQ\ncuXUuW3amS7rynty3/ztb3+rZG9+3WCDDYDWGRmTJ0+u5MUXX7yL7KP2/Yq23rxf1y4/UyPP0PA5\nU0TvyW6PESNGVGV1Zla/iu8//vGPSq4zgXqz+auvvgq0uof8dj+bJ7uD2kXGZzNs3Qwv6DATe70T\nfaenmQm5X8gzugCOO+64Sl5jjTWAjtk10GpCz+45r0fXX399JZ9yyilAh0sXWmdebLbZZpWc3UFH\nH310VTZu3LhK7ilvhpg+8swqj+/Dzz777Er29yO7jP3MqocffriSs9vFz+LaYostKvm2226r5B13\n3BFo1RPvkl5xxRWB1iUqHnjggUq+4YYbKnnttdcGWt2Lq666aiXnEIVZmedEFhMhhBBCNIYhZTGp\ns4L4L6CeLCrtRoTXXXcd0JFjBGCllVaq5Gy58PV7y8Zyyy1XyTmQ1Z/LB83m4Nbe5Bv4y1/+AsBe\ne+1Vu110xVufchCbt1L53z1/gdTlC/H4gFhvcclfUUsuuWRV1k7f6iwmvl1Zh7zFxF9L3tcHSvsg\nPQVIt8ffk94Gh3orhn/WfcByd/gvYS9n/GKRP/jBDyr5jjvuqOTXXnsNgCOOOKIq22effSo5W1Kz\n5Q5a9SvrTzv9z/qz6aabVmW+LxuueOtItp5466e/dxdeeGElZ8upfy79AqKbbLIJ0BHoDq36uO66\n61Zytrj7vsdnE8/33FtUvOytwNnK6i133jqTs037+r0e+NxPSyyxBND6e0wPspgIIYQQojFoYCKE\nEEKIxjAoXTnTmzq3JzOtN9Fl9w3A1KlTgdbgIG9Sr0tD7U3n/ry5Lo8PUsvuA28K8yY4b/7PAUxy\n5fQeb3bPeuTvjzdr53vhXSZ+SYB8j3xuGW+azffNm279/fdBy7muuoX9oMOd1M5Eml0I/lq8mden\n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\nchgaPQAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7fa3f54e0d68>"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"metadata": {
"id": "e0m_OqgFzAK6",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 86
},
"outputId": "c3244ef3-68ee-4e21-f01b-c685b3d6c85f"
},
"cell_type": "code",
"source": [
"%%time\n",
"# Evaluate the model on valid set\n",
"score = cpu_model.evaluate(x_valid, y_valid, verbose=0)\n",
"\n",
"# Print test accuracy\n",
"print('\\n', 'Valid accuracy:', score[1])"
],
"execution_count": 11,
"outputs": [
{
"output_type": "stream",
"text": [
"\n",
" Valid accuracy: 0.9271\n",
"CPU times: user 1min 10s, sys: 1.11 s, total: 1min 11s\n",
"Wall time: 37.1 s\n"
],
"name": "stdout"
}
]
},
{
"metadata": {
"id": "VgNcgjnMt6ER",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 86
},
"outputId": "3a81e276-c375-431e-9771-c2b3c60261fa"
},
"cell_type": "code",
"source": [
"%%time\n",
"# Evaluate the model on test set\n",
"score = cpu_model.evaluate(x_test, y_test, verbose=0)\n",
"\n",
"# Print test accuracy\n",
"print('\\n', 'Test accuracy:', score[1])"
],
"execution_count": 12,
"outputs": [
{
"output_type": "stream",
"text": [
"\n",
" Test accuracy: 0.9201\n",
"CPU times: user 1min 10s, sys: 1.16 s, total: 1min 11s\n",
"Wall time: 37 s\n"
],
"name": "stdout"
}
]
},
{
"metadata": {
"id": "GJAaFlQYNhoW",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"# Not bad!"
]
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment