欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

十二 Keras卷积神经网络实例

程序员文章站 2024-03-14 12:20:16
...

数据处理

import tensorflow as tf
import keras
from keras import layers

下载数据集(用vpn)

import keras.datasets.mnist as mnist
(train_image, train_label), (test_image, test_label) = mnist.load_data()

十二 Keras卷积神经网络实例
查看训练集

train_image.shape

十二 Keras卷积神经网络实例
训练集是60000张28*28像素的图片组成

图像的数据的shape
hight width channel(黑白图像是1,彩色图像是3)

conv2d 要求数据是一个高 宽 channel 形状的图像
conv2d:图片输入形状:batch(有多少张图片) ,高,宽, channel
为了给conv2d输入图像,我们需要将图片扩宽一个用来表示channel的维度
dense:图片输入形状:batch(有多少张图片) ,data

train_image = np.expand_dims(train_image, axis=-1) ##axis=-1表示在最后一个维度上扩增

此时再看训练集图像形状

在这里插入代码片

十二 Keras卷积神经网络实例
此时变为一个四维数据形状
测试集也扩宽维度

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

初始化模型

model = keras.Sequential()

添加层,构建网络

##卷积层
model.add(layers.Conv2D(64, (3, 3), activation='relu', input_shape=(28, 28, 1), name='conv_1'))
##64个卷积核,体现在channel会从变为64,(3,3)是卷积核大小为3*3,卷积函数relu,输入数据形状填后三个维度
model.add(layers.Conv2D(64, (3, 3), activation='relu', name='conv_2'))
##添加第二层就不用填输入形状了
##池化层
model.add(layers.MaxPooling2D(pool_size=(2, 2)))
##MaxPooling2D默认就可以,这一行也可以写model.add(layers.MaxPooling2D(pool_size=()))
##数据扁平化变成二维形状从而输入到layers层
model.add(layers.Flatten())
model.add(layers.Dense(256, activation='relu', name='dense_1'))
model.add(layers.Dropout(0.5))
model.add(layers.Dense(10, activation='softmax', name='dense_2'))
model.summary()

十二 Keras卷积神经网络实例
可以看到第一层网络输出为(26,26,64),卷积核不能被28整除,所以图像会减小一些
可以看到第一层网络输出为(24,24,64),卷积核不能被28整除,所以图像会减小一些
第三层池化操作输出为(12,12,64)
第四层扁平化操作将三维数据变为二维数据
第五层Dense
第六层Droupout层
第七层Dense层输出10个单元

编译模型

model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',##对应的label是0123456789顺序编码所以用这个
              metrics=['accuracy'])

训练模型

model.fit(train_image, train_label, epochs=3, batch_size=512)

训练时间花费很长时间,超过三次
十二 Keras卷积神经网络实例

模型评估及预测

model.evaluate(test_image, test_label)

十二 Keras卷积神经网络实例
测试集上的准确率也很高,比之前的Dense要高.

model.evaluate(test_image, test_label)

十二 Keras卷积神经网络实例
测试集上准确率也很高
预测前十张图片

np.argmax(model.predict(test_image[:10]), axis=1)

十二 Keras卷积神经网络实例
实际前十张图片

test_label[:10]

十二 Keras卷积神经网络实例
可以看出结果预测全对
argmax() :
十二 Keras卷积神经网络实例
十二 Keras卷积神经网络实例

 np.argmax(model.predict(test_image[:10]), axis=1)

表示输出前十张图片中,每张图片对应的最大概率值的索引。

相关标签: Keras 深度学习