Complete Guide to Build Your First CNN Machine Learning Model in Python

In this blog post, we will walk through a step-by-step guide on how to build your first Convolutional Neural Network (CNN) machine learning model in Python. CNNs are widely used for image recognition and classification tasks due to their ability to capture spatial hierarchies in data.

Step 1: Import Necessary Libraries

First, let’s import the required libraries for building our CNN model:

<span>import</span> <span>numpy</span> <span>as</span> <span>np</span>
<span>import</span> <span>matplotlib.pyplot</span> <span>as</span> <span>plt</span>
<span>from</span> <span>keras.models</span> <span>import</span> <span>Sequential</span>
<span>from</span> <span>keras.layers</span> <span>import</span> <span>Conv2D</span><span>,</span> <span>MaxPooling2D</span><span>,</span> <span>Flatten</span><span>,</span> <span>Dense</span>
<span>from</span> <span>keras.datasets</span> <span>import</span> <span>mnist</span>
<span>from</span> <span>keras.utils</span> <span>import</span> <span>to_categorical</span>
<span>import</span> <span>numpy</span> <span>as</span> <span>np</span>
<span>import</span> <span>matplotlib.pyplot</span> <span>as</span> <span>plt</span>
<span>from</span> <span>keras.models</span> <span>import</span> <span>Sequential</span>
<span>from</span> <span>keras.layers</span> <span>import</span> <span>Conv2D</span><span>,</span> <span>MaxPooling2D</span><span>,</span> <span>Flatten</span><span>,</span> <span>Dense</span>
<span>from</span> <span>keras.datasets</span> <span>import</span> <span>mnist</span>
<span>from</span> <span>keras.utils</span> <span>import</span> <span>to_categorical</span>
import numpy as np import matplotlib.pyplot as plt from keras.models import Sequential from keras.layers import Conv2D, MaxPooling2D, Flatten, Dense from keras.datasets import mnist from keras.utils import to_categorical

Enter fullscreen mode Exit fullscreen mode

Step 2: Load and Preprocess Data

For this demo, we will use the MNIST dataset, which consists of handwritten digits. Let’s load the dataset and preprocess the data:

<span># Load the MNIST dataset </span><span>(</span><span>x_train</span><span>,</span> <span>y_train</span><span>),</span> <span>(</span><span>x_test</span><span>,</span> <span>y_test</span><span>)</span> <span>=</span> <span>mnist</span><span>.</span><span>load_data</span><span>()</span>
<span># Normalize the pixel values to be between 0 and 1 </span><span>x_train</span> <span>=</span> <span>x_train</span><span>.</span><span>astype</span><span>(</span><span>'</span><span>float32</span><span>'</span><span>)</span> <span>/</span> <span>255</span>
<span>x_test</span> <span>=</span> <span>x_test</span><span>.</span><span>astype</span><span>(</span><span>'</span><span>float32</span><span>'</span><span>)</span> <span>/</span> <span>255</span>
<span># Reshape the input data </span><span>x_train</span> <span>=</span> <span>np</span><span>.</span><span>expand_dims</span><span>(</span><span>x_train</span><span>,</span> <span>axis</span><span>=-</span><span>1</span><span>)</span>
<span>x_test</span> <span>=</span> <span>np</span><span>.</span><span>expand_dims</span><span>(</span><span>x_test</span><span>,</span> <span>axis</span><span>=-</span><span>1</span><span>)</span>
<span># One-hot encode the target labels </span><span>y_train</span> <span>=</span> <span>to_categorical</span><span>(</span><span>y_train</span><span>,</span> <span>10</span><span>)</span>
<span>y_test</span> <span>=</span> <span>to_categorical</span><span>(</span><span>y_test</span><span>,</span> <span>10</span><span>)</span>
<span># Load the MNIST dataset </span><span>(</span><span>x_train</span><span>,</span> <span>y_train</span><span>),</span> <span>(</span><span>x_test</span><span>,</span> <span>y_test</span><span>)</span> <span>=</span> <span>mnist</span><span>.</span><span>load_data</span><span>()</span>

