TensorFlow官方入门实操课程-卷积神经网络

知识点

卷积:用原始像素数据与过滤器中的值相乘,以后加起来。
TensorFlow官方入门实操课程-卷积神经网络_第1张图片
如下是增强水平特征的过滤器。
TensorFlow官方入门实操课程-卷积神经网络_第2张图片
MaxPooling:每次卷积结束以后用一个MaxPooling用来增强图像的特征。
TensorFlow官方入门实操课程-卷积神经网络_第3张图片
可以看出经过MaxPooling以后的图像,竖直特征增强了很多,像素也小了一半。
TensorFlow官方入门实操课程-卷积神经网络_第4张图片

程序构建卷积神经网络

以下是导入库以及数据

#设置显卡内存使用率,根据使用率占用
import os
os.environ["TF_FORCE_GPU_ALLOW_GROWTH"] = "true"
#引入必要的库
import tensorflow as tf
print(tf.__version__)
from tensorflow import keras
import matplotlib.pyplot as plt
%matplotlib inline
import seaborn as sns       #基于matplotlib绘制图像封装的
import numpy as np


fashion_mnist = keras.datasets.fashion_mnist  #导入数据集
(train_images,train_labels),(test_images,test_labels) = fashion_mnist.load_data()  #导入数据集

以下是构建神经网络模型

model = keras.Sequential()  #创建一个前向传播模型
#输入层,平铺展开,28*28个参数输入
model.add(keras.layers.Conv2D(64,(3,3),#添加一个卷积层64个过滤器,每个过滤器的尺寸3*3
          activation = tf.nn.relu,         #添加激活函数
          input_shape = (28,28,1))      #输入参数为28*28*1一个通道的数据
         )
model.add(keras.layers.MaxPooling2D(2,2))

#第二层卷积
model.add(keras.layers.Conv2D(64,(3,3),#添加一个卷积层64个过滤器,每个过滤器的尺寸3*3
          activation = tf.nn.relu)         #添加激活函数
         )
model.add(keras.layers.MaxPooling2D(2,2))

model.add(keras.layers.Flatten()) #展开层
model.add(keras.layers.Dense(128,activation=tf.nn.relu))
#输出层使用softmax做分类
model.add(keras.layers.Dense(10,activation=tf.nn.softmax))

model.summary()  #展示层的样子
#第一层 卷积少两个像素26*26  (3*3+1)*64
#第二层 MaxPooling 长宽变成1/4
#第三层 再少两个像素
#

TensorFlow官方入门实操课程-卷积神经网络_第5张图片

开始训练

#为模型装配优化器,损失函数
train_images_scaled = train_images/255 #归一化变成0~1之间数
#使用Adam优化器,交叉熵损失函数
model.compile(optimizer=tf.optimizers.Adam(),loss=tf.losses.sparse_categorical_crossentropy,metrics=['accuracy'])
history = model.fit(train_images_scaled.reshape(-1,28,28,1),  #按照列来变成n*28*28,-1,表示由世纪情况而定
                    train_labels,epochs=20,
                    validation_split=0.3,shuffle=True
                   )

TensorFlow官方入门实操课程-卷积神经网络_第6张图片
绘制训练结果

epochs = len(history.history['loss']) #获取X轴长度

fig, axes = plt.subplots(2, sharex=True, figsize=(12, 8))
fig.suptitle('Training Metrics')

axes[0].set_ylabel("Loss", fontsize=14)
axes[0].set_xlabel("Epoch", fontsize=14)
axes[0].plot(range(epochs),history.history['loss'], label='Loss')
axes[0].plot(range(epochs),history.history['val_loss'], label='Loss')
plt.legend()

axes[1].set_ylabel("Accuracy(%)", fontsize=14)
axes[1].set_xlabel("Epoch", fontsize=14)
axes[1].plot(range(epochs),history.history['accuracy'], label='Accuracy')
axes[1].plot(range(epochs),history.history['val_accuracy'], label='Val_accuracy')
# plt.savefig('./epoch.jpg')
# plt.suptitle('自定义图表', fontsize=400, ha='center')  # 即标题在x轴和y轴形成的方框内部,如下图(详细用法见下注释)。如果需要标题在这上方,使用 plt.title(blabla) 
plt.legend()
plt.show()

可以看到卷积神经网络的训练,准确率比全连接的高很多。
TensorFlow官方入门实操课程-卷积神经网络_第7张图片

你可能感兴趣的:(人工智能,深度学习)