一、AlexNet
1.导入tensorflow库,这里给简称为tf库
import tensorflow as tf
from tensorflow.keras import datasets, layers, models
datasets:是用于训练和测试机器学习模型的数据集合
layers:是构建神经网络模型的关键组成部分
models:是构建的神经网络架构;用于从数据中学习特征并进行预测
2.加载Fashion-MNIST数据集
(train_images, train_labels), (test_images, test_labels) = datasets.fashion_mnist.load_data()
load_data是一个方法,用来加载数据集
train_images:一个数组,包含了灰度图像,用于训练模型
train_labels: 包含图像数量的整数值,范围从0到9,每个值对应于train_images中相应图像的类别标签
test_images和test_labels与上述说明一致
3.归一化,将像素值范围在[0,1]之间
train_images = train_images / 255.0
test_images = test_images / 255.0
4.数据集的图像是灰度图像,需增加一个颜色通道
train_images = tf.expand_dims(train_images, axis=-1)
test_images = tf.expand_dims(test_images, axis=-1)
train_images的原始形状:(60000,28,28);60000是训练样本的数量
expand_dims用于增加一个新的维度。
axis=-1指定增加新的维度位置。-1表示最后一个轴,即(60000,28,28,1)
test_images同理
5.将标签从整数形式转换为独热编码形式
train_labels = tf.one_hot(train_labels, depth=10)
test_labels = tf.one_hot(test_labels, depth=10)
独热编码是一种将分类数据表示为二进制向量的方法,每个类别对应一个唯一的二进制向量,向量中只有一个元素是1,其余都是0
tf.one_hot()函数将其转换为形状为(60000, 10)的二维数组
test_labels同理
6.创建AlexNet模型
model = models.Sequential([
6.1添加卷积层,该层有32个3x3的卷积核,激活函数为relu,并且指定了输入形状为28x28像素的单通道图像
layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)),
6.2添加一个2x2的最大池化层
layers.MaxPooling2D((2, 2)),
6.3添加第二个卷积层
layers.Conv2D(64, (3, 3), activation='relu'),
layers.MaxPooling2D((2, 2)),
layers.Conv2D(128, (3, 3), activation='relu'),
layers.MaxPooling2D((2, 2)),
6.4将池化层的输出展平为1个一维向量
layers.Flatten(),
6.5添加一个全连接层,该层有128个神经元
layers.Dense(128, activation=‘relu’),
6.6全连接层,有10个神经元,对应数据集的10个类别,激活函数:softmax输出每个类别的概率分布
layers.Dense(10, activation='softmax')
])
7.编译模型
model.compile(optimizer='adam',loss='categorical_crossentropy',metrics=['accuracy'])
参数1:使用了Adam优化器,结合了动量和自适应学习率的优点
参数2:此处使用的损失函数 是一种多分类问题的交叉熵损失函数
参数3:指定在训练过程中要计算的评估指标:这里计算了准确率这个指标
8.训练模型
model.fit(train_images,train_labels,epochs=10,batch_size=64,validation_data=(test_images,test_labels))
model.fit函数作用:执行模型的训练过程
参数1:训练集的图像数据,它是一个四维张量
参数2:训练集的标签数据,它是一个二维张量
参数3:训练过程将进行的完整循环次数
参数4:每次梯度更新时使用的样本数量
参数5:用于验证的测试数据集,可评估性能,避免过拟合
结果:
9.保存模型
model.save('AlexNet.h5')
结果: