When a true master of a discipline performs an action, it seems effortless. Consider great pianists - oh how easy it seems to just sit in front of a piano, close your eyes, sway a bit and the music just flows. But then we go home and it doesn’t seem to be that easy.
Same with watching Jeremy. We see those outstanding notebooks incorporating research findings from many, many years and we think: ‘oh, this is cool and Jeremy makes it seem simple, nice!’.
What we don’t see is how much effort Jeremy - being an absolutely out of this world practitioner and teacher - put into creating the notebooks. I can only guess there have been a lot of set_trace calls involved and other development practices that we don’t see. And it is not like Jeremy has been doing this for a couple of months nor that fastai is the first library that he authored.
We see notebooks shared on the forums by students but we don’t see how much has been copied over nor how long it took us to piece things together.
Just to put things in perspective, I don’t get much of this either and I have given all this my best since last October. I’ve put countless hours into the fastai courses. This is from my last coding session:
- I had to read how broadcasting works in numpy since I didn’t quite get it. BTW I think this comes from the book you shared on Twitter
- I noticed in a notebook I worked on some time ago that I didn’t include a relu activation after every second layer! And I completely missed it. I spent good 20 minutes trying to figure out if it really wasn’t there and whether it should be there as the model is somewhat performing in line with expectations. Doah.
- Reading (wrong version on top of that) of PyTorch docs to confirm if I understood what was it that they refer to as logits.
- For the trillionth time in my life, googling for how to disable the axes when plotting images.
My other recent claims to glory involve:
- Having to write an article so that I could semi-comfortable figure out how to use Twitter.
- Having to write an article to convince myself to start using samples instead of training on the whole dataset and starting like a zombie at the computer screen.
There are a couple of things that could be happening. Maybe I am just not smart enough. Could be. Maybe I spend to much time on the forums instead of doing actual work. Could be.
Or maybe part of the reason why it is so tough at time is what @sermakarevich mentioned:
and more than that. We see the results of work of other people but we don’t see how much they struggle. And if they struggle even 1/4th as much as I struggle, than they struggle a lot. And I don’t think even people who perform - in my eyes - on a superhuman level place such emphasis on debugging because all of this comes easy. Don’t think it does even to them.
I think other people have given great advice here. All I wanted to say is that if you find this overwhelming you are not alone and to list some of the reasons why it all might seem like we are doing worse than others where we actually are not.
I find that for that what works best for me is playing with toy problems. If I can figure out how to train a fully connected network consisting of a layer or two on MNIST, maybe I can figure out how to train a conv net. And from that maybe I can figure out how to create a resnet.
If I can plot images of objects and bounding boxes (and I can now, because nearly most of the time I spent on lesson 8 went into this), maybe I can get the model to output 4 numbers and see if it learns anything. And if I can do this maybe over this week I will be able to implement something from what Jeremy covered in lecture 9. And if I don’t - oh well, maybe I will need another two months after this course to finish the material (I still haven’t finished part 1 cause I got sick). As long as I have not given up and I am moving forward even if at what seems to be as a snail’s pace, I think I am doing good. (BTW, I am not only writing these words to convince you only, but to also convince myself that all is well )