The code demonstrated this video can be downloaded here: lightning.ai/lightning-ai/studios/statquest-introduction-to-coding-neural-networks-with-pytorch?view=public§ion=all To learn more about Lightning: lightning.ai/ This StatQuest assumes that you are already familiar with... Neural Networks: ruclips.net/video/CqOfi41LfDw/видео.html Backpropagation: ruclips.net/video/IN2XmBhILt4/видео.html The ReLU Activation Function: ruclips.net/video/68BZ5f7P94E/видео.html Tensors: ruclips.net/video/L35fFDpwIM4/видео.html To install PyTorch see: pytorch.org/get-started/locally/ To install matplotlib, see: matplotlib.org/stable/users/getting_started/ To install seaborn, see: seaborn.pydata.org/installing.html Support StatQuest by buying my books The StatQuest Illustrated Guide to Machine Learning, The StatQuest Illustrated Guide to Neural Networks and AI, or a Study Guide or Merch!!! statquest.org/statquest-store/
Just a small comment. Any variable should not be named similar to any builtin in Python. The 'input' variable in forward should have been called something else since it is already a builtin function in Python. Otherwise, you end up overriding the builtin within that scope.
Please continue to go through every single line of code including the parameters with excruciating detail like you do. None of my professors went over each line like that cuz they always "assumed we already knew" and everyone in the class who didnt already know was afraid to ask to avoid looking stupid. Thank you.
StatQuest is the GOAT in statistics, machine learning, and deep learning! You're videos are really helping me understanding the concepts and outline of these fields! Love from Korea!
Ive used PyTorch for projects before, but I can honestly say that I never fully understood the workings of building a model. I knew that i needed the peices you mentioned, but not why I needed them. You've just explained it incredibly. Please don't stop making this series!!
Hello! Not sure if anyone's pointed this out yet, but the code on 10:14, 12:09, and 22:42 needs a small addition, `plt.show()`, or else it won't show the graph. Though, maybe 2 years ago when this video was made you didn't need that, I'm not sure, haha. Other than that, this is an awesome tutorial that quite literally takes anyone through the process step-by-step, and even tells you some neat fun facts (like the sns nickname) and explanations like how `loss.backward()` works. TRIPLE BAM indeed! Thanks for the awesome tutorials and videos you put out 👍
Was looking for a pytorch resource and was disappointed when this channel didnt have one yet but then this got uploaded. Really a blessing to the people haha
AMAZING video. This is exactly what beginners need to start the Pytorch journey with a semi solid footing instead of mindless copying. Yoy must have spent so much time for your AWESOME videos. GREATLY appreciate your effort. Keep up the good work.
What a great feeling when it all clicks after learning about all these concepts in isolation. All thanks to an incredibly brilliant teacher! Triple BAM!!!
Thanks for the awesome tutorial! You make the most difficult things so easy to understand, specially with the visuals and the arrows and all! The comments written on the right hand side make it so more helpful to pause and absorb. I would never miss a video of your tutorials!
Guess who was going to start programing a neural network in python today...... God bless you Josh, becase He know how much you are blessing me with your work. And know that Jesus loves you and want to be part of your life.
Thank you, good explanation! 16:00 Python prefers for-each-loops over index-based loops. See how this equivalent for-each loop looks much simpler. for input, label in zip(inputs, labels): output = model(input) loss = (output - label)**2 loss.backward() total_loss += float(loss)
Thanks so much for this gem John! Literally got a PyTorch project coming up and your timing is just perfect. Greatly appreciate the content, keep up the good work :)
It amazes me, when I see no NLP video on StatQuest! Josh your explanation are always higher than what one can expect and you have created so many series including maths and conceptual understanding. NLP has the same importance compared to computer vision and actually people are suffering to learn it by lack of content availability! I hope you would create a series or maybe a few videos on basic concepts which help people to get interested in NLP : ) Hope you are doing good in life Josh
@@statquest Yay so glad to hear this, we really need you because no one gives great explanations like you do. Also your youtube comments are the nicest I've ever seen which is a testament to how valued you are in this community.
Wow 😮 I didn't knew I had to watch the *Neural Networks part 2* before I can watch the *The StatQuest Introduction To PyTorch* before I can watch the *Introduction to coding neural networks with PyTorch and Lightning* 🌩️ (it’s something related to the cloud I understand) I am genuinely so happy to learn about that stuff with you Josh❤ I will go watch the other videos first and then I will back propagate to this video...
Just watched matrix multiplication of Transformers. My mind was blown away. Same things appear so complex but when this guy explains them, it's like peanuts. Triple BAM
I love how you you visualize and synchronize the code with the maths behind it :) On top of that you are doing it step-wise which results in a really awesome and very eduSupercalifragilisticexpialidociouscational video! #ThankYou
I am someone who loves *SQ,* and *JS* style of teaching in byte 😅 pieces but I also hate _snakes…_ I love *JavaScript* and *TypeScript* but I’ve been learning *JavaScript* with the _strictest linting rules_ one would imagine… and given how *JavaScript* could be used without any sort of strict rules (and is very similar to *Python* in this context) it is frustrating that it makes *Python* very hard to understand despite being easier since it has not the same stricter rules I have imposed myself learning *JavaScript…* but I am also genuinely grateful that *JS* is the best instructor for this kind of topics because *JS* has a _Ukulele,_ *StatSquatch* and *Normalsaurus* which are all there to help *JS* make *SQ* awesome 🎉🎉🎉🎉 Thanks 😅😅😅❤
That is a big leap. I need to check it several times to understand it since I am not a programmer. However, I really got a good feeling of what is happening inside the code. I actually use codeless systems such as KNIME. So if Mr. Sasquatch, get the idea of using KNIME to explain all this, It will be amazing. Thanks to be such a good teacher.
Hi! This is amazing. Are you gonna continue this series? Out of ten different rabbitholes I have been to, this video has been the most helpful for me with understanding PyTorch and starting off with my project. Please continue making more complicated models. Thank you :)
So I paused at 18:04 because _it blew my mind_ that we were calling backwards() on the loss variable because I thought it was defined on the line above… 😅😅😅😅 but yeah I didn’t find anything so one hour later I was just watching the rest of the video and _to be honest_ in about 33 seconds it came out that it was normal for _my mind to be blown_ 😂😂😂😂 at 18:37
Hi Josh, sorry to be a spoil sport, but I used exact same code and my prediction is showing 0.5 for dosage of 0.5 and it is running for all 100 epoch and final b value comes out to be -16.51 😔. But yes the concept is clear!! Great work! I always ask people whoever are interested in learning about data science or machine learning to refer you channel. Seeing your channel grow from 10-20K to a Mn is pleasure to my eyes!! You are the "El Professor"!!
Thank you very much! If you look at my actual code (follow the link), you'll see that I actually pulled a trick with the data to get it to train faster.
Hi Josh, thanks for your video. I am confused why it doesn't work when I am trying to optimize any other weights and bias. five minutes later, I think I have got the answer from the comments and your reply. Thanks again!
Nice video for the introduction of LSTM using PyTorch. There is also `torch` R package that doesn't need to install python and torch. It's so nice that R also has deep learning framework aside from `tensorflow` and I recommend you to maybe try it.
1. The optimizer = SGD (model.parameters (), lr = 0.1) at 14:22 should be changed to optimizer = SGD ([model.final_bias], lr = 0.1), otherwise the parameters other than final_bias will also be optimized. For example, w10 will become -8.6 at iteration 1 of round 1, causing the subsequent gradient descent to fail. 2. Another thing is optimizer.zero_grad(). I changed it to be placed before the start of the iteration. Placing it as in the video will cause the derivatives to accumulate. 3. After the optimization, you have to run the model again to output it to the drawing program. If you write it in the order of the video, the output obtained by the drawing program is the output before the model optimization.
Hello Josh! Thank you so much for your amazing videos! I have learned so much from your tutorials and would not have been able to advance without them! I wanted to ask whether it is possible for you to put some videos on times series analysis, including autoregression (AR), moving average (MA) and their combinations. I would be more than grateful if you can provide such a video. Thank you so much.
Amazing... Can you please tell me how to optimize all the parameters starting with random initial values like we did in "Going Bonkers with Chain Rule"?? I tried some modifications on my own, but couldn't get the result. Help would be greatly appreciated.
Unfortunately this model is not a good one for that. Instead, try this: ruclips.net/video/Qf06XDYXCXI/видео.html and github.com/StatQuest/word_embedding_with_pytorch_and_lightning
Hi Josh, could you explain how this line of code works? output_values = model(input_doses). My understanding is model has a method called forward, so shouldn't it be output_values = model.forward(input_doses)?
Thanks Josh, its Incredible video. Beside, recently the Bayes theorem application in fitting model (linear, logistic, random forest...) has became more and more popular in order to replace classic statistic method, could you pls take some time to explain to us some of its popular algorithm like BART, Linear regression via Bayesian Methods...
Hello! I've got a bit confused: at 15:08 you mention that at each epoch we'll be running all 3 data points through the model, but wasn't the point of SDG in that we would only need a single data point per epoch, or am I misunderstanding something? Btw, despite my confusion, this is by far the best ML guide series I've seen, thank you for your work!
That's a good question. "torch.optim" doesn't have a gradient descent optimizer, just a stochastic gradient descent optimizer. So we import torch.optim.SGD and then pass it all of the residuals to get gradient descent.
Hi Josh. I am a big fan of your videos. I have a question regarding this quest. In this video, we optimized only one parameter. How can we optimize all the parameters? Thanks in advance.
I show how to impute all of the parameters in this video on LSTMs in PyTorch: ruclips.net/video/RHGiXPuo_pI/видео.html (if you want to learn about the theory of LSTMs, see: ruclips.net/video/YCzL96nL7j0/видео.html
Hi Josh, thanks again for allowing me to break the ice between me and Pytorch. Everytime I see your videos, I wonder if my instructor could have taught us like this probably our lives must have been much simpler and happier. I have a small doubt here. In the example you have shown gradient training of only final bias. But in reality, all the weights will have to be trained during backpropagation. So when I try to initialise the all weights with random values and then train the model, I do not get the final weights as shown in the video. The code is as follows :- class BasicNN(nn.Module): def __init__(self): super().__init__() self.w00 = nn.Parameter(torch.randn(1), requires_grad = True) self.b00 = nn.Parameter(torch.randn(1), requires_grad = True) self.w01 = nn.Parameter(torch.randn(1), requires_grad = True) self.w10 = nn.Parameter(torch.randn(1), requires_grad = True) self.b10 = nn.Parameter(torch.randn(1), requires_grad = True) self.w11 = nn.Parameter(torch.randn(1), requires_grad = True) self.b_final = nn.Parameter(torch.randn(1), requires_grad = True) def forward(self, input): input_top_relu = input * self.w00 + self.b00 input_bottom_relu = input * self.w10 + self.b10 output_top_relu = F.relu(input_top_relu) * self.w01 output_bottom_relu = F.relu(input_bottom_relu) * self.w11 input_final_relu = output_top_relu + output_bottom_relu + self.b_final output = F.relu(input_final_relu) return output # Create an instance of the neural network model = BasicNN() # Print parameters print('Parameters before training') for name, param in model.named_parameters(): print(name, param.data) # Define inputs and corresponding labels inputs = torch.tensor([0., 0.5, 0.1]) labels = torch.tensor([0., 1.0, 0.]) # Define a loss function criterion = nn.MSELoss() # Define an optimizer optimizer = optim.SGD(model.parameters(), lr=0.01) # Number of epochs for training epochs = 1000 # Training loop for epoch in range(epochs): total_loss = 0 # Forward pass output = model(inputs) # Compute the loss loss = criterion(output, labels) total_loss += loss # Backward pass loss.backward() # Compute gradients optimizer.step() # Update weights optimizer.zero_grad() # Clear previous gradients # Print loss every 100 epochs if (epoch + 1) % 100 == 0: print(f"Epoch [{epoch+1}/{epochs}], Loss: {loss.item()}") if (total_loss < 0.00001): print(f'Epoch = {epoch}') break # Print final parameters print('Parameters after training') for name, param in model.named_parameters(): print(name, param.data) # check the model performance input_doses = torch.linspace(start = 0, end = 1, steps = 11) output = model(input_doses) sns.set(style = 'whitegrid') sns.lineplot(x = input_doses, y = output.detach(), color = 'green', linewidth = 2) plt.xlabel("Input Doses") plt.ylabel("Effectiveness") plt.show() Request if you can help me with the code above.
Great question! So, we're making a new class that is derived from nn.Module, and nn.Module, is derived from something else, and all those things need to be initialized, so "super()" does that for us.
That's the plan. This is just the first of many videos on how to code neural networks. The next video will be on pytorch lightning, and then we'll start to create more advanced models.
If I would like the neural network to optimize all the other parameters by itself and not just the final bias, how would I go about that? Or is it even possible with such a small network? I tried setting the other parameters to 0 and requires_grad to True, but that doesn't seem to work.
To be honest, I'm not certain why it is so hard to train all of the parameters at the same time in this neural network. It seems like there are tons of local minimums, and unless you get really lucky with the initial values for each parameter, you will get stuck in a local minimum and fail to get to the global minimum. This may be a function of the simplicity of the neural network - I built this one by hand by simplifying a more complex neural network. The simplification was needed so that I could easily draw it on the screen.
MEGABAMMMMMM..... Hey josh... It's been a very long long time.... I am occupied with different subject right now.. Hope you are doing good... Will catch you soon..
great presentation!! thanks again for simplfying this topic! are you planning to post more on NN implementation? computer vision maybe or object detection?
Hi Josh, I've watched most of your playlist. It is amazing how you explain it. But can you please explain or point to some reference on where the values for weights come from? I see at start of video like w is 1.70 but confuses me where it came from and why those values are used. Thank you Josh and hopefully once i get that it will be a... Triple bam for me :)
To create this network, I gave each weight and bias a random initialization value and then tried to fit the neural network to the training data with backpropagation. I then repeated the process a ton of times until I discovered a set of initialization values that worked.
The code demonstrated this video can be downloaded here: lightning.ai/lightning-ai/studios/statquest-introduction-to-coding-neural-networks-with-pytorch?view=public§ion=all
To learn more about Lightning: lightning.ai/
This StatQuest assumes that you are already familiar with...
Neural Networks: ruclips.net/video/CqOfi41LfDw/видео.html
Backpropagation: ruclips.net/video/IN2XmBhILt4/видео.html
The ReLU Activation Function: ruclips.net/video/68BZ5f7P94E/видео.html
Tensors: ruclips.net/video/L35fFDpwIM4/видео.html
To install PyTorch see: pytorch.org/get-started/locally/
To install matplotlib, see: matplotlib.org/stable/users/getting_started/
To install seaborn, see: seaborn.pydata.org/installing.html
Support StatQuest by buying my books The StatQuest Illustrated Guide to Machine Learning, The StatQuest Illustrated Guide to Neural Networks and AI, or a Study Guide or Merch!!! statquest.org/statquest-store/
REALLY Hope you can continue with this PyTorch tutorial.
@@yongjiewang9686 Will do!
Do we have video talking about transformer? Thanks.
@@shichengguo8064 Not yet, but soon.
Just a small comment. Any variable should not be named similar to any builtin in Python. The 'input' variable in forward should have been called something else since it is already a builtin function in Python. Otherwise, you end up overriding the builtin within that scope.
Please continue to go through every single line of code including the parameters with excruciating detail like you do.
None of my professors went over each line like that cuz they always "assumed we already knew" and everyone in the class who didnt already know was afraid to ask to avoid looking stupid. Thank you.
Thanks! Will do!
Favorite teacher with my favorite Deep learning framework. Lucky to have you. Thanks brother🙏
Wow, thanks
StatQuest is the GOAT in statistics, machine learning, and deep learning! You're videos are really helping me understanding the concepts and outline of these fields! Love from Korea!
Thank you!
Ive used PyTorch for projects before, but I can honestly say that I never fully understood the workings of building a model. I knew that i needed the peices you mentioned, but not why I needed them. You've just explained it incredibly. Please don't stop making this series!!
Thank you very much! :)
What a blessing this is. You are indeed the Richard Feynman of Data Science.
Thank you!
Thanks for the best content you bring. I hope you continue to make a full pytorch playlist
That's the plan!
@@statquest Thank you so much
YOU ARE THE BEST TEACHER EVER JOSHH!! I wish you can feel the raw feeling we feel when we watch your videos
Thank you?
The style of storytelling is just so unique and friendly
Thanks!
Hello! Not sure if anyone's pointed this out yet, but the code on 10:14, 12:09, and 22:42 needs a small addition, `plt.show()`, or else it won't show the graph. Though, maybe 2 years ago when this video was made you didn't need that, I'm not sure, haha.
Other than that, this is an awesome tutorial that quite literally takes anyone through the process step-by-step, and even tells you some neat fun facts (like the sns nickname) and explanations like how `loss.backward()` works.
TRIPLE BAM indeed! Thanks for the awesome tutorials and videos you put out 👍
Thanks! Did you run my code or type it in yourself? I keep the jupyter notebook updated.
plt.show() helped me get the visualizations in Ubuntu under WSL on Windows 11. Thank you for the comment.
Man, you are love. I started my neural net journey from your videos and it's the best decision I made. Thank you
Hooray!
Was looking for a pytorch resource and was disappointed when this channel didnt have one yet but then this got uploaded. Really a blessing to the people haha
Thanks!
AMAZING video. This is exactly what beginners need to start the Pytorch journey with a semi solid footing instead of mindless copying.
Yoy must have spent so much time for your AWESOME videos.
GREATLY appreciate your effort. Keep up the good work.
Thank you very much! :)
I have lived long enough to watch videos and understand nothing about ML stuffs, until I saw your videos. I truly wish your well being
Thank you!
What a great feeling when it all clicks after learning about all these concepts in isolation. All thanks to an incredibly brilliant teacher! Triple BAM!!!
Hooray!!! Thank you!
Thank you sir. You have no idea how valuable and helpful your videos are. Keep this good work running
Thanks, will do!
Thanks for the awesome tutorial! You make the most difficult things so easy to understand, specially with the visuals and the arrows and all! The comments written on the right hand side make it so more helpful to pause and absorb. I would never miss a video of your tutorials!
Hooray! I'm glad you like my videos. :)
That's really cool explanation! Please continue this PyTorch series, we really need it. BAM!
Will do!
Guess who was going to start programing a neural network in python today......
God bless you Josh, becase He know how much you are blessing me with your work.
And know that Jesus loves you and want to be part of your life.
Thanks!
Thank you, good explanation!
16:00 Python prefers for-each-loops over index-based loops. See how this equivalent for-each loop looks much simpler.
for input, label in zip(inputs, labels):
output = model(input)
loss = (output - label)**2
loss.backward()
total_loss += float(loss)
Great tip!
Thanks so much for this gem John! Literally got a PyTorch project coming up and your timing is just perfect. Greatly appreciate the content, keep up the good work :)
Thank you!
It amazes me, when I see no NLP video on StatQuest! Josh your explanation are always higher than what one can expect and you have created so many series including maths and conceptual understanding. NLP has the same importance compared to computer vision and actually people are suffering to learn it by lack of content availability! I hope you would create a series or maybe a few videos on basic concepts which help people to get interested in NLP : ) Hope you are doing good in life Josh
I'm working on NLP.
@@statquest Yay so glad to hear this, we really need you because no one gives great explanations like you do. Also your youtube comments are the nicest I've ever seen which is a testament to how valued you are in this community.
@@vans4lyf2013 Thank you very much!
Triple bam!
BAM! Thank you very much for supporting StatQuest!!!!
Thank you Josh, pls continue this series of pytorch!
Will do!
finally! some simple to understand content on how to make an AI model using pytourch!!! TRIPLE BAM!!!!
Hooray!
Amazing content, as always. Before I was a bit afraid to start closing in torch, so thank you to encourage le to do that!
bam! You can do it! :)
Thank you so much, Josh. I have been learning PyTorch and deep learning. This video helps me a lot!
Great to hear!
BIG LIKE before watching 👍🏻 please continue the pytorch series
Will do! :)
This series about neural networks and deep learning is very well explained. Thank you soooooooo much.
Thank you!
Thank you very much! I am new to Deep Learning. I can say that just in one week i learned a lot of things from your tutorials!
Happy to hear that!
Great explanation as always! Thanks for making content like this, which complements the theoretical concepts.
Glad you liked it!
Wonderful !!! Cant wait your pytorch lightning code for NN. Always thanks alot !!
bam! :)
I love you Josh. God bless you. You're my favorite teacher.
Thank you! 😃!
Wow 😮 I didn't knew I had to watch the *Neural Networks part 2* before I can watch the *The StatQuest Introduction To PyTorch* before I can watch the *Introduction to coding neural networks with PyTorch and Lightning* 🌩️ (it’s something related to the cloud I understand)
I am genuinely so happy to learn about that stuff with you Josh❤ I will go watch the other videos first and then I will back propagate to this video...
Warmer...
Quality educational content! It's so cool to see your channel grow. Been here since ~90k subs! Very well earned.
Wow! Thank you very much!!! BAM! :)
Man the content keeps getting better
Thank you!
Just watched matrix multiplication of Transformers. My mind was blown away. Same things appear so complex but when this guy explains them, it's like peanuts.
Triple BAM
Bam! :)
Josh explaining the code is far better than any programmer
Thank you!
I love how you you visualize and synchronize the code with the maths behind it :) On top of that you are doing it step-wise which results in a really awesome and very eduSupercalifragilisticexpialidociouscational video! #ThankYou
I love it. Thank you very much! :)
Looking forward to seeing your following videos! Excellent explanation!
Awesome, thank you!
I am someone who loves *SQ,* and *JS* style of teaching in byte 😅 pieces but I also hate _snakes…_ I love *JavaScript* and *TypeScript* but I’ve been learning *JavaScript* with the _strictest linting rules_ one would imagine… and given how *JavaScript* could be used without any sort of strict rules (and is very similar to *Python* in this context) it is frustrating that it makes *Python* very hard to understand despite being easier since it has not the same stricter rules I have imposed myself learning *JavaScript…* but I am also genuinely grateful that *JS* is the best instructor for this kind of topics because *JS* has a _Ukulele,_ *StatSquatch* and *Normalsaurus* which are all there to help *JS* make *SQ* awesome 🎉🎉🎉🎉 Thanks 😅😅😅❤
bam!
Another charming, fully informative masterpiece.
Thank you very much! BAM! :)
thanks Josh, you really make understanding Neural Networks concepts a great process!
Thank you! :)
The tutorial we all needed 🙂
Hooray!
Enjoying this series on machine learning. By the way there is no shame in self promotion, you deserve it 😁
Thanks 😅
Nice video, looking forward to the next ones on Pytorch Lightning !
Me too! BAM! :)
I am also learning Deep Learning, and want to apply it to make good projects,
This is going to be great.
bam!
Woo! Been waiting for this sort of a tutorial!!!
bam!
it's great that you are making videos on coding as well.
Thank you!
That is a big leap. I need to check it several times to understand it since I am not a programmer. However, I really got a good feeling of what is happening inside the code. I actually use codeless systems such as KNIME. So if Mr. Sasquatch, get the idea of using KNIME to explain all this, It will be amazing. Thanks to be such a good teacher.
I'll keep that in mind.
honestly wish I had this a year ago when I was struggling, still watching now tho!
Bam! :)
very well explained, thank you for providing quality content, it's very helpful
Glad it was helpful!
Hi! This is amazing. Are you gonna continue this series? Out of ten different rabbitholes I have been to, this video has been the most helpful for me with understanding PyTorch and starting off with my project. Please continue making more complicated models. Thank you :)
That's the plan!
Hey Josh!
Guess what just arrived in the mail....
My new statquest mug!!!!!
Hooray!!!
BAM!!! Thank you so much for supporting StatQuest!!!
great video and explanation! me have been struggling in pytorch coding
Bam! :)
better than MIT or any university slides
Thank you!
Thank you very much Mr Josh Starmer
Thanks!
Thanks for this amazing walk through.
Thanks!
Great explanation. Thank you very much
Thanks!
Awesome vid by the legend!
Thank you!
Absolutely brilliant!
Thank you! :)
bless josh and this channel
Thank you!
Another excellent video, one humble request please provide video on Stable Diffusion Models.
I'll keep that in mind.
That is how teaching should be.. Triple Bam
Thanks!
Thank you for perfect lecture~!!!
Thank you!
Your teaching video is awesome
Thank you!
@@statquest Do you have intro to lightning ? I kind of remember you mentioned in the video you seemed to have one?
@@ぶらえんぴん That's going to be the next video in this series. It will come out in a few weeks.
So I paused at 18:04 because _it blew my mind_ that we were calling backwards() on the loss variable because I thought it was defined on the line above… 😅😅😅😅 but yeah I didn’t find anything so one hour later I was just watching the rest of the video and _to be honest_ in about 33 seconds it came out that it was normal for _my mind to be blown_ 😂😂😂😂 at 18:37
Totally! I was like, "what?!?!?" when I first saw that.
Hi Josh, sorry to be a spoil sport, but I used exact same code and my prediction is showing 0.5 for dosage of 0.5 and it is running for all 100 epoch and final b value comes out to be -16.51 😔. But yes the concept is clear!! Great work! I always ask people whoever are interested in learning about data science or machine learning to refer you channel. Seeing your channel grow from 10-20K to a Mn is pleasure to my eyes!! You are the "El Professor"!!
Thank you very much! If you look at my actual code (follow the link), you'll see that I actually pulled a trick with the data to get it to train faster.
omg! I have really wanted this! awesome!!! :) :) :)
Hooray! :)
Best tutorial like usual! would be nice to see more advanced examples of in pytorch, like CNN for image classification :)
I'm working on them.
Thanks a lot, beg for Pytorch Series playlist.
Soon!
Double bam new way to teach coding
yes! :)
Hi Josh, thanks for your video. I am confused why it doesn't work when I am trying to optimize any other weights and bias.
five minutes later, I think I have got the answer from the comments and your reply. Thanks again!
bam
This was great... I hope you can simplify Tensorflow the same way... big big thank you.
Thanks!
great video! very well explained!!!👍👍
Thank you!
Nice video for the introduction of LSTM using PyTorch. There is also `torch` R package that doesn't need to install python and torch. It's so nice that R also has deep learning framework aside from `tensorflow` and I recommend you to maybe try it.
Thanks for the info!
@@statquest i strongly recommend it because it is so nice that R has own deep learning frameworks, besides h2o
Tensorflow developer is turning into PyTorch… bam! 💥
bam! :)
Great series.
Thank you!
1. The optimizer = SGD (model.parameters (), lr = 0.1) at 14:22 should be changed to optimizer = SGD ([model.final_bias], lr = 0.1), otherwise the parameters other than final_bias will also be optimized. For example, w10 will become -8.6 at iteration 1 of round 1, causing the subsequent gradient descent to fail.
2. Another thing is optimizer.zero_grad(). I changed it to be placed before the start of the iteration. Placing it as in the video will cause the derivatives to accumulate.
3. After the optimization, you have to run the model again to output it to the drawing program. If you write it in the order of the video, the output obtained by the drawing program is the output before the model optimization.
Are you using my code or did you write your own? At 4:53 we set "requires_grad=False".
Hello Josh! Thank you so much for your amazing videos! I have learned so much from your tutorials and would not have been able to advance without them!
I wanted to ask whether it is possible for you to put some videos on times series analysis, including autoregression (AR), moving average (MA) and their combinations. I would be more than grateful if you can provide such a video. Thank you so much.
I'll keep those topics in mind!
Please make an entire tutorial about the ins and outs of PyTorch!
I've made several PyTorch videos and will continue to make more. You can find the others here: statquest.org/video-index/
Amazing... Can you please tell me how to optimize all the parameters starting with random initial values like we did in "Going Bonkers with Chain Rule"?? I tried some modifications on my own, but couldn't get the result. Help would be greatly appreciated.
Unfortunately this model is not a good one for that. Instead, try this: ruclips.net/video/Qf06XDYXCXI/видео.html and github.com/StatQuest/word_embedding_with_pytorch_and_lightning
Hi Josh, could you explain how this line of code works? output_values = model(input_doses). My understanding is model has a method called forward, so shouldn't it be output_values = model.forward(input_doses)?
I answer that question at 9:13
That Was Nice ! Thank You
Glad you liked it!
Thanks Josh, its Incredible video. Beside, recently the Bayes theorem application in fitting model (linear, logistic, random forest...) has became more and more popular in order to replace classic statistic method, could you pls take some time to explain to us some of its popular algorithm like BART, Linear regression via Bayesian Methods...
I'm planning on doing a whole series on Bayesian stuff as soon as I finish this series on neural networks.
@@statquest that's great news for today, thanks Josh, Im looking forward to see it soon
Hello! I've got a bit confused: at 15:08 you mention that at each epoch we'll be running all 3 data points through the model, but wasn't the point of SDG in that we would only need a single data point per epoch, or am I misunderstanding something? Btw, despite my confusion, this is by far the best ML guide series I've seen, thank you for your work!
That's a good question. "torch.optim" doesn't have a gradient descent optimizer, just a stochastic gradient descent optimizer. So we import torch.optim.SGD and then pass it all of the residuals to get gradient descent.
@@statquest Makes sense, thank you for the clarification!
Hi Josh. I am a big fan of your videos. I have a question regarding this quest. In this video, we optimized only one parameter. How can we optimize all the parameters? Thanks in advance.
I show how to impute all of the parameters in this video on LSTMs in PyTorch: ruclips.net/video/RHGiXPuo_pI/видео.html (if you want to learn about the theory of LSTMs, see: ruclips.net/video/YCzL96nL7j0/видео.html
Hi Josh, thanks again for allowing me to break the ice between me and Pytorch. Everytime I see your videos, I wonder if my instructor could have taught us like this probably our lives must have been much simpler and happier. I have a small doubt here. In the example you have shown gradient training of only final bias. But in reality, all the weights will have to be trained during backpropagation. So when I try to initialise the all weights with random values and then train the model, I do not get the final weights as shown in the video. The code is as follows :-
class BasicNN(nn.Module):
def __init__(self):
super().__init__()
self.w00 = nn.Parameter(torch.randn(1), requires_grad = True)
self.b00 = nn.Parameter(torch.randn(1), requires_grad = True)
self.w01 = nn.Parameter(torch.randn(1), requires_grad = True)
self.w10 = nn.Parameter(torch.randn(1), requires_grad = True)
self.b10 = nn.Parameter(torch.randn(1), requires_grad = True)
self.w11 = nn.Parameter(torch.randn(1), requires_grad = True)
self.b_final = nn.Parameter(torch.randn(1), requires_grad = True)
def forward(self, input):
input_top_relu = input * self.w00 + self.b00
input_bottom_relu = input * self.w10 + self.b10
output_top_relu = F.relu(input_top_relu) * self.w01
output_bottom_relu = F.relu(input_bottom_relu) * self.w11
input_final_relu = output_top_relu + output_bottom_relu + self.b_final
output = F.relu(input_final_relu)
return output
# Create an instance of the neural network
model = BasicNN()
# Print parameters
print('Parameters before training')
for name, param in model.named_parameters():
print(name, param.data)
# Define inputs and corresponding labels
inputs = torch.tensor([0., 0.5, 0.1])
labels = torch.tensor([0., 1.0, 0.])
# Define a loss function
criterion = nn.MSELoss()
# Define an optimizer
optimizer = optim.SGD(model.parameters(), lr=0.01)
# Number of epochs for training
epochs = 1000
# Training loop
for epoch in range(epochs):
total_loss = 0
# Forward pass
output = model(inputs)
# Compute the loss
loss = criterion(output, labels)
total_loss += loss
# Backward pass
loss.backward() # Compute gradients
optimizer.step() # Update weights
optimizer.zero_grad() # Clear previous gradients
# Print loss every 100 epochs
if (epoch + 1) % 100 == 0:
print(f"Epoch [{epoch+1}/{epochs}], Loss: {loss.item()}")
if (total_loss < 0.00001):
print(f'Epoch = {epoch}')
break
# Print final parameters
print('Parameters after training')
for name, param in model.named_parameters():
print(name, param.data)
# check the model performance
input_doses = torch.linspace(start = 0, end = 1, steps = 11)
output = model(input_doses)
sns.set(style = 'whitegrid')
sns.lineplot(x = input_doses, y = output.detach(), color = 'green', linewidth = 2)
plt.xlabel("Input Doses")
plt.ylabel("Effectiveness")
plt.show()
Request if you can help me with the code above.
This example only works to optimize the final bias term.
Thank you Josh!
Bam!
KOREAN BAMMMM!!! TY StatQuest😁
Awesome!!! BAM! :)
Awesome video! Thanks, Josh! Can you please explain what super() does in the _init_()?
Great question! So, we're making a new class that is derived from nn.Module, and nn.Module, is derived from something else, and all those things need to be initialized, so "super()" does that for us.
I would be appreciated if you can teach more an deeper in pytorch. Thank you so much!
That's the plan. This is just the first of many videos on how to code neural networks. The next video will be on pytorch lightning, and then we'll start to create more advanced models.
Sir, Please make videos on the time-series analysis, it's hard to find the videos with clear explaination.
I'll keep that in mind.
wow.. super excited
Hooray!
If I would like the neural network to optimize all the other parameters by itself and not just the final bias, how would I go about that? Or is it even possible with such a small network? I tried setting the other parameters to 0 and requires_grad to True, but that doesn't seem to work.
To be honest, I'm not certain why it is so hard to train all of the parameters at the same time in this neural network. It seems like there are tons of local minimums, and unless you get really lucky with the initial values for each parameter, you will get stuck in a local minimum and fail to get to the global minimum. This may be a function of the simplicity of the neural network - I built this one by hand by simplifying a more complex neural network. The simplification was needed so that I could easily draw it on the screen.
MEGABAMMMMMM.....
Hey josh... It's been a very long long time.... I am occupied with different subject right now..
Hope you are doing good... Will catch you soon..
Welcome back!
Hey Josh!
Amazing videos, thanks a lot.
Would be great if you could cover Time Series Data and algorithms like ARIMA and HOLTS WINTER
Thanks😊
I'll keep those topics in mind.
this video is gold
Thank you!
great presentation!! thanks again for simplfying this topic! are you planning to post more on NN implementation? computer vision maybe or object detection?
Yes, there will be many more videos on how to implement NNs.
Hi Josh, I've watched most of your playlist. It is amazing how you explain it. But can you please explain or point to some reference on where the values for weights come from? I see at start of video like w is 1.70 but confuses me where it came from and why those values are used. Thank you Josh and hopefully once i get that it will be a... Triple bam for me :)
To create this network, I gave each weight and bias a random initialization value and then tried to fit the neural network to the training data with backpropagation. I then repeated the process a ton of times until I discovered a set of initialization values that worked.