How do I practice what I learned in your course?

Common question.

You’ve taken one of my courses.

So many equations!

So much programming!

But what do you do with it?

How can you practice what you’ve learned?

This is a question I’ve answered time and time again since I started creating my courses. I was always surprised that this question needed to be answered.

To answer this question, you must put on your “adult hat”.

Sorry to say, but too many of you kiddos these days are not self-sufficient. That is, you lack proper “adult” approaches to life’s conundrums.

Here are some (hopefully obvious) solutions. Outline first and then description later.

1) Implementation was already your homework

2) Be able to do the derivations yourself

3) Apply what you learned to your own data

4) Modify the code to incorporate your own ideas

5) Can you come up with the code using only the documentation? (student requested)

6) Why didn’t you ask us to do XYZ? (student requested)


Implementation was already your homework

In many of my courses, we are learning about a machine learning algorithm.

In those courses, it has been explicitly stated that your homework (i.e. what you “do” with yourself while taking the course) is to implement those algorithms from scratch, using only the theory / description of the algorithm.

The problem is, students would take these courses, watch all the videos straight through, maybe run the Python files I provided, and then ask, “so uhhh… what do I do again?”

Agh! You just did exactly what I told you not to do!

In these courses, we always proceed from “theory” to “code”.

1) Theory lectures: describe the intuition behind the algorithm, the steps of the algorithm, derive any necessary formulas or rules, etc.

2) Code lectures: implement the algorithm in Python / some other language.

#2 is the solution to the exercise. So if you just watch the lectures straight through, you’re cheating by looking at the solution to the exercise without trying it yourself first.


Be able to do the derivations yourself

Given a blank sheet of paper, can you derive the rules of backpropagation?

Can you derive PCA?

Can you derive the Gaussian Mixture Model update rule?

Truly understanding the derivations means that the answer to these questions is “yes”.

Many people forget that you’re not taking a course just to learn how to plug your data into 3 lines of code.

That’s boring.

You can learn that from going to the scikit-learn documentation and reading it for 5 minutes.

Why do you need a course to learn that?

No, you take a course because you want to actually understand.

Do you think the guy who invented transformers was sitting there plugging into scikit-learn all day?

Be real with yourself.

Please note:

There is a big difference between doing a derivation given only a blank sheet of paper, and “doing” a derivation by copying what you see in the course lectures.

For some of you, it needs to be said (for others, it’s obvious):

You might “believe” that you can do a derivation yourself after you watched a video.

You might proclaim “I just saw how it’s done, of course I could do that myself!”

In practice, this is false.

Actually doing something is not the same as merely believing that you can do it.

I know a lot of you will read this and protest, believing you are more talented and intelligent than everyone else. But you must ask yourself: if everything is so “easy” for you, then why are you so frustrated?


Apply what you learned to your own data

For some of my courses, the above advice doesn’t apply.

For instance, my Tensorflow 2 course is all about how to use Tensorflow 2, which is a deep learning library for building neural networks.

In these courses, you’re not learning algorithms.

You might learn a little bit about how the underlying algorithms work, but it’s mainly intuition, not in-depth.

In these courses (learning how to use libraries), it’s mostly about learning syntax.

There are still some “concepts” to be learned, but library syntax is not fundamental in the same way that an algorithm is.

For example, TF2 and PyTorch are just different deep learning libraries.

It’s not as if one is “more right” than the other, they are just different.

The syntax is not tied to some deep fundamental truth about deep learning. It’s just a particular design created by the people who developed those libraries.

In these courses, you can’t take the approach described in #1, because there’s no way you’d implement anything from scratch without someone (i.e. me) showing you the syntax first.

Sometimes (surprisingly) students get confused about this.

You might suggest: “What if you don’t teach us the syntax, but instead, have us go search for it ourselves?”

More on this later, but I think this is a bit silly. What’s the point of taking my course if you’re just going to learn the syntax from elsewhere?

In any case, implementing-from-scratch doesn’t work here. So what can you do instead?

Well, I’m sure you joined the course for a reason.

For instance, you’re a computational biologist, and you want to learn about deep learning so you can apply it to genetic data.

After taking my Tensorflow 2 course, now you can!

Remember, you don’t need me to remind you to do this.

You’re a self-sufficient adult.

I’m giving you a tool and showing you how you use it.

Once I’ve done that, what you do with your new skills is up to you.

This applies not just to biologists, but financial analysts, climate researchers, online advertisers, any field of work!

