This is a thread about one of the most powerful tools that make possible that knuckleheads like me achieve state-of-the-art Deep Learning results on our laptops.
🧵👇
Deep Learning is all about "Deep" Neural Networks.
"Deep" means a lot of complexity. You can translate this to "We Need Very Complex Neural Networks." See the attached example.
The more complex a network is, the slower it is to train, and the more data we need to train it.
👇
To get state-of-the-art results when classifying images, we can use a network like ResNet50, for example.
It takes around 14 days to train this network with the "imagenet" dataset (1,300,000+ images.)
14 days!
That's assuming that you have a decent (very expensive) GPU.
👇
This, of course, is out of reach for people like you and me. We wouldn't be able to afford the cost of constantly experimenting with deep networks.
Cost and time are both ridiculous.
Thankfully, we don't have to. We have "Transfer Learning."
👇
Let's get the boring definition out of the way:
▫️Transfer learning is a method where we can reuse a model that was developed for one task as the starting point for another task.
What does this mean?
We don't need to train our huge deep network from scratch!
👇
Imagine we want to build a model to recognize a few animal species.
To get decent results, we'd need to train that model with thousands (millions) of images. Just think about all the information that's packed on an image! There's no way to learn without many, many images.
👇
Thanks to Transfer Learning we don't have to!
ResNet50 was trained on 1.3M images, right? These images are not only animals, but they are a good representation of the world.
After training, ResNet50 knows about shapes, colors, shadows, lines, borders, etc.
👇
All of that information is already encoded in that model and we don't need to learn it again.
Instead, we can use that model, modify its output, and train a portion of it to learn the specific animal species from our dataset.
We will be "inheriting" all its knowledge.
👇
This concept is extremely powerful.
Today, we have big organizations training these base models with huge datasets, and the rest of the industry can simply transfer all of that knowledge and focus on more specific problems.
We don't need 14 days to train anymore!
👇
Throughout this thread, I used ResNet50 as an example. Here are more architectures:
When I heard about Duck Typing for the first time, I had to laugh.
But Python 🐍 has surprised me before, and this time was no exception.
This is another short thread 🧵 that will change the way you write code.
👇
Here is the idea behind Duck Typing:
▫️If it looks like a duck, swims like a duck, and quacks like a duck, then it probably is a duck.
Taking this to Python's world, the functionality of an object is more important than its type. If the object quacks, then it's a duck.
👇
Duck Typing is possible in dynamic languages (Hello, JavaScript fans 👋!)
Look at the attached example. Notice how "Playground" doesn't care about the specific type of the supplied item. Instead, it assumes that the item supports the bounce() method.
I had a breakthrough that turned a Deep Learning problem on its head!
Here is the story.
Here is the lesson I learned.
🧵👇
No, I did not cure cancer.
This story is about a classification problem —specifically, computer vision.
I get images, and I need to determine the objects represented by them.
I have a ton of training data. I'm doing Deep Learning.
Life is good so far.
👇
I'm using transfer learning.
In this context, transfer learning consists of taking a model that was trained to identify other types of objects and leverage everything that it learned to make my problem easier.
This way I don't have to teach a model from scratch!