Convolutional Neural Network (CNN)

简介: 我自己写的代码和该教程略有不一样,有三处改动,第一个地方是用归一化(均值为0,方差为1)代替数值缩放([0, 1]),代替的理由是能提升准确率第二处改动是添加了正则化,在Conv2D和Dense Layer中均有添加,可以抑制模型过拟合,提升val_acc第三处改动是对模型训练五次进行acc取平均值,因为keras训练模型会有准确率波动,详细代码见文末链接

我自己写的代码和该教程略有不一样,有三处改动,第一个地方是用归一化(均值为0,方差为1)代替数值缩放([0, 1]),代替的理由是能提升准确率

第二处改动是添加了正则化,在Conv2D和Dense Layer中均有添加,可以抑制模型过拟合,提升val_acc

第三处改动是对模型训练五次进行acc取平均值,因为keras训练模型会有准确率波动,详细代码见文末链接

This tutorial demonstrates training a simple Convolutional Neural Network (CNN) to classify CIFAR images. Because this tutorial uses the Keras Sequential API, creating and training your model will take just a few lines of code.

Import TensorFlow

import tensorflow as tf

from tensorflow.keras import datasets, layers, models
import matplotlib.pyplot as plt

Download and prepare the CIFAR10 dataset

The CIFAR10 dataset contains 60,000 color images in 10 classes, with 6,000 images in each class. The dataset is divided into 50,000 training images and 10,000 testing images. The classes are mutually exclusive and there is no overlap between them.

(train_images, train_labels), (test_images, test_labels) = datasets.cifar10.load_data()

# Normalize pixel values to be between 0 and 1
train_images, test_images = train_images / 255.0, test_images / 255.0

Verify the data

To verify that the dataset looks correct, let's plot the first 25 images from the training set and display the class name below each image:

class_names = ['airplane', 'automobile', 'bird', 'cat', 'deer',
               'dog', 'frog', 'horse', 'ship', 'truck']

plt.figure(figsize=(10,10))
for i in range(25):
    plt.subplot(5,5,i+1)
    plt.xticks([])
    plt.yticks([])
    plt.grid(False)
    plt.imshow(train_images[i])
    # The CIFAR labels happen to be arrays, 
    # which is why you need the extra index
    plt.xlabel(class_names[train_labels[i][0]])
plt.show()

Create the convolutional base

The 6 lines of code below define the convolutional base using a common pattern: a stack of Conv2D and MaxPooling2D layers.

As input, a CNN takes tensors of shape (image_height, image_width, color_channels), ignoring the batch size. If you are new to these dimensions, color_channels refers to (R,G,B). In this example, you will configure your CNN to process inputs of shape (32, 32, 3), which is the format of CIFAR images. You can do this by passing the argument input_shape to your first layer.

model = models.Sequential()
model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))

Let's display the architecture of your model so far:

model.summary()

Above, you can see that the output of every Conv2D and MaxPooling2D layer is a 3D tensor of shape (height, width, channels). The width and height dimensions tend to shrink as you go deeper in the network. The number of output channels for each Conv2D layer is controlled by the first argument (e.g., 32 or 64). Typically, as the width and height shrink, you can afford (computationally) to add more output channels in each Conv2D layer.

Add Dense layers on top

To complete the model, you will feed the last output tensor from the convolutional base (of shape (4, 4, 64)) into one or more Dense layers to perform classification. Dense layers take vectors as input (which are 1D), while the current output is a 3D tensor. First, you will flatten (or unroll) the 3D output to 1D, then add one or more Dense layers on top. CIFAR has 10 output classes, so you use a final Dense layer with 10 outputs.

model.add(layers.Flatten())
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(10))

Here's the complete architecture of your model:

model.summary()

The network summary shows that (4, 4, 64) outputs were flattened into vectors of shape (1024) before going through two Dense layers.

Compile and train the model

model.compile(optimizer='adam',
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
              metrics=['accuracy'])

history = model.fit(train_images, train_labels, epochs=10, 
                    validation_data=(test_images, test_labels))

Evaluate the model

