Required Libraries

library(tidyverse)
## -- Attaching packages -------------------------------------------------------------------------------------- tidyverse 1.3.0 --
## v ggplot2 3.3.2     v purrr   0.3.4
## v tibble  3.0.3     v dplyr   1.0.1
## v tidyr   1.1.1     v stringr 1.4.0
## v readr   1.3.1     v forcats 0.5.0
## -- Conflicts ----------------------------------------------------------------------------------------- tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
library(reticulate)
library(tensorflow)

Check the environment

conda_list()
##           name
## 1        py3.6
## 2 r-reticulate
## 3   matplotlib
## 4        numpy
## 5       pandas
## 6        py3.8
## 7 scikit-learn
##                                                                          python
## 1                          C:\\Users\\junko\\anaconda3\\envs\\py3.6\\python.exe
## 2 C:\\Users\\junko\\AppData\\Local\\r-miniconda\\envs\\r-reticulate\\python.exe
## 3                     C:\\Users\\junko\\anaconda3\\envs\\matplotlib\\python.exe
## 4                          C:\\Users\\junko\\anaconda3\\envs\\numpy\\python.exe
## 5                         C:\\Users\\junko\\anaconda3\\envs\\pandas\\python.exe
## 6                          C:\\Users\\junko\\anaconda3\\envs\\py3.8\\python.exe
## 7                   C:\\Users\\junko\\anaconda3\\envs\\scikit-learn\\python.exe

Use the py3.6 conda environment

use_condaenv("py3.6", required = TRUE)

Python Starts Here

Python import libraries

# TensorFlow and tf.keras
import tensorflow as tf
from tensorflow import keras

# Helper libraries
import numpy as np
import matplotlib.pyplot as plt

Check the version of TensorFlow

print(tf.__version__)
## 2.2.0

Image recognition

Load the fashion image

fashion_mnist = keras.datasets.fashion_mnist

(train_images, train_labels), (test_images, test_labels) = fashion_mnist.load_data()

Check the training images

train_images.shape
## (60000, 28, 28)

Check the unique labels

np.unique(train_labels)
## array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], dtype=uint8)

Corresponding labels

class_names = ['T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat',
               'Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle boot']

Look at one of the image, i.e. image number 2

plt.figure()
plt.imshow(train_images[1])
plt.colorbar()
## <matplotlib.colorbar.Colorbar object at 0x0000000062D0A240>
plt.grid(False)
plt.show()

Look at the first 25 images

plt.figure(figsize=(10,10))
for i in range(25):
    plt.subplot(5,5,i+1)
    plt.xticks([])
    plt.yticks([])
    plt.grid(False)
    plt.imshow(train_images[i], cmap=plt.cm.binary)
    plt.xlabel(class_names[train_labels[i]])
plt.show()

Modeling with Keras

model = keras.Sequential([
    keras.layers.Flatten(input_shape=(28, 28)),
    keras.layers.Dense(128, activation='relu'),
    keras.layers.Dense(10)
])

Compile with the “adam” optimizer

model.compile(
    optimizer = 'adam',
    loss      = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
    metrics   = ['accuracy']
)

Inspect the model summary

model.summary()
## Model: "sequential"
## _________________________________________________________________
## Layer (type)                 Output Shape              Param #   
## =================================================================
## flatten (Flatten)            (None, 784)               0         
## _________________________________________________________________
## dense (Dense)                (None, 128)               100480    
## _________________________________________________________________
## dense_1 (Dense)              (None, 10)                1290      
## =================================================================
## Total params: 101,770
## Trainable params: 101,770
## Non-trainable params: 0
## _________________________________________________________________

Fit the Keras model

