[Discussion] How to do fast.ai + Few advices from interviews

Hi Everyone,
This has been a theme that has been discussed multiple times on the forums and I believe it might be a good time to start a discussion for the same for our future peers here.

A few of you might recognise my blog (which acc to metrics is one my most famous ones): "How not to do fast.ai (Or any ML MOOC). So I’m the wrong person to share advices on how to approach the MOOC.

Instead, I’ve been interviewing much wiser and smarter people where we discuss this intensely and seasoned fast.ai family members share many advices there:

Personally, I’ll commit to sharing materials as well. I’ve (almost) finalised my plans to take the course in person and my great friend @arora_aman and myself were discussing at length on how to create materials around the course once I get to meet him (He’s really great at the same, so I’m really excited about)

I invite any/all discussions or suggestions around what worked for you-lately I’ve started working out (believe it or not :smiley: ) and I’ve realised some form of workouts work better for someone and not everyone. I think it’s the same for the fast.ai course.

A family person might enjoy listening to Jeremy’s audio, a bachelor with a distracted mind like myself needs a video and a notebook open to pay attention.

Please share your ideas/suggestions.

Thanks & Regards,
Sanyam Bhutani.

18 Likes

Great idea and initiative @init_27! I’ll toss in a few cents. When I was getting started I got lost in one specific topic or idea. For me it was computer vision and trying to build a snake classifier (I never got too far with it because I was focused on a decent model). I never made it past lesson 4 I focused so much on it. I played with how to use the computer vision models, bring in new ones, and learn everything I could about how to make it all fit together in the framework (and almost any question I had was brought up atleast once on the forums!) Eventually I needed to switch topics to tabular, so I spent (quite) a number of months on that. Basically what I am going at is if jumping topic to topic quickly is too much, focus on whichever one is most applicable to you now and explore as much of it as you realistically can. Could be NLP, could be Vision. For my tabular work, I looked at things not talked about much on the course: feature importance, time series (further), and what the newer papers were doing. Watch up to those lessons and get a understanding through Jeremy’s videos (and Rachel’s if we include NLP in the mix), and most importantly play with the notebooks. Playing around with the code and figuring out where it breaks and why it breaks (navigating through that terrifying source code) helped me tremendously. (If you notice, a few of what I mentioned is now how I do my study group, also I’m still learning about how GAN’s truly work, everyone learns at their own pace :wink: ).

13 Likes

I agree with you. Playing with the notebooks helps you get a good understanding of how things work and once you get a little more confidence you can move into a deeper implementation. Helped me a lot in the part 2 course as all notebooks have recursive imports( it’s based on the previous lesson). It’s also how I implemented fast.ai at work. Playing around in this top down approach is not exactly intuitive to begin with but it’s helped a lot.

2 Likes

You are absolutely right.
2 more exercises I would add (base on v3p2):

  1. Try to turn the notebooks into a package (the old way, not with the tools that automatically pull out the code). The need to arrange all objects and understand their connections greatly enhances understanding.
  2. Try adding a task that fast.ai does not support. For example, those who work at NLP can add support to NER.
1 Like

After tinkering with the course notebooks, I think Jeremy’s advice to start using fast.ai in your own project(s) is the next best step. Within some of my HCI projects, I had a couple of computer vision tasks, which I could partially relate to some of the examples in the course. The main differences were that the format of my input data was not quite the same and so I had to do some work to preprocess it and load it correctly into the network models. I also wanted to integrate some custom OpenCV processing for data augmentation. That made me look into the datablock API and this basically became my entry point into the fast.ai code, from which I created my development processes.

There were a couple of examples in Fastai for NER/sequence tagging.
One where the entities were passed in the respective position of words for the corresponding text. Something like this.
This is a dog == ART V OBJ NN
Can’t recall where.

Other one is this -> https://github.com/Emrys-Hong/fastai_sequence_tagging

2 Likes

In version 1 of the course we did not install fastai into the python environment with ‘pip’ or ‘conda’ the code was ‘git’ cloned into your environment. The notebooks sat in a directory above the code and the modules were imported into the notebooks from the code directory. This would allow you to place instrumenting statements within the code such as printing to get a feel for what’s being passed around as you would in a notebook . Make a copy of these ‘git’ cloned directories or download a github zip file and use that in case you break something.

With the current setups the code is still there but buried in the pip or conda installation.

This may aid with understanding the workings of callbacks etc

There is also the debugger, get to know how this works. Placing print statements in code is usually the first line of debugging to get a feel for the overall problem you are debugging and to help place the break points.

Note! you are using these tools when there is not a code problem i.e. no fault has occurred in the code, you are just getting into the belly of the beast to see how it functions.

1 Like

Great Comment @RogerS49

Although I also believe that this could be curiosity driven as well. A complete newcomer might feel intimidated by trying to follow it all at once.

I think the Jury is out for the same but IMO-first taking the top down dive and then peeling back the layers worked easier for me.

1 Like

My bad, it was PoS tagging instead of NER.
Still this was a good reference point. -> https://github.com/gitlost-murali/Transfer_Learning_LM_POS_English/blob/master/imdb_POS.ipynb

Try your hand on your first small projects as soon as possible. Something as simple as going from cats&dogs to your own image classifier will teach you a lot.

At least for me, getting familiar with data frames, importing and exporting data etc. all took some getting used to. Try to build a notebook from scratch and develop your own workflow that goes from idea to identifying the data loading it and getting meaningful results. Don’t worry about optimization at first, take the defaults (they will yield good results).

After that I’d suggest a nice session of hyperparameter tuning and seeing if you can improve the results. Make sure to log what you did and how it influenced the results systematically :slight_smile:

I agree but sometimes you just need to prove your hypothesis about what is going on.

1 Like

I very much prefer knowing what things do before studying how they work. That’s why fast.ai is an amazing course for me. It shows a very good overview of what can be achieved with ML and gives the tools to build exciting products straight off the lecture. I believe the practical approach is at the core of why fast.ai is an excellent course for domain experts and inventors, as the whole point is to get us to solve real problems with minimal effort.

The need to understand the inner workings of the algorithms only emerges when you have to optimize and customize your solution, or to debug problems. And to get to this point, you must already have built something. Showing too many details up-front might intimidate many to never get started building things. Therefore I like the approach of separating the courses into practical and advanced parts.

5 Likes