<span># Normalize the pixel values to be between 0 and 1 </span><span>x_train</span> <span>=</span> <span>x_train</span><span>.</span><span>astype</span><span>(</span><span>'</span><span>float32</span><span>'</span><span>)</span> <span>/</span> <span>255</span>
<span>x_test</span> <span>=</span> <span>x_test</span><span>.</span><span>astype</span><span>(</span><span>'</span><span>float32</span><span>'</span><span>)</span> <span>/</span> <span>255</span>

<span># Reshape the input data </span><span>x_train</span> <span>=</span> <span>np</span><span>.</span><span>expand_dims</span><span>(</span><span>x_train</span><span>,</span> <span>axis</span><span>=-</span><span>1</span><span>)</span>
<span>x_test</span> <span>=</span> <span>np</span><span>.</span><span>expand_dims</span><span>(</span><span>x_test</span><span>,</span> <span>axis</span><span>=-</span><span>1</span><span>)</span>

<span># One-hot encode the target labels </span><span>y_train</span> <span>=</span> <span>to_categorical</span><span>(</span><span>y_train</span><span>,</span> <span>10</span><span>)</span>
<span>y_test</span> <span>=</span> <span>to_categorical</span><span>(</span><span>y_test</span><span>,</span> <span>10</span><span>)</span>
# Load the MNIST dataset (x_train, y_train), (x_test, y_test) = mnist.load_data() # Normalize the pixel values to be between 0 and 1 x_train = x_train.astype('float32') / 255 x_test = x_test.astype('float32') / 255 # Reshape the input data x_train = np.expand_dims(x_train, axis=-1) x_test = np.expand_dims(x_test, axis=-1) # One-hot encode the target labels y_train = to_categorical(y_train, 10) y_test = to_categorical(y_test, 10)

Enter fullscreen mode Exit fullscreen mode

Step 3: Build the CNN Model

Now, let’s build our CNN model with the following architecture:

  • Convolutional layer with 32 filters, kernel size of 3×3, and ReLU activation
  • Max pooling layer with pool size of 2×2
  • Flatten layer to convert 2D feature maps to 1D
  • Dense layer with 128 units and ReLU activation
  • Output layer with 10 units (number of classes) and softmax activation
<span>model</span> <span>=</span> <span>Sequential</span><span>([</span>
<span>Conv2D</span><span>(</span><span>32</span><span>,</span> <span>(</span><span>3</span><span>,</span> <span>3</span><span>),</span> <span>activation</span><span>=</span><span>'</span><span>relu</span><span>'</span><span>,</span> <span>input_shape</span><span>=</span><span>(</span><span>28</span><span>,</span> <span>28</span><span>,</span> <span>1</span><span>)),</span>
<span>MaxPooling2D</span><span>((</span><span>2</span><span>,</span> <span>2</span><span>)),</span>
<span>Flatten</span><span>(),</span>
<span>Dense</span><span>(</span><span>128</span><span>,</span> <span>activation</span><span>=</span><span>'</span><span>relu</span><span>'</span><span>),</span>
<span>Dense</span><span>(</span><span>10</span><span>,</span> <span>activation</span><span>=</span><span>'</span><span>softmax</span><span>'</span><span>)</span>
<span>])</span>
<span>model</span><span>.</span><span>compile</span><span>(</span><span>optimizer</span><span>=</span><span>'</span><span>adam</span><span>'</span><span>,</span> <span>loss</span><span>=</span><span>'</span><span>categorical_crossentropy</span><span>'</span><span>,</span> <span>metrics</span><span>=</span><span>[</span><span>'</span><span>accuracy</span><span>'</span><span>])</span>
<span>model</span> <span>=</span> <span>Sequential</span><span>([</span>
    <span>Conv2D</span><span>(</span><span>32</span><span>,</span> <span>(</span><span>3</span><span>,</span> <span>3</span><span>),</span> <span>activation</span><span>=</span><span>'</span><span>relu</span><span>'</span><span>,</span> <span>input_shape</span><span>=</span><span>(</span><span>28</span><span>,</span> <span>28</span><span>,</span> <span>1</span><span>)),</span>
    <span>MaxPooling2D</span><span>((</span><span>2</span><span>,</span> <span>2</span><span>)),</span>
    <span>Flatten</span><span>(),</span>
    <span>Dense</span><span>(</span><span>128</span><span>,</span> <span>activation</span><span>=</span><span>'</span><span>relu</span><span>'</span><span>),</span>
    <span>Dense</span><span>(</span><span>10</span><span>,</span> <span>activation</span><span>=</span><span>'</span><span>softmax</span><span>'</span><span>)</span>
<span>])</span>

