Real-World Python Neural Nets Tutorial (Image Classification w/ CNN) | Tensorflow & Keras
In this video we walk through the process of training a convolutional neural net to classify images of rock, paper, & scissors. We do this using the Tensorflow & Keras libraries. This is a follow-up to the first video I posted on neural networks.
Introduction to Neural Nets: • Introduction to Neural...
Link to my code (github): github.com/KeithGalli/neural-...
Link to Google Colab file: colab.research.google.com/dri...
---------------------
Resources!
Learn more about CNNs
Good written overview: towardsdatascience.com/a-comp...
Good video overview (@CodeEmporium ): • Convolution Neural Net...
Illustrated Examples of CNNs: towardsdatascience.com/illust...
MNIST Example: keras.io/examples/mnist_cnn/
Learn more about TensorFlow datasets
www.tensorflow.org/datasets/o...
www.tensorflow.org/datasets/c...
Learn more about Kerastuner
Documentation: keras-team.github.io/keras-tu...
@sentdex : • Optimizing Neural Netw...
@krishnaik06 : • Tutorial 27- Create CN...
Practice your Python Pandas data science skills with problems on StrataScratch!
stratascratch.com/?via=keith
Join the Python Army to get access to perks!
KZread - / @keithgalli
Patreon - / keithgalli
---------------------
Video Timeline!
0:00 Video Overview
0:33 Getting Started (Setup & Installation)
2:24 Finding datasets to use
6:02 Data Preparation
10:26 Additional Data Prep (Convert data to NumPy format)
15:22 Reshape Data & Normalize values between 0-1
19:39 Train our first network to classify images
25:06 Convolutional Neural Net (CNN) approach
28:48 Using GPU on Google Colab (speed up training)
31:22 Improving our CNN (reduce image size, max pooling, dropout, etc)
40:18 Using Kerastuner to automatically pick best hyperparameters
52:50 Save & Load our models
54:16 Plot NumPy arrays as images
57:38 Convert JPG/PNG images to NumPy
1:00:20 Final thoughts
---------------------
Follow me on social media!
Instagram | / keithgalli
Twitter | / keithgalli
If you are curious to learn how I make my tutorials, check out this video: • How to Make a High Qua...
*I use affiliate links on the products that I recommend. I may earn a purchase commission or a referral bonus from the usage of these links.
Пікірлер: 111
Hey all! Been a little while since I have posted, but trying to get back into the swing of things. Hope everyone is doing well. Based on a lot of feedback I have gotten, my current plan is to make a web scraping tutorial with beautiful soup next. Not quite sure what will come after that. Does anyone have any suggestions? Would love to hear them :).
@thebeston6710
4 жыл бұрын
sup keith galli, i need help trying to fix a bug in this code. This is a game where there is a player and it has to dodge the enemies. But for some reason I still die if i haven't touced any of the enemies. How do you fix that bug? import turtle import random import time from random import randint wn = turtle.Screen() wn.bgcolor('black') wn.setup(600, 800) x = random.randint(-290, 290) y = random.randint(395, 500) x1 = -290 x2 = 290 y1 = 395 y2 = 1000 pm = 10 em = 5 ed = 44 s = 1 score = 0 p = turtle.Turtle() p.hideturtle() p.penup() p.speed(0) p.color('red') p.shape('circle') p.shapesize(stretch_wid = 2, stretch_len = 2) p.goto(0, -350) p.showturtle() enemy_colors = ['darkblue', 'cyan', 'green', 'yellow', 'purple', 'pink', 'brown', 'white', 'orange', 'lightgreen', 'blue'] random_color = random.choice(enemy_colors) e1 = turtle.Turtle() e1.hideturtle() e1.color(random_color) e1.penup() e1.speed(0) e1.shape('square') e1.shapesize(stretch_wid=2, stretch_len=2) e1.goto(x, y) e1.showturtle() e1.right(90) random_color = random.choice(enemy_colors) x = random.randint(x1, x2) y = random.randint(y1, y2) e2 = turtle.Turtle() e2.hideturtle() e2.color(random_color) e2.penup() e2.speed(0) e2.shape('square') e2.shapesize(stretch_wid=2, stretch_len=2) e2.goto(x, y) e2.showturtle() e2.right(90) random_color = random.choice(enemy_colors) x = random.randint(x1, x2) y = random.randint(y1, y2) e3 = turtle.Turtle() e3.hideturtle() e3.penup() e3.speed(0) e3.color(random_color) e3.shape('square') e3.shapesize(stretch_wid=2, stretch_len=2) e3.goto(x, y) e3.showturtle() e3.right(90) random_color = random.choice(enemy_colors) x = random.randint(x1, x2) y = random.randint(y1, y2) e4 = turtle.Turtle() e4.hideturtle() e4.penup() e4.speed(0) e4.color(random_color) e4.shape('square') e4.shapesize(stretch_wid=2, stretch_len=2) e4.goto(x, y) e1.showturtle() e4.right(90) random_color = random.choice(enemy_colors) x = random.randint(x1, x2) y = random.randint(y1, y2) e5 = turtle.Turtle() e5.hideturtle() e5.penup() e5.speed(0) e5.color(random_color) e5.shape('square') e5.shapesize(stretch_wid=2, stretch_len=2) e5.goto(x, y) e5.showturtle() e5.right(90) random_color = random.choice(enemy_colors) x = random.randint(x1, x2) y = random.randint(y1, y2) e6 = turtle.Turtle() e6.hideturtle() e6.penup() e6.speed(0) e6.color(random_color) e6.shape('square') e6.shapesize(stretch_wid=2, stretch_len=2) e6.goto(x, y) e6.showturtle() e6.right(90) random_color = random.choice(enemy_colors) x = random.randint(x1, x2) y = random.randint(y1, y2) e7 = turtle.Turtle() e7.hideturtle() e7.penup() e7.speed(0) e7.color(random_color) e7.shape('square') e7.shapesize(stretch_wid=2, stretch_len=2) e7.goto(x, y) e7.showturtle() e7.right(90) random_color = random.choice(enemy_colors) x = random.randint(x1, x2) y = random.randint(y1, y2) e8 = turtle.Turtle() e8.hideturtle() e8.penup() e8.speed(0) e8.color(random_color) e8.shape('square') e8.shapesize(stretch_wid=2, stretch_len=2) e8.goto(x, y) e8.showturtle() e8.right(90) random_color = random.choice(enemy_colors) x = random.randint(x1, x2) y = random.randint(y1, y2) e9 = turtle.Turtle() e9.hideturtle() e9.penup() e9.speed(0) e9.color(random_color) e9.shape('square') e9.shapesize(stretch_wid=2, stretch_len=2) e9.goto(x, y) e9.showturtle() e9.right(90) random_color = random.choice(enemy_colors) x = random.randint(x1, x2) y = random.randint(y1, y2) e10 = turtle.Turtle() e10.hideturtle() e10.penup() e10.speed(0) e10.color(random_color) e10.shape('square') e10.shapesize(stretch_wid=2, stretch_len=2) e10.goto(x, y) e10.showturtle() e10.right(90) pen = turtle.Turtle() pen.hideturtle() pen.penup() pen.goto(0, 360) pen.color('white') def move_right(): x = p.xcor() x += pm if x > 290: x = 290 p.setx(x) def move_left(): x = p.xcor() x -= pm if x x = -290 p.setx(x) def move_up(): y = p.ycor() y += pm if y > 390: y = 390 p.sety(y) def move_down(): y = p.ycor() y -= pm if y y = -390 p.sety(y) wn.listen() wn.onkeypress(move_left, 'Left') wn.onkeypress(move_right, 'Right') wn.onkeypress(move_up, 'Up') wn.onkeypress(move_down, 'Down') run = True while run: wn.update() em += 0.04 e1.fd(em) e2.fd(em) e3.fd(em) e4.fd(em) e5.fd(em) e6.fd(em) e7.fd(em) e8.fd(em) e9.fd(em) e10.fd(em) if e1.ycor() x = random.randint(x1, x2) y = random.randint(y1, y2) random_color = random.choice(enemy_colors) e1.color(random_color) e1.goto(100000000000, 100000000000) e1.goto(x, y) score += 1 pen.clear() pen.write('{}'.format(score), align='center', font=('courier', 24, 'normal')) if e2.ycor() x = random.randint(x1, x2) y = random.randint(y1, y2) random_color = random.choice(enemy_colors) e2.color(random_color) e2.goto(100000000000, 100000000000) e2.goto(x, y) score += 1 pen.clear() pen.write('{}'.format(score), align='center', font=('courier', 24, 'normal')) if e3.ycor() x = random.randint(x1, x2) y = random.randint(y1, y2) random_color = random.choice(enemy_colors) e3.color(random_color) e3.goto(100000000000, 100000000000) e3.goto(x, y) score += 1 pen.clear() pen.write('{}'.format(score), align='center', font=('courier', 24, 'normal')) if e4.ycor() x = random.randint(x1, x2) y = random.randint(y1, y2) random_color = random.choice(enemy_colors) e4.color(random_color) e4.goto(100000000000, 100000000000) e4.goto(x, y) score += 1 pen.clear() pen.write('{}'.format(score), align='center', font=('courier', 24, 'normal')) if e5.ycor() x = random.randint(x1, x2) y = random.randint(y1, y2) random_color = random.choice(enemy_colors) e5.color(random_color) e5.goto(100000000000, 100000000000) e5.goto(x, y) score += 1 pen.clear() pen.write('{}'.format(score), align='center', font=('courier', 24, 'normal')) if e6.ycor() x = random.randint(x1, x2) y = random.randint(y1, y2) random_color = random.choice(enemy_colors) e6.color(random_color) e6.goto(100000000000, 100000000000) e6.goto(x, y) score += 1 pen.clear() pen.write('{}'.format(score), align='center', font=('courier', 24, 'normal')) if e7.ycor() x = random.randint(x1, x2) y = random.randint(y1, y2) random_color = random.choice(enemy_colors) e7.color(random_color) e7.goto(100000000000, 100000000000) e7.goto(x, y) score += 1 pen.clear() pen.write('{}'.format(score), align='center', font=('courier', 24, 'normal')) if e8.ycor() x = random.randint(x1, x2) y = random.randint(y1, y2) random_color = random.choice(enemy_colors) e8.color(random_color) e8.goto(100000000000, 100000000000) e8.goto(x, y) score += 1 pen.clear() pen.write('{}'.format(score), align='center', font=('courier', 24, 'normal')) if e9.ycor() x = random.randint(x1, x2) y = random.randint(y1, y2) random_color = random.choice(enemy_colors) e9.color(random_color) e9.goto(100000000000, 100000000000) e9.goto(x, y) score += 1 pen.clear() pen.write('{}'.format(score), align='center', font=('courier', 24, 'normal')) if e10.ycor() x = random.randint(x1, x2) y = random.randint(y1, y2) random_color = random.choice(enemy_colors) e10.color(random_color) e10.goto(1000000000000, 100000000000) e10.goto(x, y) score += 1 pen.clear() pen.write('{}'.format(score), align='center', font=('courier', 24, 'normal')) if p.distance(e1) time.sleep(s) print('Score:', score) quit() if p.distance(e2) time.sleep(s) print('Score:', score) quit() if p.distance(e3) time.sleep(s) print('Score:', score) quit() if p.distance(e4) time.sleep(s) print('Score:', score) quit() if p.distance(e5) time.sleep(s) print('Score:', score) quit() if p.distance(e6) time.sleep(s) print('Score:', score) quit() if p.distance(e7) time.sleep(s) print('Score:', score) quit() if p.distance(e8) time.sleep(s) print('Score:', score) quit() if p.distance(e9) time.sleep(s) print('Score:', score) quit() if p.distance(e10) time.sleep(s) print('Score:', score) quit() wn.mainloop()
@SSSNIPD
4 жыл бұрын
I have done andrew ng's machine learning course. It would be awesome if you could explain how to apply those concepts to python and start machine learning in python.
@arhataria
4 жыл бұрын
Another series of real "business" world data science tasks (using pandas and machine learning together!) would be awesome :D I'm from a non-IT background and the last series you posted actually helped me a lot at my work!!! Thanks a lot :)
@thebeston6710
3 жыл бұрын
Can you try to do OpenGL
@CassieYT1
3 жыл бұрын
Maybe a video on GANs would be cool?
It has now become an awesome rock-paper-scissors series man, thank you!
Thank you so much man! I've been studying ML like crazy and even so it's hard to get going without seeing someone do it first, you're really helping me out!
Keith cannot thank you enough, there are places that present this topic in like 6 hours or something and you got to the point and really filled in some gaps I had with this concept. Very nice!
Thank you soo much, your explanation is relatable and easy to understand! :) I can't believe you are teaching for free. Happy to learn from you ☺️
Keith u finally posted u dont know how much i wait for your tutorials man and thx for the NN vid very good and u explain very well.Stay safe at home guys
@KeithGalli
4 жыл бұрын
Sorry for keeping you waiting! I appreciate your support 🙌
Finally Keith brought us our favorite food. Thanks 🙏🏼. Love how you made it too. Best tuition and keep it up bro
Keith, your videos are unbelievably good, I've watched almost one per day for a week straight. Thanks so much for putting out this content!
It is very helpful for my preparation for the Tensorflow cert exam. Thanks very much!
The most illustrative tutorial on TensorFlow & Keras regarding NN and CNN. (Y)
i gladi find your channel. now i know how to resolve my main problem in my rock-paper-scissors exam. youve got a new subs!
dude, thanks for explaining most of the basics!
Gotta love those details. Awesome work!
@KeithGalli
4 жыл бұрын
Thanks man! Big fan of your videos :)
extremely good, easy to understand, good job bro
Hi Keith, really, can't thank you enough for making all the amazing videos that's perfect and easy to understand for someone like me who's first language isn't English :)
@KeithGalli
Жыл бұрын
Glad that you enjoy them and happy to hear my English is easy enough to understand! :)
Thank you! My man for this tutorial. A watcher from Morocco
@KeithGalli
4 жыл бұрын
You're welcome :). Would love to visit Morocco some day!
@saadbenbrahim954
4 жыл бұрын
@@KeithGalli you're welcome, I will be happy to show you around.
You're Back!!!!! Dude we've missed you!!
Great job body. You made me love CNN 😃. I am accepting you as my teacher ☺️🙏
this is how teaching should be... love u brother
Thank you so much! This is very helpful for my project!
Learned a lot. Thank you so much!
@KeithGalli
4 жыл бұрын
You're welcome!
HOW DID I MISS THIS UPLOAD 🤩
Thank you! From Argentina
This is dope bruh! Thanks for video
Great tutorial! Thanks dude!
good stuff, thanks for the sharing knowledge
Excellent video
Bro, you help a lot with your vids!
Thank you for the great video!!!
thank you. great job!
Awesome!! TQVM!
Thank you so much!!
Hey !!! Mr. Galli is been a while, Infact your Tutorials on Data Analysis with python on that Mobile electronics and appliance was superb. It helped me to complete my project. Thou I found out few lapses and was a challenge which I was able to solve them myself and I did like a charm. You gave me that boldness to apply for few Jobs with my new project. Thank you. But the lapses really strengthen me very well and made me exploit more on different ways of writing codes. "But there is One last step you failed to do with that data, that is Predicting future sales with the data. Please kindly come back to fill that gap for us please . "Using Tensorflow and Keras with LSTM and or ARIMA model to predict future sale on items and dates". Still in waiting, you already have 3 stars with me, waiting for the part 2, (Using Tensorflow and Keras with LSTM and or ARIMA model to predict future sale on items and dates) which will be 2 stars to complete a 5 Star. Stillll In waiting !!!!!!!!!!!!!!!!!!!!!!
Insightful!
You made it so clear step by step, great tutorial, best so far. Just wonder if u could make a video about custom object detecting using tensorflow keras on google colab, I've searched all around the youtube, all of the videos about this topic is kinda frustrating and dispointing, they teach people in a complex way, i'm a lazy man, really like the way you teaching 🍺
Thank you so much^^
Hi, how do you use this to predict a new image if it is rock paper or scissor? :(
Congrats man 🙏 finally got monetized .
Always good to hear you, Keith. By the way, what'd you recommend for people to get a first job using CNN's? Thanks a lot
Thank you for the nicely explained video! Helped me a lot. One question: If i use 64 filters in the first layer and 32 in the second (I'm talking about the net architecture around min 30), will i have 64*32=2048 filters in the second layer? Thanks!
Stay safe my dear friend Keith, I m Indian & here covid cases are increasing 🇮🇳
@KeithGalli
4 жыл бұрын
Sorry to hear that covid cases are increasing over there :/. Hope you stay safe & healthy as well. We all will get through this!
@MrKrishnalovesyou
4 жыл бұрын
@@KeithGalli Yes Keith... We will fight & win ✌️
@prashantbisht2219
3 жыл бұрын
@@MrKrishnalovesyou Bht hi ache bhai, mjaa hi aagya
fruitful video, hope to see more in the 3D shape model using CNN with Keras. what if I have an object of 3D and need to train and predict the feature shape as measuring the shape by using CNN prediction and accuracy ?
Thank you
Your Pandas tuto was so great. It has urged me to go further. Can you do a tuto on how to deploy a machine learning model in django?
@joseph3036
3 жыл бұрын
That is easily done using Streamlit, checkout this video. m.kzread.info/dash/bejne/k3WFx5qpnKrfYbA.html
Keith, is it possible to predict where something is via a signal strength value and it’s lat and lng? So the higher the signal strength the closer you are to it. I’m struggling to write this in code form basically like a weighted median value but the Ai does the work and adjusts the weights. All that the model needs to output is a lat and lng of where it thinks the signal is coming from.
Hi Keith, If I want to use a dataset that is already on my computer instead of downloaded from the Internet, how do I do it! Much thanks :-)
The pooling size of the MaxPooling layer is 2, which is too small to represent the image. If you set the pool_size to (5, 5), the test accuracy will be 80%.
is there any paper base on your tutorial? I want use it for my university project but it should be relative to specific paper (nice to be in ISA)
May I have a question? Why my terminal shows " cannot reshape array of size 226800000 into shape (372,300,300,1)" while I ran this code"train_images = train_images.reshape(2520, 300, 300, 1) test_images = test_images.reshape(372, 300, 300, 1)".
I can't thank you enough man Really amazing stuff Quick question Do you have any competitive programming background? And if so, could you give some tips on how to get better at it? Thanks so much man
Thank you Keith for such a lovely video. While running the code "model.evaluate(test_image, test_label)", I got below error. I am not sure why train and test size should be same. "ValueError: Data cardinality is ambiguous: x sizes: 2520 y sizes: 372 Please provide data which shares the same first dimension". I checked the shape of train_images and test_images and they are same "(300, 300, 1)"
So how do I use this model to make predictions
Can you please explain how to load the data if saved locally but in different folders, that is, test images in one folder, train images in folders 0, 1 and 2 as per their types? Thank you.
Where can I find the series of Keras and tensorflow videos?
Thanks for your videos, man! But can you do some of PyTorch examples?
@KeithGalli
4 жыл бұрын
That is something that I want to do, but I don't have it on the immediate roadmap. Think it would require a decent amount of planning to do properly and want to focus on some other video topics before diving into PyTorch.
@Nadelaev
4 жыл бұрын
@@KeithGalli gonna keep waiting! appreciate your work)
@ayencoscolfield3312
3 жыл бұрын
Same here too eagerly waiting for a deep learning pytorch video examples from our man Keith Gaili
I was trying to use the cat and dog dataset but the shape on shows the size of the samples and nothing else. Also there is only train data and only test data. Any solutions?
How can u extract the label of a classified image when working with a large dataset? I would like to classify food image and recommend recipes based on the label identified but I am not understanding how to do this. I WOULD kindly ask a tutorial on this matter. There is barely information on food related projects plz
If anyone is using Anaconda and importing the TensorFlow Dataset through pip isn't working then try: conda install -c anaconda tensorflow-datasets in the Anaconda Prompt, it worked for me.
hey keith hope you are well bro. I was hoping you could do a video on this same sort of stuff but doing it by using google drive. I have datasets for training images and testing images in my drive with a csv for each containing their forresponding labels. Thoughts?
@KeithGalli
2 жыл бұрын
I have a similar video that is already filmed going over similar stuff. It got delayed by the sponsor so I'm not a exactly sure when I can post it
Hi Keith, great job. I have learned a lot from your videos. Hope you will produce more. By the way, I have followed your video and the image classification work as expected. How can I predict one single image? When I pass in test_images[0], the predict function return "... expected ndim=4, found ndim=3 ...." obviously it is expecting 4 dimensional array.
@KeithGalli
3 жыл бұрын
I think you could pass it in as predict(np.array(test_images[0])) and it will work. Glad you have liked some of my videos! :)
@tinsp253
3 жыл бұрын
@@KeithGalli I do this: print("Predict: ", np.round(best_model.predict(np.array(test_images[0])))) and the result is still the same as below "ValueError: Input 0 of layer sequential is incompatible with the layer: expected ndim=4, found ndim=3. Full shape received: [None, 300, 1]"
@azzmaniac4139
3 жыл бұрын
You should try this : best_model.predict(np.array(test_images))[your_number] and it'll work!!
@saketshetty
Жыл бұрын
@@azzmaniac4139 When I'm prediction the model based on how you told it's returning an ndarray instead of the label, any idea how to tackle it?
How to use this model for real time image classification ?
how to load our own dataset (pictures/images of objects) instead of using one of the existing dataset of tensorflow?
@KeithGalli
2 жыл бұрын
I personally like using an ImageGenerator & the flow from directory methods in Keras. Here is a link you can read more about that: datascience.stackexchange.com/questions/65979/what-is-the-correct-way-to-call-keras-flow-from-directory-method
Thanks. Why exactly did you keep the red color channel?
@KeithGalli
4 жыл бұрын
Ultimately we could have kept any of the color channels and the performance would remain roughly the same. Each of the color channels would produce a pretty similar grey scale image. No real reason I took red specifically other than I thought it made sense to just use index 0.
@DanielWeikert
4 жыл бұрын
@@KeithGalli ok thanks, so far I have always seen converting the color image to rgb upfront so I was wondering.
While showing the example using "fig = tfds.show_examples(info, ds_train)" It'll not work, it'll just throw an error, this signature has been modified from (info, ds_train) to (ds_train, info), so change it in your code...
Is there a way to train a network with custom objects via webcam and then hold an object into the webcam so it will detect the custom object? I can't find not one tutorial about this:/ If someone know how to do that I would be very very thankful
@KeithGalli
4 жыл бұрын
Hmm, yeah that would be the next logical extension of this tutorial. I don't know when I will get to it, but maybe check out this video series by sentdex: kzread.info/head/PLQVvvaa0QuDcNK5GeCQnxYnSSaar2tpku
Mnist example link in description points to 404 page
keith please make a video about the drawing app i send its cool it took hours to make
do the drawing app i put the code
Why are you using epochs = 5? aren't they a little less?
@joseph3036
3 жыл бұрын
To save some time.
@siddharthmani9588
3 жыл бұрын
@@joseph3036 Is there an ideal number for the total epochs one must run?
@joseph3036
3 жыл бұрын
10 epochs have worked well for me so far, too many epochs will cause overfitting. stackoverflow.com/questions/47421951/keras-optimal-epoch-selection
keith i send you a code on your turtle graphics video its a drawing app can you put it in a video