Tensorflow利用卷积神经网络实现图片分类

Posted geeksongs

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Tensorflow利用卷积神经网络实现图片分类相关的知识,希望对你有一定的参考价值。

tensorflow搭建卷积神经网络非常简单,我们使用卷积神经网络对fashion mnist数据集进行图片分类,首先导包:

import tensorflow as tf
from tensorflow import keras
import matplotlib.pyplot as plt
import numpy as np

导入数据集:

(train_image,train_label),(test_image,test_label)=tf.keras.datasets.fashion_mnist.load_data()

查看图片的shape维度:

train_image.shape

输出:

(60000, 28, 28)

由于我们卷积神经网络需要的是四维的数据,也就是一共需要有四个维度,分别是(图片,横向像素,竖直方向的像素,channel)。

这个数据集里面的图像均为三维的矩阵,且为黑白图片,因此channel为1,如果是RGB的彩色图片的话,channel为3.因此我们把三维的图片变成4维的图片,利用numpy即可:

train_image=np.expand_dims(train_image,-1)
test_image=np.expand_dims(test_image,-1)

然后开始搭建卷积神经网络,我试了试自己的这个模型,做出来的结果甚至比Yun lekun提出的lenet5神经网络更好。搭建神经网络的架构如下:

model.add(tf.keras.layers.Conv2D(32,(3,3),
                                 input_shape=train_image.shape[1:],
                                 activation="relu",
                                 padding="same"))
#添加maxpooling层是因为在之后同样的卷积核能够提取的特征更多,增大“感受野”
model.add(tf.keras.layers.MaxPool2D())
model.add(tf.keras.layers.Conv2D(64,(3,3),activation="relu"))
model.add(tf.keras.layers.GlobalAveragePooling2D())
model.add(tf.keras.layers.Dense(10,activation=softmax))

编译模型:

model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.001),
              loss="sparse_categorical_crossentropy",
              metrics=[acc]
)

得到图像的分类结果,并绘制loss函数变化的图像,用来分析是否模型是否过拟合:

plt.plot(history.epoch,history.history.get(loss),label="loss")
plt.plot(history.epoch,history.history.get(val_loss),label="val_loss")
plt.legend()

得解。

以上是关于Tensorflow利用卷积神经网络实现图片分类的主要内容,如果未能解决你的问题,请参考以下文章

tensorflow训练自己的数据集实现CNN图像分类

利用Tensorflow实现卷积神经网络模型

卷积神经网络CNN原理以及TensorFlow实现

Tensorflow学习教程------利用卷积神经网络对mnist数据集进行分类_训练模型

卷积神经网络CNN原理以及TensorFlow实现

卷积神经网络CNN原理以及TensorFlow实现