基于keras的Fashion_mnist 分类

题目要求:

在“竞赛资料\第三部分\任务一”提供的 TensorFlow 模型构建代码 中找到并修改设定以下参数:

1.读取 keras.datasets内置数据集 Fashion_mnist,使用 matplotlib 以子图的形式查看 10 张 Fashion_mnist 图片,将查看的图片截图保 存到答题卡指定位置。

2.使用 Tensorflow 构建神经网络,要求至少包含 4 个卷积层(Conv), 并使用 model.summary()将模型结构打印输出,将输出的模型结构截 图保存到答题卡指定位置。

3.定义损失函数和优化器,以及对数据进行数据增强操作,开始模型 训练,将训练过程截图保存到答题卡指定位置。

4.完成训练后使用 matplotlib 绘制 accuracy 变化图和 loss 变化图 并输出最高的 accuracy 值,要求不低于(0.8),将 accuracy 图以 及输出的 accuracy 值截图保存到答题卡指定位置。


不同于MNIST手写数据集,Fashion-MNIST数据集包含了10个类别的图像,分别是:t-shirt(T恤),trouser(牛仔裤),pullover(套衫),dress(裙子),coat(外套),sandal(凉鞋),shirt(衬衫),sneaker(运动鞋),bag(包),ankle boot(短靴)。

1.读取 Fashion_mnist 数据集并可视化

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
import matplotlib.pyplot as plt

# 加载数据集
(x_train, y_train), (x_test, y_test) = keras.datasets.fashion_mnist.load_data()

# 将图像标准化
x_train = x_train.astype("float32") / 255.0
x_test = x_test.astype("float32") / 255.0

# 可视化前十张图片
plt.figure(figsize=(10, 10))
for i in range(10):
    plt.subplot(5, 5, i + 1)
    plt.xticks([])
    plt.yticks([])
    plt.grid(False)
    plt.imshow(x_train[i], cmap=plt.cm.binary)
plt.show()

2.使用 Tensorflow 构建神经网络,并打印模型结构

# 构建神经网络模型
model = keras.Sequential([
    keras.layers.Reshape(target_shape=(28, 28, 1), input_shape=(28, 28)),
    keras.layers.Conv2D(filters=32, kernel_size=(3, 3), padding="same",activation="relu"),
    keras.layers.MaxPooling2D(pool_size=(2, 2)),
    keras.layers.Conv2D(filters=64, kernel_size=(3, 3), padding="same",activation="relu"),
    keras.layers.MaxPooling2D(pool_size=(2, 2)),
    keras.layers.Conv2D(filters=128, kernel_size=(3, 3), padding="same",activation="relu"),
    keras.layers.MaxPooling2D(pool_size=(2, 2)),
    keras.layers.Conv2D(filters=256, kernel_size=(3, 3),padding="same", activation="relu"),
    keras.layers.MaxPooling2D(pool_size=(2, 2)),
    keras.layers.Flatten(),
    keras.layers.Dense(512, activation="relu"),
    keras.layers.Dropout(0.5),
    keras.layers.Dense(10, activation="softmax")
])

# 打印模型结构
model.summary()

这段代码构建了一个卷积神经网络(Convolutional Neural Network, CNN)模型,用于对图像进行分类。

具体来说,该模型包括四个卷积层和两个全连接层,其中卷积层用于提取图像的特征,全连接层则用于将提取出的特征映射到具体的类别。

在输入数据之前,首先将其 Reshape 成为形状为 (28, 28, 1) 的 Tensor,其中最后一维表示通道数。然后,通过四个卷积层和池化层的组合,逐渐减小特征图的大小,并增加特征的抽象程度。最后,通过一个全连接层将特征映射到一个长度为 10 的向量,即每个类别对应一个得分。由于是多分类问题,因此使用 softmax 激活函数作为输出层的激活函数。

在上述模型的基础上,还添加了一个 Dropout 层,用于防止过拟合。Dropout 层会随机将一部分神经元的输出置为 0,从而引入随机性,有助于避免模型过度依赖某些特定的输入。

为了进一步防止过拟合,还可以使用 L2 正则化等技术。 最后,要编译该模型,并指定损失函数、优化器和评估指标。在本例中,将使用 categorical_crossentropy 作为损失函数,Adam 作为优化器,accuracy 作为评估指标,即分类准确率。 总的来说,这段代码构建了一个比较常见的卷积神经网络模型,可以用于对图像进行分类任务。在实际应用时,需要根据具体问题调整模型结构和超参数,以获得更好的性能。

3.定义损失函数和优化器,以及对数据进行数据增强操作,开始模型训练

# 定义损失函数和优化器
loss_fn = keras.losses.SparseCategoricalCrossentropy()
optimizer = keras.optimizers.Adam(lr=0.001)

# 数据增强操作
data_augmentation = keras.Sequential([
    keras.layers.experimental.preprocessing.RandomFlip("horizontal"),
    keras.layers.experimental.preprocessing.RandomRotation(0.1),
    keras.layers.experimental.preprocessing.RandomZoom(0.1)
])

# 编译模型
model.compile(optimizer=optimizer, loss=loss_fn, metrics=["accuracy"])

# 模型训练
history = model.fit(
    data_augmentation(x_train),
    y_train,
    batch_size=64,
    epochs=20,
    validation_split=0.2
)

4、绘制 accuracy 和 loss 变化图

# 绘制 accuracy 和 loss 变化图
acc = history.history["accuracy"]
val_acc = history.history["val_accuracy"]
loss = history.history["loss"]
val_loss = history.history["val_loss"]
epochs_range = range(20)

plt.figure(figsize=(16, 8))
plt.subplot(1, 2, 1)
plt.plot(epochs_range, acc, label="Training Accuracy")
plt.plot(epochs_range, val_acc, label="Validation Accuracy")
plt.legend(loc="lower right")
plt.title("Training and Validation Accuracy")

plt.subplot(1, 2, 2)
plt.plot(epochs_range, loss, label="Training Loss")
plt.plot(epochs_range, val_loss, label="Validation Loss")
plt.legend(loc="upper right")
plt.title("Training and Validation Loss")
plt.show()

# 计算模型在测试集上的表现
test_loss, test_acc = model.evaluate(x_test, y_test)
print("Test accuracy:", test_acc)

  • 17
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

人工智能教学实践

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值