<span>model</span><span>.</span><span>compile</span><span>(</span><span>optimizer</span><span>=</span><span>'</span><span>adam</span><span>'</span><span>,</span> <span>loss</span><span>=</span><span>'</span><span>categorical_crossentropy</span><span>'</span><span>,</span> <span>metrics</span><span>=</span><span>[</span><span>'</span><span>accuracy</span><span>'</span><span>])</span>
model = Sequential([ Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)), MaxPooling2D((2, 2)), Flatten(), Dense(128, activation='relu'), Dense(10, activation='softmax') ]) model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])

Enter fullscreen mode Exit fullscreen mode

Step 4: Train and Evaluate the Model

Next, let’s train the model on the training data and evaluate its performance on the test data:

<span>model</span><span>.</span><span>fit</span><span>(</span><span>x_train</span><span>,</span> <span>y_train</span><span>,</span> <span>batch_size</span><span>=</span><span>128</span><span>,</span> <span>epochs</span><span>=</span><span>5</span><span>,</span> <span>validation_data</span><span>=</span><span>(</span><span>x_test</span><span>,</span> <span>y_test</span><span>))</span>
<span>loss</span><span>,</span> <span>accuracy</span> <span>=</span> <span>model</span><span>.</span><span>evaluate</span><span>(</span><span>x_test</span><span>,</span> <span>y_test</span><span>)</span>
<span>print</span><span>(</span><span>f</span><span>'</span><span>Test loss: </span><span>{</span><span>loss</span><span>}</span><span>'</span><span>)</span>
<span>print</span><span>(</span><span>f</span><span>'</span><span>Test accuracy: </span><span>{</span><span>accuracy</span><span>}</span><span>'</span><span>)</span>
<span>model</span><span>.</span><span>fit</span><span>(</span><span>x_train</span><span>,</span> <span>y_train</span><span>,</span> <span>batch_size</span><span>=</span><span>128</span><span>,</span> <span>epochs</span><span>=</span><span>5</span><span>,</span> <span>validation_data</span><span>=</span><span>(</span><span>x_test</span><span>,</span> <span>y_test</span><span>))</span>

<span>loss</span><span>,</span> <span>accuracy</span> <span>=</span> <span>model</span><span>.</span><span>evaluate</span><span>(</span><span>x_test</span><span>,</span> <span>y_test</span><span>)</span>
<span>print</span><span>(</span><span>f</span><span>'</span><span>Test loss: </span><span>{</span><span>loss</span><span>}</span><span>'</span><span>)</span>
<span>print</span><span>(</span><span>f</span><span>'</span><span>Test accuracy: </span><span>{</span><span>accuracy</span><span>}</span><span>'</span><span>)</span>
model.fit(x_train, y_train, batch_size=128, epochs=5, validation_data=(x_test, y_test)) loss, accuracy = model.evaluate(x_test, y_test) print(f'Test loss: {loss}') print(f'Test accuracy: {accuracy}')

Enter fullscreen mode Exit fullscreen mode

Conclusion

Congratulations! You have successfully built your first CNN machine learning model in Python using Keras. CNNs are powerful tools for image classification tasks, and with this guide, you are now equipped to explore more advanced CNN architectures and datasets. Happy coding!

Feel free to reach out if you have any questions or need further assistance.

原文链接:Complete Guide to Build Your First CNN Machine Learning Model in Python

© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享
So what if we fall down? At least we are still young.
摔倒了又怎样,至少我们还年轻
评论 抢沙发

请登录后发表评论

    暂无评论内容