Your first deep neural network in less than 5 minutes
Big picture: Train a neural net with the keras framework to classify images of circles and squares:
Getting started
1. Install libraries
Go ahead and install everything you need (works on Linux, Mac, and Windows).
2. Train
Run python keras_train.py t
to train your network. This might take a minute to finish.
3. Classify
Run python keras_train.py c
to classify your images. Press spacebar
to see the next image and press q
to quit.
Understanding
Training
Here we create our data using OpenCV: images of cirles and squares with random dimensions. →
if cls == 0:
cv2.circle(img, (n_cols/2, n_rows/2), random.randint(10, n_cols/2 - 10), (255), -1)
elif cls == 1:
side = random.randint(10, n_cols/2 - 10)
cv2.rectangle(img, (n_cols/2 - side, n_cols/2 - side), (n_cols/2 + side, n_cols/2 + side), (255), -1)
Then we train our neural net with the created data. →
model.train_on_batch(imgs_train, label_train)
Testing
Every couple iterations we test our neural net and calculate it's accuracy up to this point. →
score = model.test_on_batch(imgs_test, labels_test)
print "Accuracy:{0:.0f}%\n".format( score[1]*100)
The Net
Before we can train and classify we need to create our neural net. →
model = Sequential()
Then we just .add
the layers we want to have in our neural net. In other words, define our neural net architecture. →
model.add(Convolution2D(16, 5, 5, border_mode='valid', input_shape=(n_rows, n_cols, 1)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Convolution2D(32, 5, 5))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(128))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(n_classes))
model.add(Activation('softmax'))
Here's just a short description of the layers used in this neural net:
- Convolution2d → extracting local image information
- Activation → evaluate information relevance
- MaxPooling2D → image compression
- Dropout → avoiding bias
- Flatten → reformat
- Dense → evaluate global image information (fully connected layer)
And last but not least, this defines how our neural net should learn, which we need for training: →
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
If this tutorial got you excited about deep learning I recommend you start of looking into this tutorial or the keras documentation. For those of you who have more time and would like a good read here's a good book .
About
This tutorial was created by Amelie Froessl, an intern and now deep-learning-expert at Mashgin.
At Mashgin, we're creating better human experiences through visual automation. We work on lots of cool stuff in many industries. If you're interested, drop us a line or check out our hiring page.
License
This tutorial is licensed under the MIT License. See LICENSE for more details. Feel free to clone, fork, or use any parts of the tutorial as long as they are attributed.