Improving results with neural networks

Let's do a quick teaser of how good we could get if we were to use some fancy deep neural networks (DNNs), and give you a sneak peek of what is to come in the future chapters of this book.

If we use the following "not quite so deep" neural network, which takes about 2 minutes to train on my laptop (where it takes 1 minute to train the SVM), we get an accuracy of around 0.964!

Here is a snippet of the training method (you should be able to plug it into the preceding code, and play with some parameters to see if you could do it later):

def train_tf_model(X_train, y_train):
model = tf.keras.models.Sequential([
tf.keras.layers.Conv2D(20, (8, 8),
input_shape=list(UNIFORM_SIZE) + [3],
activation='relu'),
tf.keras.layers.MaxPooling2D(pool_size=(4, 4), strides=4),
tf.keras.layers.Dropout(0.15),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(64, activation='relu'),
tf.keras.layers.Dropout(0.15),
tf.keras.layers.Dense(43, activation='softmax')
])

model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
model.fit(x_train, np.array(train_labels), epochs=10)
return model

The code uses the high-level Keras API of TensorFlow (we will see more of this in the upcoming chapters) and creates a neural network with the following:

  • Convolutional layer with max pooling that is followed by a dropoutwhich is there only during the training.
  • Hidden Dense layer that is followed by a dropoutwhich is there only during the training.
  • Final Dense layer that spits out the final result; it should identify which class (among the 43 classes) the input data belongs to.

Note that we only have one convolutional layer, which is very similar to HOG featurize. If we were to add more convolutional layers, the performance would improve quite a lot, but let's leave that for the next chapters to explore.

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
3.147.80.94