卷积
卷积方式
卷积效果
垂直线清晰可见:
水平线清晰可见:
池化
将图像中的像素分组并过滤到一个子集合中。
池化方式:
例子:2×2最大池化,选择2×2矩阵中的最大值,并构成新的矩阵。
池化效果
尺寸缩小四倍,图像特征被保留,甚至被增强。
特征提取
用于卷积和池化的过滤器也是学习得到的,这个过程被称为特征提取。
图:Dense是随机初始化的,在学习过程中,回不断选出那些给出最佳预测的过滤器。
我的第一个卷积神经网络模型
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
fashion_mnist = keras.datasets.fashion_mnist
(train_images, train_labels), (test_images, test_labels) = fashion_mnist.load_data()
# 定义模型
model = keras.Sequential([
layers.Conv2D(64, (3, 3), activation='relu',
input_shape=(28, 28, 1)), # 输入28*28的图片
# 64个滤波器
layers.MaxPool2D(2, 2), # 最大池化
layers.Conv2D(64, (3, 3), activation='relu'),
layers.MaxPool2D(2, 2),
layers.Flatten(),
layers.Dense(128, activation=tf.nn.relu), # 调参
# 128个计算函数(此处的“计算函数”并非准确术语)
# activation: 激活函数
# relu:线性整流函数,当数值大于零,则返回该数,否则返回零
layers.Dense(10, activation=tf.nn.softmax) # 输出0-10的编号
# softmax: 将一个数组中最大值修改为1,其他修改为0
])
# 编译模型
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy')
# 开始训练
model.fit(train_images, train_labels, epochs=10)
经过10
次训练,模型的准确度达到了98.8%
,相比起之前单纯采集原始图像特征,准确度提升了4.4%
。这是因为通过卷积和池化,机器能够学到更加抽象的特征,而不只是停留在原始像素上。
以上图片均来自TensorFlow