model.fit(train_images, train_labels, epochs=10, verbose=1)
## Epoch 1/10
## 
##    1/1875 [..............................] - ETA: 0s - loss: 197.2002 - accuracy: 0.1875
##   78/1875 [>.............................] - ETA: 1s - loss: 32.1713 - accuracy: 0.6058 
##  159/1875 [=>............................] - ETA: 1s - loss: 20.7551 - accuracy: 0.6586
##  241/1875 [==>...........................] - ETA: 1s - loss: 15.7860 - accuracy: 0.6727
##  323/1875 [====>.........................] - ETA: 0s - loss: 12.7526 - accuracy: 0.6830
##  405/1875 [=====>........................] - ETA: 0s - loss: 10.5624 - accuracy: 0.6710
##  485/1875 [======>.......................] - ETA: 0s - loss: 9.0571 - accuracy: 0.6692 
##  567/1875 [========>.....................] - ETA: 0s - loss: 7.9557 - accuracy: 0.6680
##  648/1875 [=========>....................] - ETA: 0s - loss: 7.1281 - accuracy: 0.6669
##  730/1875 [==========>...................] - ETA: 0s - loss: 6.4591 - accuracy: 0.6655
##  811/1875 [===========>..................] - ETA: 0s - loss: 5.9267 - accuracy: 0.6694
##  892/1875 [=============>................] - ETA: 0s - loss: 5.4821 - accuracy: 0.6726
##  973/1875 [==============>...............] - ETA: 0s - loss: 5.1101 - accuracy: 0.6729
## 1054/1875 [===============>..............] - ETA: 0s - loss: 4.7954 - accuracy: 0.6747
## 1134/1875 [=================>............] - ETA: 0s - loss: 4.5250 - accuracy: 0.6768
## 1214/1875 [==================>...........] - ETA: 0s - loss: 4.2921 - accuracy: 0.6786
## 1295/1875 [===================>..........] - ETA: 0s - loss: 4.0854 - accuracy: 0.6797
## 1376/1875 [=====================>........] - ETA: 0s - loss: 3.8988 - accuracy: 0.6816
## 1457/1875 [======================>.......] - ETA: 0s - loss: 3.7277 - accuracy: 0.6848
## 1539/1875 [=======================>......] - ETA: 0s - loss: 3.5778 - accuracy: 0.6860
## 1620/1875 [========================>.....] - ETA: 0s - loss: 3.4460 - accuracy: 0.6859
## 1701/1875 [==========================>...] - ETA: 0s - loss: 3.3244 - accuracy: 0.6868
## 1783/1875 [===========================>..] - ETA: 0s - loss: 3.2088 - accuracy: 0.6886
## 1865/1875 [============================>.] - ETA: 0s - loss: 3.1017 - accuracy: 0.6904
## 1875/1875 [==============================] - 1s 628us/step - loss: 3.0892 - accuracy: 0.6905
## Epoch 2/10
## 
##    1/1875 [..............................] - ETA: 0s - loss: 0.7763 - accuracy: 0.7500
##   82/1875 [>.............................] - ETA: 1s - loss: 0.7508 - accuracy: 0.7191
##  164/1875 [=>............................] - ETA: 1s - loss: 0.7473 - accuracy: 0.7245
##  246/1875 [==>...........................] - ETA: 1s - loss: 0.7714 - accuracy: 0.7246
##  327/1875 [====>.........................] - ETA: 0s - loss: 0.7654 - accuracy: 0.7252
##  408/1875 [=====>........................] - ETA: 0s - loss: 0.7581 - accuracy: 0.7268
##  490/1875 [======>.......................] - ETA: 0s - loss: 0.7463 - accuracy: 0.7281
##  571/1875 [========>.....................] - ETA: 0s - loss: 0.7400 - accuracy: 0.7300
##  651/1875 [=========>....................] - ETA: 0s - loss: 0.7434 - accuracy: 0.7308
##  733/1875 [==========>...................] - ETA: 0s - loss: 0.7385 - accuracy: 0.7315
##  819/1875 [============>.................] - ETA: 0s - loss: 0.7383 - accuracy: 0.7314
##  901/1875 [=============>................] - ETA: 0s - loss: 0.7344 - accuracy: 0.7317
##  985/1875 [==============>...............] - ETA: 0s - loss: 0.7317 - accuracy: 0.7306
## 1090/1875 [================>.............] - ETA: 0s - loss: 0.7284 - accuracy: 0.7312
## 1171/1875 [=================>............] - ETA: 0s - loss: 0.7242 - accuracy: 0.7324
## 1253/1875 [===================>..........] - ETA: 0s - loss: 0.7204 - accuracy: 0.7331
## 1356/1875 [====================>.........] - ETA: 0s - loss: 0.7164 - accuracy: 0.7337
## 1440/1875 [======================>.......] - ETA: 0s - loss: 0.7162 - accuracy: 0.7336
## 1520/1875 [=======================>......] - ETA: 0s - loss: 0.7147 - accuracy: 0.7337
## 1601/1875 [========================>.....] - ETA: 0s - loss: 0.7126 - accuracy: 0.7344
## 1703/1875 [==========================>...] - ETA: 0s - loss: 0.7121 - accuracy: 0.7346
## 1787/1875 [===========================>..] - ETA: 0s - loss: 0.7107 - accuracy: 0.7345
## 1867/1875 [============================>.] - ETA: 0s - loss: 0.7089 - accuracy: 0.7348
## 1875/1875 [==============================] - 1s 620us/step - loss: 0.7089 - accuracy: 0.7347
## Epoch 3/10
## 
##    1/1875 [..............................] - ETA: 0s - loss: 0.6442 - accuracy: 0.7188
##   73/1875 [>.............................] - ETA: 1s - loss: 0.6375 - accuracy: 0.7397
##  176/1875 [=>............................] - ETA: 1s - loss: 0.6224 - accuracy: 0.7489
##  258/1875 [===>..........................] - ETA: 1s - loss: 0.6304 - accuracy: 0.7447
##  338/1875 [====>.........................] - ETA: 0s - loss: 0.6267 - accuracy: 0.7469
##  420/1875 [=====>........................] - ETA: 0s - loss: 0.6320 - accuracy: 0.7463
##  501/1875 [=======>......................] - ETA: 0s - loss: 0.6279 - accuracy: 0.7491
##  582/1875 [========>.....................] - ETA: 0s - loss: 0.6302 - accuracy: 0.7495
##  664/1875 [=========>....................] - ETA: 0s - loss: 0.6333 - accuracy: 0.7489
##  744/1875 [==========>...................] - ETA: 0s - loss: 0.6360 - accuracy: 0.7476
##  825/1875 [============>.................] - ETA: 0s - loss: 0.6345 - accuracy: 0.7478
##  906/1875 [=============>................] - ETA: 0s - loss: 0.6324 - accuracy: 0.7484
##  988/1875 [==============>...............] - ETA: 0s - loss: 0.6295 - accuracy: 0.7488
## 1069/1875 [================>.............] - ETA: 0s - loss: 0.6302 - accuracy: 0.7497
## 1150/1875 [=================>............] - ETA: 0s - loss: 0.6359 - accuracy: 0.7486
## 1231/1875 [==================>...........] - ETA: 0s - loss: 0.6383 - accuracy: 0.7481
## 1313/1875 [====================>.........] - ETA: 0s - loss: 0.6411 - accuracy: 0.7485
## 1394/1875 [=====================>........] - ETA: 0s - loss: 0.6387 - accuracy: 0.7497
## 1475/1875 [======================>.......] - ETA: 0s - loss: 0.6383 - accuracy: 0.7499
## 1556/1875 [=======================>......] - ETA: 0s - loss: 0.6398 - accuracy: 0.7496
## 1639/1875 [=========================>....] - ETA: 0s - loss: 0.6409 - accuracy: 0.7495
## 1720/1875 [==========================>...] - ETA: 0s - loss: 0.6408 - accuracy: 0.7497
## 1801/1875 [===========================>..] - ETA: 0s - loss: 0.6411 - accuracy: 0.7501
## 1875/1875 [==============================] - 1s 629us/step - loss: 0.6429 - accuracy: 0.7502
## Epoch 4/10
## 
##    1/1875 [..............................] - ETA: 0s - loss: 0.4393 - accuracy: 0.8125
##   82/1875 [>.............................] - ETA: 1s - loss: 0.6057 - accuracy: 0.7542
##  163/1875 [=>............................] - ETA: 1s - loss: 0.5972 - accuracy: 0.7646
##  243/1875 [==>...........................] - ETA: 1s - loss: 0.5952 - accuracy: 0.7647
##  324/1875 [====>.........................] - ETA: 0s - loss: 0.6057 - accuracy: 0.7629
##  406/1875 [=====>........................] - ETA: 0s - loss: 0.6043 - accuracy: 0.7639
##  487/1875 [======>.......................] - ETA: 0s - loss: 0.6031 - accuracy: 0.7648
##  569/1875 [========>.....................] - ETA: 0s - loss: 0.5978 - accuracy: 0.7673
##  651/1875 [=========>....................] - ETA: 0s - loss: 0.5982 - accuracy: 0.7662
##  732/1875 [==========>...................] - ETA: 0s - loss: 0.6010 - accuracy: 0.7664
##  814/1875 [============>.................] - ETA: 0s - loss: 0.5971 - accuracy: 0.7681
##  894/1875 [=============>................] - ETA: 0s - loss: 0.5955 - accuracy: 0.7706
##  976/1875 [==============>...............] - ETA: 0s - loss: 0.5928 - accuracy: 0.7723
## 1058/1875 [===============>..............] - ETA: 0s - loss: 0.5920 - accuracy: 0.7742
## 1139/1875 [=================>............] - ETA: 0s - loss: 0.5916 - accuracy: 0.7759
## 1220/1875 [==================>...........] - ETA: 0s - loss: 0.5939 - accuracy: 0.7762
## 1302/1875 [===================>..........] - ETA: 0s - loss: 0.5913 - accuracy: 0.7780
## 1383/1875 [=====================>........] - ETA: 0s - loss: 0.5890 - accuracy: 0.7796
## 1464/1875 [======================>.......] - ETA: 0s - loss: 0.5887 - accuracy: 0.7801
## 1545/1875 [=======================>......] - ETA: 0s - loss: 0.5888 - accuracy: 0.7800
## 1627/1875 [=========================>....] - ETA: 0s - loss: 0.5891 - accuracy: 0.7806
## 1707/1875 [==========================>...] - ETA: 0s - loss: 0.5876 - accuracy: 0.7815
## 1787/1875 [===========================>..] - ETA: 0s - loss: 0.5875 - accuracy: 0.7816
## 1867/1875 [============================>.] - ETA: 0s - loss: 0.5874 - accuracy: 0.7821
## 1875/1875 [==============================] - 1s 627us/step - loss: 0.5873 - accuracy: 0.7822
## Epoch 5/10
## 
##    1/1875 [..............................] - ETA: 0s - loss: 0.4660 - accuracy: 0.8438
##   81/1875 [>.............................] - ETA: 1s - loss: 0.5683 - accuracy: 0.8021
##  162/1875 [=>............................] - ETA: 1s - loss: 0.5664 - accuracy: 0.7980
##  243/1875 [==>...........................] - ETA: 1s - loss: 0.5501 - accuracy: 0.8013
##  323/1875 [====>.........................] - ETA: 0s - loss: 0.5522 - accuracy: 0.8031
##  405/1875 [=====>........................] - ETA: 0s - loss: 0.5479 - accuracy: 0.8046
##  487/1875 [======>.......................] - ETA: 0s - loss: 0.5456 - accuracy: 0.8070
##  567/1875 [========>.....................] - ETA: 0s - loss: 0.5476 - accuracy: 0.8057
##  648/1875 [=========>....................] - ETA: 0s - loss: 0.5520 - accuracy: 0.8028
##  729/1875 [==========>...................] - ETA: 0s - loss: 0.5595 - accuracy: 0.8005
##  810/1875 [===========>..................] - ETA: 0s - loss: 0.5560 - accuracy: 0.8024
##  891/1875 [=============>................] - ETA: 0s - loss: 0.5536 - accuracy: 0.8035
##  973/1875 [==============>...............] - ETA: 0s - loss: 0.5534 - accuracy: 0.8044
## 1054/1875 [===============>..............] - ETA: 0s - loss: 0.5521 - accuracy: 0.8047
## 1135/1875 [=================>............] - ETA: 0s - loss: 0.5502 - accuracy: 0.8048
## 1216/1875 [==================>...........] - ETA: 0s - loss: 0.5508 - accuracy: 0.8049
## 1297/1875 [===================>..........] - ETA: 0s - loss: 0.5503 - accuracy: 0.8053
## 1378/1875 [=====================>........] - ETA: 0s - loss: 0.5487 - accuracy: 0.8060
## 1459/1875 [======================>.......] - ETA: 0s - loss: 0.5498 - accuracy: 0.8067
## 1540/1875 [=======================>......] - ETA: 0s - loss: 0.5498 - accuracy: 0.8068
## 1621/1875 [========================>.....] - ETA: 0s - loss: 0.5488 - accuracy: 0.8071
## 1702/1875 [==========================>...] - ETA: 0s - loss: 0.5480 - accuracy: 0.8068
## 1782/1875 [===========================>..] - ETA: 0s - loss: 0.5490 - accuracy: 0.8065
## 1864/1875 [============================>.] - ETA: 0s - loss: 0.5488 - accuracy: 0.8067
## 1875/1875 [==============================] - 1s 628us/step - loss: 0.5491 - accuracy: 0.8067
## Epoch 6/10
## 
##    1/1875 [..............................] - ETA: 0s - loss: 0.4672 - accuracy: 0.9062
##   81/1875 [>.............................] - ETA: 1s - loss: 0.5031 - accuracy: 0.8218
##  163/1875 [=>............................] - ETA: 1s - loss: 0.5100 - accuracy: 0.8215
##  238/1875 [==>...........................] - ETA: 1s - loss: 0.5264 - accuracy: 0.8172
##  318/1875 [====>.........................] - ETA: 0s - loss: 0.5312 - accuracy: 0.8148
##  399/1875 [=====>........................] - ETA: 0s - loss: 0.5266 - accuracy: 0.8166
##  479/1875 [======>.......................] - ETA: 0s - loss: 0.5347 - accuracy: 0.8147
##  559/1875 [=======>......................] - ETA: 0s - loss: 0.5282 - accuracy: 0.8164
##  639/1875 [=========>....................] - ETA: 0s - loss: 0.5265 - accuracy: 0.8170
##  720/1875 [==========>...................] - ETA: 0s - loss: 0.5240 - accuracy: 0.8168
##  800/1875 [===========>..................] - ETA: 0s - loss: 0.5243 - accuracy: 0.8166
##  880/1875 [=============>................] - ETA: 0s - loss: 0.5227 - accuracy: 0.8171
##  960/1875 [==============>...............] - ETA: 0s - loss: 0.5209 - accuracy: 0.8175
## 1040/1875 [===============>..............] - ETA: 0s - loss: 0.5177 - accuracy: 0.8181
## 1120/1875 [================>.............] - ETA: 0s - loss: 0.5155 - accuracy: 0.8189
## 1200/1875 [==================>...........] - ETA: 0s - loss: 0.5192 - accuracy: 0.8180
## 1279/1875 [===================>..........] - ETA: 0s - loss: 0.5228 - accuracy: 0.8174
## 1359/1875 [====================>.........] - ETA: 0s - loss: 0.5217 - accuracy: 0.8179
## 1440/1875 [======================>.......] - ETA: 0s - loss: 0.5208 - accuracy: 0.8178
## 1521/1875 [=======================>......] - ETA: 0s - loss: 0.5197 - accuracy: 0.8180
## 1601/1875 [========================>.....] - ETA: 0s - loss: 0.5204 - accuracy: 0.8184
## 1704/1875 [==========================>...] - ETA: 0s - loss: 0.5223 - accuracy: 0.8178
## 1785/1875 [===========================>..] - ETA: 0s - loss: 0.5237 - accuracy: 0.8170
## 1865/1875 [============================>.] - ETA: 0s - loss: 0.5252 - accuracy: 0.8163
## 1875/1875 [==============================] - 1s 634us/step - loss: 0.5253 - accuracy: 0.8163
## Epoch 7/10
## 
##    1/1875 [..............................] - ETA: 0s - loss: 0.5994 - accuracy: 0.8125
##   94/1875 [>.............................] - ETA: 1s - loss: 0.5563 - accuracy: 0.8005
##  177/1875 [=>............................] - ETA: 1s - loss: 0.5385 - accuracy: 0.8120
##  257/1875 [===>..........................] - ETA: 1s - loss: 0.5421 - accuracy: 0.8112
##  337/1875 [====>.........................] - ETA: 0s - loss: 0.5272 - accuracy: 0.8151
##  419/1875 [=====>........................] - ETA: 0s - loss: 0.5271 - accuracy: 0.8153
##  520/1875 [=======>......................] - ETA: 0s - loss: 0.5213 - accuracy: 0.8189
##  601/1875 [========>.....................] - ETA: 0s - loss: 0.5154 - accuracy: 0.8205
##  682/1875 [=========>....................] - ETA: 0s - loss: 0.5108 - accuracy: 0.8217
##  785/1875 [===========>..................] - ETA: 0s - loss: 0.5108 - accuracy: 0.8213
##  865/1875 [============>.................] - ETA: 0s - loss: 0.5107 - accuracy: 0.8220
##  945/1875 [==============>...............] - ETA: 0s - loss: 0.5112 - accuracy: 0.8223
## 1025/1875 [===============>..............] - ETA: 0s - loss: 0.5099 - accuracy: 0.8226
## 1105/1875 [================>.............] - ETA: 0s - loss: 0.5103 - accuracy: 0.8222
## 1185/1875 [=================>............] - ETA: 0s - loss: 0.5093 - accuracy: 0.8220
## 1266/1875 [===================>..........] - ETA: 0s - loss: 0.5100 - accuracy: 0.8218
## 1346/1875 [====================>.........] - ETA: 0s - loss: 0.5108 - accuracy: 0.8221
## 1426/1875 [=====================>........] - ETA: 0s - loss: 0.5100 - accuracy: 0.8221
## 1506/1875 [=======================>......] - ETA: 0s - loss: 0.5097 - accuracy: 0.8223
## 1586/1875 [========================>.....] - ETA: 0s - loss: 0.5083 - accuracy: 0.8224
## 1662/1875 [=========================>....] - ETA: 0s - loss: 0.5084 - accuracy: 0.8223
## 1742/1875 [==========================>...] - ETA: 0s - loss: 0.5085 - accuracy: 0.8221
## 1822/1875 [============================>.] - ETA: 0s - loss: 0.5083 - accuracy: 0.8223
## 1875/1875 [==============================] - 1s 633us/step - loss: 0.5093 - accuracy: 0.8218
## Epoch 8/10
## 
##    1/1875 [..............................] - ETA: 0s - loss: 0.5888 - accuracy: 0.8438
##   81/1875 [>.............................] - ETA: 1s - loss: 0.5060 - accuracy: 0.8310
##  160/1875 [=>............................] - ETA: 1s - loss: 0.5203 - accuracy: 0.8230
##  241/1875 [==>...........................] - ETA: 1s - loss: 0.5166 - accuracy: 0.8239
##  321/1875 [====>.........................] - ETA: 0s - loss: 0.5148 - accuracy: 0.8240
##  400/1875 [=====>........................] - ETA: 0s - loss: 0.5118 - accuracy: 0.8252
##  479/1875 [======>.......................] - ETA: 0s - loss: 0.5101 - accuracy: 0.8240
##  559/1875 [=======>......................] - ETA: 0s - loss: 0.5060 - accuracy: 0.8250
##  638/1875 [=========>....................] - ETA: 0s - loss: 0.5095 - accuracy: 0.8234
##  718/1875 [==========>...................] - ETA: 0s - loss: 0.5085 - accuracy: 0.8238
##  798/1875 [===========>..................] - ETA: 0s - loss: 0.5112 - accuracy: 0.8219
##  890/1875 [=============>................] - ETA: 0s - loss: 0.5076 - accuracy: 0.8231
##  969/1875 [==============>...............] - ETA: 0s - loss: 0.5075 - accuracy: 0.8238
## 1051/1875 [===============>..............] - ETA: 0s - loss: 0.5073 - accuracy: 0.8240
## 1132/1875 [=================>............] - ETA: 0s - loss: 0.5102 - accuracy: 0.8237
## 1212/1875 [==================>...........] - ETA: 0s - loss: 0.5093 - accuracy: 0.8239
## 1290/1875 [===================>..........] - ETA: 0s - loss: 0.5100 - accuracy: 0.8239
## 1392/1875 [=====================>........] - ETA: 0s - loss: 0.5117 - accuracy: 0.8241
## 1494/1875 [======================>.......] - ETA: 0s - loss: 0.5114 - accuracy: 0.8247
## 1574/1875 [========================>.....] - ETA: 0s - loss: 0.5111 - accuracy: 0.8250
## 1652/1875 [=========================>....] - ETA: 0s - loss: 0.5104 - accuracy: 0.8251
## 1754/1875 [===========================>..] - ETA: 0s - loss: 0.5100 - accuracy: 0.8253
## 1835/1875 [============================>.] - ETA: 0s - loss: 0.5103 - accuracy: 0.8249
## 1875/1875 [==============================] - 1s 639us/step - loss: 0.5104 - accuracy: 0.8250
## Epoch 9/10
## 
##    1/1875 [..............................] - ETA: 0s - loss: 0.5548 - accuracy: 0.7500
##   88/1875 [>.............................] - ETA: 1s - loss: 0.5042 - accuracy: 0.8295
##  167/1875 [=>............................] - ETA: 1s - loss: 0.5019 - accuracy: 0.8293
##  245/1875 [==>...........................] - ETA: 1s - loss: 0.5067 - accuracy: 0.8255
##  325/1875 [====>.........................] - ETA: 0s - loss: 0.5166 - accuracy: 0.8230
##  403/1875 [=====>........................] - ETA: 0s - loss: 0.5056 - accuracy: 0.8273
##  483/1875 [======>.......................] - ETA: 0s - loss: 0.4978 - accuracy: 0.8296
##  564/1875 [========>.....................] - ETA: 0s - loss: 0.5003 - accuracy: 0.8271
##  644/1875 [=========>....................] - ETA: 0s - loss: 0.5043 - accuracy: 0.8272
##  724/1875 [==========>...................] - ETA: 0s - loss: 0.5039 - accuracy: 0.8271
##  804/1875 [===========>..................] - ETA: 0s - loss: 0.5032 - accuracy: 0.8277
##  884/1875 [=============>................] - ETA: 0s - loss: 0.5041 - accuracy: 0.8279
##  963/1875 [==============>...............] - ETA: 0s - loss: 0.5050 - accuracy: 0.8265
## 1043/1875 [===============>..............] - ETA: 0s - loss: 0.5049 - accuracy: 0.8262
## 1123/1875 [================>.............] - ETA: 0s - loss: 0.5022 - accuracy: 0.8271
## 1202/1875 [==================>...........] - ETA: 0s - loss: 0.5024 - accuracy: 0.8272
## 1282/1875 [===================>..........] - ETA: 0s - loss: 0.5018 - accuracy: 0.8270
## 1361/1875 [====================>.........] - ETA: 0s - loss: 0.5023 - accuracy: 0.8265
## 1440/1875 [======================>.......] - ETA: 0s - loss: 0.5035 - accuracy: 0.8259
## 1520/1875 [=======================>......] - ETA: 0s - loss: 0.5023 - accuracy: 0.8267
## 1599/1875 [========================>.....] - ETA: 0s - loss: 0.5002 - accuracy: 0.8275
## 1677/1875 [=========================>....] - ETA: 0s - loss: 0.4992 - accuracy: 0.8278
## 1756/1875 [===========================>..] - ETA: 0s - loss: 0.5031 - accuracy: 0.8270
## 1836/1875 [============================>.] - ETA: 0s - loss: 0.5018 - accuracy: 0.8273
## 1875/1875 [==============================] - 1s 639us/step - loss: 0.5010 - accuracy: 0.8274
## Epoch 10/10
## 
##    1/1875 [..............................] - ETA: 0s - loss: 0.4616 - accuracy: 0.7500
##   80/1875 [>.............................] - ETA: 1s - loss: 0.4622 - accuracy: 0.8285
##  159/1875 [=>............................] - ETA: 1s - loss: 0.4687 - accuracy: 0.8320
##  238/1875 [==>...........................] - ETA: 1s - loss: 0.4728 - accuracy: 0.8309
##  318/1875 [====>.........................] - ETA: 0s - loss: 0.4762 - accuracy: 0.8305
##  396/1875 [=====>........................] - ETA: 0s - loss: 0.4870 - accuracy: 0.8271
##  476/1875 [======>.......................] - ETA: 0s - loss: 0.4879 - accuracy: 0.8267
##  556/1875 [=======>......................] - ETA: 0s - loss: 0.4883 - accuracy: 0.8267
##  631/1875 [=========>....................] - ETA: 0s - loss: 0.4895 - accuracy: 0.8270
##  710/1875 [==========>...................] - ETA: 0s - loss: 0.4849 - accuracy: 0.8288
##  790/1875 [===========>..................] - ETA: 0s - loss: 0.4814 - accuracy: 0.8304
##  869/1875 [============>.................] - ETA: 0s - loss: 0.4805 - accuracy: 0.8304
##  949/1875 [==============>...............] - ETA: 0s - loss: 0.4864 - accuracy: 0.8292
## 1029/1875 [===============>..............] - ETA: 0s - loss: 0.4867 - accuracy: 0.8291
## 1108/1875 [================>.............] - ETA: 0s - loss: 0.4877 - accuracy: 0.8291
## 1187/1875 [=================>............] - ETA: 0s - loss: 0.4877 - accuracy: 0.8295
## 1266/1875 [===================>..........] - ETA: 0s - loss: 0.4905 - accuracy: 0.8288
## 1345/1875 [====================>.........] - ETA: 0s - loss: 0.4918 - accuracy: 0.8285
## 1423/1875 [=====================>........] - ETA: 0s - loss: 0.4909 - accuracy: 0.8289
## 1502/1875 [=======================>......] - ETA: 0s - loss: 0.4925 - accuracy: 0.8285
## 1582/1875 [========================>.....] - ETA: 0s - loss: 0.4927 - accuracy: 0.8284
## 1662/1875 [=========================>....] - ETA: 0s - loss: 0.4922 - accuracy: 0.8286
## 1742/1875 [==========================>...] - ETA: 0s - loss: 0.4919 - accuracy: 0.8288
## 1821/1875 [============================>.] - ETA: 0s - loss: 0.4941 - accuracy: 0.8284
## 1875/1875 [==============================] - 1s 642us/step - loss: 0.4932 - accuracy: 0.8286
## <tensorflow.python.keras.callbacks.History object at 0x000000006B19C198>

