Recent developments in machine learning have ushered in an era of deep neural networks, or DNNs for short. Neural networks are computational frameworks that apply concepts from neuroscience (the study of how our brains work) to make intelligent decisions.
By introducing neurons into their models, researchers have found it is possible to teach these systems to learn complex patterns without any pre-defined rules. This is called unsupervised training, as the system learns internal representations of information by itself!
With the recent explosion of interest in AI and autonomous vehicles, there has been a need for more advanced computer vision algorithms. Most companies now use pretrained neural network models trained on large datasets to boost performance on specific tasks such as object recognition or face detection.
Pretrained models come with source code written in Python’s popular open source framework, Keras. Using this software, you can easily add some layers and train your model using the built-in tools. In this article, we will be going through all the steps needed to get started with Keras for CNNs, which are one of the most common types of DNN architectures.
If you would like to dive deeper, check out my previous articles about other keras structures like recurrent networks and gated units. For more inspiration, take a look at some example projects here and read their documentation if necessary. I also wrote an ebook full of practical applications using Keras that go over many different settings. You can find it here.
Learn how to set up a deep learning project
Setting up your environment is one of the most important things you can do to ensure your models work well and perform well. This article will go over all of the basics of what tools you need, as well as some key steps for ensuring your model performs well!
If you are new to neural networks or machine learning in general, this may seem like a lot to take in, but it does not require much expertise. Most gurus in the field share these basic concepts, so there are many free resources available online.
There are several ways to start practicing deep learning with keras. One way is to use the implementation provided here- https://github.com/awslabs/keras-demos.
This link has two different projects that have been written using Theano (a python library used to create efficient mathematical functions) as the backend. These projects include an image classification example and word prediction example.
The difference between the 2 projects is which layers they add to the network, along with the optimizer being used. Both are great starting points if you are just getting into the realm of neural networks!
Here we will be going over the second project, which predicts whether a sentence is positive or negative about a topic.
Choose your data set
A deep learning model can work at a very basic level where it looks for patterns in large datasets of pictures, videos or sounds. Taking this approach is called recognition-based learning because the models learn how to recognize what you give them.
A more advanced version of recognition-based learning is when the model learns how to detect something specific within those images, videos or sounds. This is referred to as detection-based learning.
Detecting objects within images is an example of detection-based learning. For instance, if I were to show you a picture of a dog and ask you to find all the dogs in the image, then my computer algorithm would use that information to create a detector that identifies all dogs.
Using such detectors directly isn’t practical yet, but researchers are working on ways to apply these concepts to real applications.
The first thing you will need to do in order to use deep learning for image classification is to prepare your dataset. You will want to have at least half a million images or more, both with and without labels.
It’s not hard to get lots of unlabeled images online these days. All it takes is picking through pictures looking for people and other recognizable features such as cars or buildings.
Labels can be difficult to find too unless you are very familiar with an area or field. If you are able to acquire some, you can look up how to add them to your dataset.
There are many free resources available to help you along this process. Some good ones include Google Cloud Platform, Amazon Web Services, Microsoft Azure, and Wikipedia.
General tips: When trying to organize your datasets, remember that variety is important! Having several different types of content will make your model more versatile.
Build your neural network
A deep learning model is made up of several different layers that are connected together. Each layer works as an input for the next, processing the information more thoroughly as it goes.
The inner most layer is called the neuron layer or activation function layer because it activates the next layer. In other words, it determines whether to send a signal down the next link in the network.
Typically, these layers are divided into two categories: perception-related layers and working memory storage layers. Perception-related layers try to identify specific features of what you want to learn, while working memory storage layers remember past lessons so that you do not have to start from scratch every time.
By having both types of layers, a deep learning algorithm can achieve very advanced results. For example, there may be a layer that looks at a picture and identifies animals, or a layer that learns how to recognize shapes.
There are many ways to build each individual layer in a neural net, but one of the most common strategies is using a convolutional neural network (ConvNet). What makes ConvNets special is their use of small filters to add onto the layer’s input.
A filter is just part of the layer that slides across the image looking for patterns or specific characteristics. Once it finds something interesting, it adds another portion of the layer’s input and moves on. This process repeats until all parts of the image have been analyzed by the network.
Improve your neural network
One of the most important parts of developing any kind of machine learning model is improving your neural net! This can be done through different strategies, but one of the best is by adding more layers or changing the number of neurons in an already layer.
There are many ways to do this with keras. There are several tools that can help you manage the settings for your neural networks, such as TensorFlow Hub which has pre-trained models for almost every task imaginable.
By having these ready made nets, it saves you some time off setting up new ones from scratch. That way you can quickly test out what types of architectures work well on your data!
Another option is using state of the art algorithms like residual networks or convolutional networks to name a few. These have become increasingly popular because they seem to perform nearly as well if not better than other networks while requiring less computational power to train.
Test and evaluate your network
A common beginner’s mistake is trying to train their model before it is fully tested on an external data set or its internal test sets are complete. This can be very expensive!
By testing your model early, you may end up wasting time re-training your neural net because it doesn’t work properly. Or worse, you could end up throwing away all of your hard work due to a fundamental weakness in your model!
The best way to avoid this problem is by using a technique called “transfer learning.
Use transfer learning
One of the key concepts in deep learning is using pre-trained models. A model that has been trained on similar data can be used as a starting point for creating new models.
A pre-trained model is a neural network that has been tuned to perform specific tasks, usually through training with computer vision datasets such as ImageNet or MNIST.
By transferring the knowledge from this already-effective model, you can start using it to solve different problems. For example, by applying an already good convolutional layer to your own problem domain, you can begin solving your initial problem more effectively.
There are many ways to use pretrained networks in keras. This article will go over two easy ones: sequential or batch normalization and weight initialization. Both of these strategies can help your model learn faster and better!
To see how quickly they work, check out our quick experiment here: https://www.onemoresense.com/deep-learning-with-keras/.
Sequential or batch normalization
In sequential (or time) dependent problems like natural language processing or speech recognition, we have to deal with lots of information rapidly.
For instance, when trying to identify the meaning of a word, you do not wait until the end to determine what the word means.
Combining neural networks
A very important concept when it comes to developing convolutional neural networks (ConvNets) is combining different layers together into what’s called an interconnected network.
There are many ways to combine new layers with old, but one of the most common strategies is stacking. Stacking refers to putting a newer layer above an older layer as a head. The head can be any type of layer- for example, say you wanted to design a classifier that could determine if something was either dog or cat. You would start by designing a softmax classification layer which predicts classes, then put a perceptron layer on top of that to identify whether a sample is a dog or a cat.
So instead of having only a perceptron layer, we have two! This way you get more information about your samples because you have both prediction and input layers. It is similar to how humans work: we have our skin, muscles, nerves, and bones, all working together to perceive external stimuli.
By doing this, you get better accuracy and overall performance in the model.