Assuming you have a job that has some need for data science or machine learning, you now need to combine your domain knowledge with the ML knowledge you just learned, in order to build something useful for your company or clients.

Now you might object to this.

If, for example, you’re a biologist, you might complain: “but you didn’t show us how to apply deep learning to my genetics data in your class”.

Well of course I didn’t silly! That’s your data! I don’t know about your data!

Luckily, the solution to this is simple. It’s my famous rule: “all data is the same”.

This rule states that no matter where your data comes from, whether that’s biology, finance, or online advertising, the code (i.e. what you learned in an ML course) does not change.

More on this here:

All Data is the Same

Note: this approach applies to more theoretical courses too.

For instance, suppose you just took my course on Naive Bayes.

Yes, it’s “in-depth”, meaning that you learn the theory behind Naive Bayes and how to implement it from scratch.

But you can also then go ahead and apply it to datasets you’re personally interested in as further exercise.


One of the annoying things I deal with is when students blame me for the lack of “opportunities” to apply what they’ve learned.

It’s like… wait a minute… why am I responsible for you not asking yourself what you’re interested in?

How can I tell you what to be interested in?

You have to figure that out for yourself!

You want to apply an algorithm to crypto trading? Great! Go do that!

You want to apply an algorithm to discover new cancer drugs? Great! Go do that!

I can’t tell you what to be interested in. That’s your job!


“What if I’m not interested in anything?”, you may ask.

That’s fine too.

If you came to the course only because you’re interested in ML and you wanted to see what it’s all about, great.

Then you need not go any further.

If you’d like to apply what you learned to other datasets, that’s easy.

And again, you don’t need my help nor my instructing you to do it to get started.

There are plenty of resources for datasets out there, like Kaggle and the UCI Machine Learning Repository.


Modify the code to incorporate your own ideas

Another easy way to get practice with what you’ve learned is to modify the code to incorporate your own ideas.

Students often have questions like this on the Q&A.

“What if I changed X to Y?”

“Wouldn’t it be better if we used X instead of Y?”

“Why is X needed? What if we left it out?”

For many (but not all) of these questions, your answer is as good as mine, because your ideas are unique to you. Only you have thought of them.

This is the source of another one of my famous rules:

Machine learning is experimentation, not philosophy.

It’s generally not useful to use your mind to guess what a computer program will do.

Instead, it’s better to simply run the computer program, and observe the output.

Trying to do the former is equivalent to trying to run a computer program using your mind.

Our minds were not built for running computer programs.

But you know what is? Computers!

You have one, use it.


Can you come up with the code using only the documentation? (student requested)

This is a weird one that came up in my Tensorflow 2 course.

The student didn’t like my suggested exercises, and thought it would be better if I instructed him to come up with the code using the documentation alone.

The fatal flaw here is that the student doesn’t understand his own agency.

If you want to do this, what’s stopping you?

Why do you need to wait for me to tell you what to do?

And if you disagree with what I’ve told you to do and you want to do something else, why aren’t you doing that instead?

Again, lack of self-sufficiency and “adult” mentality.

I have a more detailed video about this case here:


Why didn’t you ask us to do XYZ?

Sometimes, students ask me: “why didn’t you ask us to do XYZ?”

XYZ being whatever task they think is interesting.

Of course, this is unique to the individual.

Again, this is a great example of not understanding your own agency.

If you want to do an exercise and you thought of one yourself, that’s great! Do it!

Why do you need to ask my permission?

Furthermore, why do you assume that your great exercise should be imposed on everyone else?

To me, this is a form of entitlement / self-importance / narcissism.

“I just came up with this great idea. You should be thanking me for it! You should be updating your course to include it for all other students! If you don’t, then clearly it’s just a 1 star course!”

Sorry to break it to you: but your ideas aren’t that important.

If you’re very excited about something, then great, but keep it to yourself.

There’s no reason to impose it on others.

You don’t need my permission, nor do you need me to tell you how wonderful your idea is, and you don’t need me to serve your ego by adding your “great” idea to my course.

However, this is another great point about how to practice what you’ve learned in my courses.

If you’re itching for more practice, and you’ve already done the practice exercises suggested, then consider why you’re not satisfied yet.

Ask yourself what else you’re looking for, and devise exercises to help you find it.

This in fact, can be considered an exercise in itself.

And after devising such exercises, don’t pretend the course didn’t give you what you needed.

The course actually gave you exactly what you needed: the knowledge necessary to devise those exercises.

Without that knowledge, you wouldn’t have been able to complete the exercise of “inventing a new exercise”.