Fashion MNIST
Set of images of Fashion Items
Classification - Predicting a categorical variables (Buckets, Class, Categories)
import numpy as np
import pandas as pd
import keras
import matplotlib.pyplot as plt
%matplotlib inline
import vis
from keras.datasets import fashion_mnist
(x_train, y_train), (x_test, y_test) = fashion_mnist.load_data()
x_train.shape, y_train.shape, x_test.shape, y_test.shape
labels = vis.fashion_mnist_label()
labels
x_train[0].shape
vis.imshow(x_train[0])
np.unique(y_train)
vis.imshow_unique(x_train, y_train, labels)
vis.imshow_sprite(x_train[:500])
x_train.shape
Input
x_train = x_train/255
x_test = x_test/255
Output
from keras.utils import to_categorical
y_train_class = to_categorical(y_train, num_classes=10)
y_test_class = to_categorical(y_test, num_classes=10)
y_train_class.shape, y_test_class.shape
y_train_class[:10]
from keras.models import Sequential
from keras.layers import Dense, Flatten
model = Sequential()
model.add(Flatten(input_shape=(28,28)))
model.add(Dense(units = 40, activation="relu"))
model.add(Dense(units=10, activation="softmax"))
model.summary()
model.compile(loss="categorical_crossentropy", optimizer="sgd", metrics=["accuracy"])
%%time
output = model.fit(x_train, y_train_class, epochs=10, verbose=1,
validation_split=0.2)
vis.metrics(output.history)
score = model.evaluate(x_test, y_test_class, verbose = 1)
print("Test Loss", score[0])
print("Test Accuracy", score[1])
predict_classes = model.predict_classes(x_test)
actual_classes = y_test
pd.crosstab(actual_classes, predict_classes)
# Probabilities
probs = model.predict_proba(x_test)
i = 4
vis.imshow(x_test[i], labels[y_test[i]]) | vis.predict(probs[i], y_test[i], labels)
x_train.shape
x_train_conv = x_train.reshape(60000, 28, 28, 1)
x_test_conv = x_test.reshape(10000, 28, 28, 1)
x_train.shape, y_train.shape, x_test.shape, y_test.shape
Conv2D??
from keras.layers import Conv2D, MaxPooling2D
cnn = Sequential()
cnn.add(Conv2D(filters = 30, kernel_size=(3,3), activation="relu", input_shape=(28,28,1)))
cnn.add(MaxPooling2D(pool_size=(3,3)))
cnn.add(Flatten())
cnn.add(Dense(40, activation="relu"))
cnn.add(Dense(10, activation="softmax"))
cnn.summary()
cnn.compile(loss="categorical_crossentropy", optimizer="sgd", metrics=["accuracy"])
%%time
output_cnn = cnn.fit(x_train_conv, y_train_class, epochs=5, validation_split=0.2, verbose=1)
vis.metrics(output_cnn.history)