Training history

history = model.history.history
history
## {'loss': [3.0892131328582764, 0.7089070677757263, 0.6428943872451782, 0.5873007774353027, 0.5490626096725464, 0.5253157615661621, 0.5092673897743225, 0.5103991031646729, 0.5009756684303284, 0.4932428300380707], 'accuracy': [0.6904500126838684, 0.7346833348274231, 0.7501500248908997, 0.7821999788284302, 0.8067333102226257, 0.8162833452224731, 0.8218166828155518, 0.8250333070755005, 0.8274000287055969, 0.8286499977111816]}

For visualization, using R

py$history %>% 
    as_tibble() %>%
    unnest(loss, accuracy) %>%
    rowid_to_column() %>%
    pivot_longer(-rowid) %>%
    ggplot(aes(rowid, value, color = name)) +
    geom_line() +
    geom_point() +
    labs(title = "Training Accuracy")
## Warning: unnest() has a new interface. See ?unnest for details.
## Try `df %>% unnest(c(loss, accuracy))`, with `mutate()` if needed

Test accuracy

test_loss, test_acc = model.evaluate(test_images,  test_labels, verbose=2)
## 313/313 - 0s - loss: 0.5617 - accuracy: 0.8131

Finally, make predictions

probability_model = tf.keras.Sequential([model, tf.keras.layers.Softmax()])
predictions = probability_model.predict(test_images)
predictions[1]
## array([1.0913470e-06, 5.5121142e-17, 8.4501761e-01, 2.6197949e-05,
##        5.6214958e-02, 9.4797621e-37, 9.8740146e-02, 0.0000000e+00,
##        3.9651447e-08, 0.0000000e+00], dtype=float32)
np.argmax(predictions[1])
## 2
np.max(predictions[1])
## 0.8450176
class_names[np.argmax(predictions[1])]
## 'Pullover'
plt.figure()
plt.imshow(test_images[1])
plt.colorbar()
## <matplotlib.colorbar.Colorbar object at 0x000000006C4B8F60>
plt.grid(False)
plt.show()

print("Next blog will be on setting up the loca GPU")
## Next blog will be on setting up the loca GPU