import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
import sklearn
import pandas as pd
import os
import sys
import time
import tensorflow as tf
from tensorflow import keras
os.environ["CUDA_VISIBLE_DEVICES"] = "0"
print(tf.__version__)
print(sys.version_info)
for module in mpl, np, pd, sklearn, tf, keras:
print(module.__name__, module.__version__)
fashion_mnist = keras.datasets.fashion_mnist
(x_train_all, y_train_all), (x_test, y_test) = fashion_mnist.load_data( )
x_valid, x_train = x_train_all[:5000], x_train_all[5000: ]
y_valid, y_train = y_train_all[:5000], y_train_all[5000: ]
print(x_valid.shape, y_valid.shape )
print(x_train.shape, y_train.shape )
print(x_test.shape, y_test.shape )
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
x_train_scaled = scaler.fit_transform(
x_train.astype(np.float32).reshape(-1, 1)).reshape(-1, 28, 28,1)
x_valid_scaled = scaler.transform(
x_valid.astype(np.float32).reshape(-1, 1)).reshape(-1, 28, 28,1)
x_test_scaled = scaler.transform(
x_test.astype(np.float32).reshape(-1, 1)).reshape(-1, 28, 28,1)
model = keras.models.Sequential()
model.add(keras.layers.Conv2D(filters=32,kernel_size =3,padding = 'same',activation= 'relu',input_shape=(28,28,1)))
model.add(keras.layers.Conv2D(filters=32,kernel_size =3,padding = 'same',activation= 'relu'))
model.add(keras.layers.MaxPool2D(pool_size = 2))
model.add(keras.layers.Conv2D(filters=64,kernel_size =3,padding = 'same',activation= 'relu'))
model.add(keras.layers.Conv2D(filters=64,kernel_size =3,padding = 'same',activation= 'relu'))
model.add(keras.layers.MaxPool2D(pool_size = 2))
model.add(keras.layers.Conv2D(filters=128,kernel_size =3,padding = 'same',activation= 'relu'))
model.add(keras.layers.Conv2D(filters=128,kernel_size =3,padding = 'same',activation= 'relu'))
model.add(keras.layers.MaxPool2D(pool_size = 2))
model.add(keras.layers.Flatten())
model.add(keras.layers.Dense(128,activation='relu'))
model.add(keras.layers.Dense(10, activation="softmax"))
model.compile(loss="sparse_categorical_crossentropy",
optimizer = "sgd",
metrics = ["accuracy"])
print(model.layers)
"""output:
[, , , , , , , , , , , ]
"""
print(model.summary())
"""output:
Model: "sequential"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv2d (Conv2D) (None, 28, 28, 32) 320
_________________________________________________________________
conv2d_1 (Conv2D) (None, 28, 28, 32) 9248
_________________________________________________________________
max_pooling2d (MaxPooling2D) (None, 14, 14, 32) 0
_________________________________________________________________
conv2d_2 (Conv2D) (None, 14, 14, 64) 18496
_________________________________________________________________
conv2d_3 (Conv2D) (None, 14, 14, 64) 36928
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 7, 7, 64) 0
_________________________________________________________________
conv2d_4 (Conv2D) (None, 7, 7, 128) 73856
_________________________________________________________________
conv2d_5 (Conv2D) (None, 7, 7, 128) 147584
_________________________________________________________________
max_pooling2d_2 (MaxPooling2 (None, 3, 3, 128) 0
_________________________________________________________________
flatten (Flatten) (None, 1152) 0
_________________________________________________________________
dense (Dense) (None, 128) 147584
_________________________________________________________________
dense_1 (Dense) (None, 10) 1290
=================================================================
Total params: 435,306
Trainable params: 435,306
Non-trainable params: 0
_________________________________________________________________
None
Process finished with exit code 0
"""
logdir = "cnn-selu-callbacks"
if not os.path.exists(logdir):
os.mkdir(logdir)
output_model_file = os.path.join(logdir ,"fashion_mnist_model.h5")
callbacks = [
keras.callbacks.TensorBoard(logdir) ,
keras.callbacks.ModelCheckpoint(output_model_file,
save_best_only = True),
keras.callbacks.EarlyStopping(patience=5, min_delta=1e-3) ,
]
history = model.fit(x_train_scaled, y_train, epochs=10,
validation_data=(x_valid_scaled, y_valid),
callbacks = callbacks)
def plot_learning_curves(history):
pd.DataFrame(history.history).plot(figsize=(8 ,5))
plt.grid(True)
plt.gca().set_ylim(0 ,3)
plt.show()
plot_learning_curves(history)
model.evaluate(x_test_scaled ,y_test)
"""output:
1s 109us/sample - loss: 0.1774 - accuracy: 0.8934
"""
