# Problem in implementing CNN

I am using the fashion MNIST dataset to try to work this out:

I am using the data from the links:

I use the code to open the dataset:

def load_mnist(path, kind='train'):
import os
import gzip
import numpy as np

"""Load MNIST data from path"""
labels_path = os.path.join(path,
'%s-labels-idx1-ubyte.gz'
% kind)
images_path = os.path.join(path,
'%s-images-idx3-ubyte.gz'
% kind)

with gzip.open(labels_path, 'rb') as lbpath:
labels = np.frombuffer(lbpath.read(), dtype=np.uint8,
offset=8)

with gzip.open(images_path, 'rb') as imgpath:
images = np.frombuffer(imgpath.read(), dtype=np.uint8,
offset=16).reshape(len(labels), 784)

return images, labels

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

data_dir = './'
X_train, y_train = load_mnist('D:\book', kind='train')
X_test, y_test = load_mnist('D:\book', kind='t10k')

X_train = X_train.astype(np.float32) / 256.0
X_test = X_test.astype(np.float32) / 256.0


I am trying to build a Convolutional Neural Network with the following architecture: - Convolutional Layer with 32 filters with size of 3x3 - ReLU activation function - 2x2 MaxPooling - Convolutional Layer with 64 filters with size of 3x3 - ReLU activation function - 2x2 MaxPooling - Fully connected layer with 512 units and ReLU activation function - Softmax activation layer for output layer For 100 epochs using the SGD optimizer

My Code is:

X_train = X_train.reshape([60000, 28, 28, 1])
X_train = X_train.astype('float32') / 255.0
X_test = X_test.reshape([10000, 28, 28, 1])
X_test = X_test.astype('float32') / 255.0
model = Sequential()
model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=[28,28,1]))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.summary()
y_train = keras.utils.np_utils.to_categorical(y_train)
y_test = keras.utils.np_utils.to_categorical(y_test)
model.compile(optimizer='sgd', loss='categorical_crossentropy', metrics=['accuracy'])
model.fit(X_train, y_train, epochs=100)


But it is taking a lot of time for execution. It is like 30 minutes per epoch. I think I am doing something wrong in my code. Can someone help me figure that out?

You should also be able reduce the number of epochs you train for. In the .fit() method you can add your test data so you can see how well the model does on the test data at the end of each epoch. This can help you see when the model starts over fitting.