plt.plot(history.history['accuracy'], label='accuracy')
plt.plot(history.history['val_accuracy'], label = 'val_accuracy')
plt.xlabel('Epoch')
plt.ylabel('Accuracy')
plt.ylim([0.5, 1])
plt.legend(loc='lower right')

test_loss, test_acc = model.evaluate(test_images,  test_labels, verbose=2)
print(test_acc)

代码链接: https://codechina.csdn.net/csdn_codechina/enterprise_technology/-/blob/master/CV_Classification/Convolutional%20Neural%20Network%20(CNN).ipynb

目录
相关文章
|
8月前
|
机器学习/深度学习 PyTorch 算法框架/工具
【PyTorch】Neural Network 神经网络(上)
【PyTorch】Neural Network 神经网络(上)
42 0
|
6月前
|
机器学习/深度学习 自然语言处理 TensorFlow
Recurrent Neural Network,简称 RNN
循环神经网络(Recurrent Neural Network,简称 RNN)是一种神经网络,其特点是具有循环结构,可以对序列数据进行建模。RNN 通过将序列数据分解为多个时间步,并在每个时间步使用相同的神经网络结构对数据进行处理,从而能够捕捉序列数据中的时间依赖关系。
38 6
|
6月前
|
机器学习/深度学习 TensorFlow 语音技术
Convolutional Neural Network,简称 CNN
卷积神经网络(Convolutional Neural Network,简称 CNN)是一种深度学习模型,主要用于图像识别、物体检测、语音识别等任务。CNN 通过局部感知、权值共享和下采样等操作,能够有效地提取图像特征,从而实现对图像的分类和识别。
61 4
|
7月前
|
机器学习/深度学习 数据采集 算法
卷积神经网络(Convolutional Neural Network
机器学习是一种人工智能技术,通过让计算机从数据中学习和提取规律,从而实现对未知数据的预测和决策。卷积神经网络(Convolutional Neural Network,简称 CNN)是机器学习中的一种方法,主要应用于图像识别、语音识别、文本处理等领域。
76 4
|
7月前
|
机器学习/深度学习 数据采集 自然语言处理
循环神经网络(Recurrent Neural Network,
循环神经网络(Recurrent Neural Network,简称 RNN)是机器学习中的一种神经网络结构,主要应用于处理序列数据和具有时序性的数据。与传统的前向神经网络不同,RNN 具有循环结构,可以捕捉时间序列数据中的依赖关系,从而更好地处理时序数据。
73 2
|
8月前
|
机器学习/深度学习 PyTorch TensorFlow
卷积神经网络(Convolutional Neural Network,CNN)
卷积神经网络(Convolutional Neural Network,CNN)是一种深度学习模型,特别适用于处理具有网格结构的数据,如图像和语音等。CNN的核心思想是通过卷积操作和池化操作来提取输入数据的特征,并通过全连接层进行分类或回归任务。
92 0
|
8月前
|
机器学习/深度学习 自然语言处理 PyTorch
循环神经网络(Recurrent Neural Network,RNN)
循环神经网络(Recurrent Neural Network,RNN)是一种具有循环连接的神经网络结构,专门用于处理序列数据,如语音、文本、时间序列等。与传统的前馈神经网络不同,RNN在网络中引入了状态变量,使得网络可以记忆先前的信息,并在处理后续输入时使用该信息。这种记忆能力使得RNN在建模时序数据和处理时序任务方面表现出色。
174 1
|
8月前
|
机器学习/深度学习 PyTorch 算法框架/工具
【PyTorch】Neural Network 神经网络(下)
【PyTorch】Neural Network 神经网络(下)
34 0
|
机器学习/深度学习 大数据
【文本分类】Deep Pyramid Convolutional Neural Networks for Text Categorization
【文本分类】Deep Pyramid Convolutional Neural Networks for Text Categorization
107 0
【文本分类】Deep Pyramid Convolutional Neural Networks for Text Categorization
|
机器学习/深度学习 存储 人工智能
【文本分类】Recurrent Convolutional Neural Networks for Text Classification
【文本分类】Recurrent Convolutional Neural Networks for Text Classification
【文本分类】Recurrent Convolutional Neural Networks for Text Classification

热门文章

最新文章