Tensorflow2.* 机器学习基础知识篇:

  1. 对服装图像进行分类
  2. 使用Tensorflow Hub对未处理的电影评论数据集IMDB进行分类
  3. Keras 机器学习基础知识之对预处理的电影评论文本分类
  4. Tensorflow2.*教程之使用Auto MPG数据集构建回归模型预测燃油率

Tensorflow2.* 加载和预处理数据篇:

  1. Tensorflow2.* 加载和预处理数据之用 tf.data 加载 CSV 数据
  2. Tensorflow2.* 加载和预处理数据之用 tf.data 加载 Numpy数据
  3. Tensorflow2.* 加载和预处理数据之用 tf.data 加载pandas dataframes类型数据
  4. Tensorflow2.* 加载和预处理数据之用 tf.data 加载磁盘图片数据

Tensorflow2.* 计算机视觉之图像分类篇:

  1. Tensorflow2.* 计算机视觉之图像分类之利用卷积网络对Cifar10数据集进行分类

       我在之前博客中介绍了Tensorflow2.*机器学知识篇和数据加载和预处理篇。今天,我将开始对人工智能之计算机视觉的图像分类任务进行介绍。计算机视觉的主要研究方向有:图像分类,图像分割,目标检测,这也是业界发展的主流方向。与此同时,近年来,各个研究方向的网络结构在学界顶级会议和核心期刊上频频被提出,识别精度越来越高。在后续博客中,我会对上面三个主要任务进行示例介绍,今天介绍其中一个研究方向图像分类。

       本文使用Keras Sequential API,创建和训练简单的卷积神经网络(CNN)来对CIFAR10图像进行分类。使用代码为python代码。

导入具体的类库

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

Cifar10数据集介绍

CIFAR10数据集是包含10类60,000张彩色图像,每类6,000张图像。数据集分为50,000个训练图像和10,000个测试图像。这些类是互斥的,并且它们之间没有重叠。具体类别如下图。每个图像的大小为(32、32、3)的彩色图像。

(train_examples,train_labels),(test_examples,test_labels) = datasets.cifar10.load_data()
# 对像素值进行归一化处理
train_examples, test_examples = train_examples / 255.0, test_examples / 255.0

可视化图像数据

class_name = ['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.grid(False)
    plt.xticks([])
    plt.yticks([])
    plt.imshow(train_examples[i],cmap=plt.cm.binary)
    plt.xlabel(class_name[train_labels[i][0]])

plt.show()

基于CNN模型构建

我们使用卷积对图像数据进行特征提取,卷积构建的网络由于具有局部连接和参数共享两个特性,使得其比全连接层构建的网络参数量大大降低,一定程度上缓解了模型的过拟合。与此同时,不同的卷积提取的特征使得图像特征多样化,相比手工特征更加鲁棒。本次实验,我们搭建一个8层网络对图像进行分类,具体使用tensorflow.keras.layers下的API进行网络模型的构建。

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'))
model.add(layers.Flatten())
model.add(layers.Dense(64,activation='relu'))
model.add(layers.Dense(10))

查看模型结构

model.summary()

编译和训练模型

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

history = model.fit(train_examples,train_labels,epochs=20,validation_data=(test_examples,test_labels))

 Epoch 1/10
50000/50000 [==============================]-7s 143us / sample-loss:1.5035-accuracy:0.4486-val_loss :1.2330-val_accuracy:0.5557
Epoch 2/10
50000/50000 [==============================]-5s 100us / sample-loss:1.1524-accuracy:0.5906-val_loss :1.0455-val_accuracy:0.6366
Epoch 3/10
50000/50000 [==============================]-5s 100us / sample-loss:1.0039-accuracy:0.6481-val_loss :0.9967-val_accuracy:0.6479
Epoch 4/10
50000/50000 [==============================]-5s 100us / sample-loss:0.9030-accuracy:0.6813-val_loss :0.9582-val_accuracy:0.6704
Epoch 5/10
50000/50000 [==============================]-5s 99us / sample-loss:0.8271-accuracy:0.7103-val_loss :0.8902-val_accuracy:0.6943
Epoch 6/10
50000/50000 [==============================]-5s 99us / sample-loss:0.7672-accuracy:0.7318-val_loss :0.9086-val_accuracy:0.6903
Epoch 7/10
50000/50000 [==============================]-5s 99us / sample-loss:0.7170-accuracy:0.7476-val_loss :0.8611-val_accuracy:0.7042
Epoch 8/10
50000/50000 [==============================]-5s 100us / sample-loss:0.6702-accuracy:0.7639-val_loss :0.8784-val_accuracy:0.6988
Epoch 9/10
50000/50000 [==============================]-5s 100us / sample-loss:0.6300-accuracy:0.7786-val_loss :0.8937-val_accuracy:0.7007
Epoch 10/10
50000/50000 [==============================]-5s 99us / sample-loss:0.5889-accuracy:0.7910-val_loss :0.8861-val_accuracy:0.7052

模型评估

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_examples,test_labels,verbose=2)

 

打印预测精度 

print(test_acc)

10000/10000 - 2s - loss: 1.1571 - accuracy: 0.7114

下一篇:构建卷积网络对猫或狗进行分类 

Logo

一站式 AI 云服务平台

更多推荐