MXNet实践六:用RNN分类MXNetFashionMNIST数据集,踏上深度学习征程
2024-01-27 17:57:05
利用 MXNet 对 RNN 进行分类:使用 MXNetFashionMNIST 数据集
前言
踏入深度学习的迷人世界,循环神经网络 (RNN) 凭借其处理序列数据的能力脱颖而出。在自然语言处理、时间序列预测和图像识别等领域,RNN 扮演着举足轻重的角色。
在本次探索之旅中,我们将携手 MXNet,利用其友好的 Gluon API,对 MXNetFashionMNIST 数据集进行 RNN 分类。让我们踏上实践之旅,见证 RNN 的强大魅力!
准备工作
在踏上征程之前,请确认您的系统已配备以下必需品:
- Python 3.6 或更高版本
- MXNet 1.7 或更高版本
- Jupyter Notebook 或类似 IDE
导入必要库
让我们从导入必要的 Python 库开始,为我们的旅程奠定基础:
import mxnet as mx
from mxnet import gluon
from mxnet.gluon import nn
from mxnet.gluon.data import DataLoader
from mxnet.gluon.loss import SoftmaxCrossEntropyLoss
from mxnet import autograd
import numpy as np
探索 MXNetFashionMNIST 数据集
MXNetFashionMNIST 是一座宝库,其中蕴藏着 70,000 张 28x28 灰度图像,涵盖 10 种不同的服装类别。我们将利用这一数据集来训练我们的 RNN 模型:
train_data = gluon.data.vision.FashionMNIST(train=True)
test_data = gluon.data.vision.FashionMNIST(train=False)
构建 RNN 模型
接下来,让我们构建我们的单层 RNN 模型,利用 Gluon 的 RNNCell API:
class RNNModel(nn.Block):
def __init__(self, num_classes, vocab_size, **kwargs):
super(RNNModel, self).__init__(**kwargs)
self.rnn = nn.RNN(num_layers=1, num_hidden=128, input_size=vocab_size)
self.output = nn.Dense(num_classes)
def forward(self, x):
h = self.rnn(x)
out = self.output(h[-1, :, :])
return out
训练模型
现在,让我们训练我们的模型,采用交叉熵损失函数和 Adam 优化器:
model = RNNModel(num_classes=10, vocab_size=28*28)
model.initialize()
loss_function = SoftmaxCrossEntropyLoss()
optimizer = gluon.Trainer(model.collect_params(), 'adam', {'learning_rate': 0.001})
num_epochs = 5
batch_size = 128
train_data_loader = DataLoader(train_data, batch_size=batch_size, shuffle=True)
test_data_loader = DataLoader(test_data, batch_size=batch_size, shuffle=False)
for epoch in range(num_epochs):
cumulative_loss = 0
for i, (data, label) in enumerate(train_data_loader):
data = data.reshape((batch_size, -1))
with autograd.record():
output = model(data)
loss = loss_function(output, label)
loss.backward()
optimizer.step(batch_size)
cumulative_loss += mx.nd.mean(loss).asscalar()
print(f'Epoch {epoch}, Loss: {cumulative_loss/len(train_data_loader)}')
评估模型
训练完成后,让我们评估模型的卓越表现:
correct = 0
total = 0
for data, label in test_data_loader:
data = data.reshape((batch_size, -1))
output = model(data)
predictions = mx.nd.argmax(output, axis=1)
correct += mx.nd.sum(predictions == label).asscalar()
total += len(label)
print(f'Accuracy: {correct/total:.2%}')
结论
通过本次实践,我们踏上了 RNN 分类之旅,借助 MXNetFashionMNIST 数据集,我们见证了 RNN 的强大功能。利用 Gluon API,我们轻松地构建和训练了我们的模型,展示了深度学习的便捷与高效。
常见问题解答
-
RNN 与其他神经网络有何不同?
RNN 专注于处理序列数据,使其能够捕捉序列中元素之间的依赖关系。 -
MXNetFashionMNIST 数据集包含哪些类别?
MXNetFashionMNIST 包含 10 个类别:T 恤/上衣、裤子、连衣裙、夹克、运动鞋、凉鞋、衬衫、运动衫/连帽衫、包和踝靴。 -
Gluon API 有什么优势?
Gluon API 提供了一个用户友好的界面,简化了神经网络的构建和训练。 -
为什么我们使用交叉熵损失函数?
交叉熵损失函数用于多类别分类任务,它衡量预测分布与真实分布之间的差异。 -
Adam 优化器是如何工作的?
Adam 优化器是一种自适应学习率优化器,它根据每个参数的梯度历史调整学习率。