概述
本文使用MXNet深度学习框架来实现softmax回归模型,并利用Fashion-MNIST数据集进行实验。需要的前导知识可以参考我之前的博文:
实验和结果
# coding=utf-8
# author: BebDong
# 2018/12/19
# 使用MXNET框架的gluon包实现Softmax回归模型
import gluonbook as gb
from mxnet import init, gluon
from mxnet import autograd
from mxnet.gluon import loss as gloss
from mxnet.gluon import nn
# 读取数据
batch_size = 256
train_iter, test_iter = gb.load_data_fashion_mnist(batch_size)
# 创建模型:softma模型在Fashion-MNIST数据集下的输出层个数为10,且输出层为全连接层
net = nn.Sequential()
net.add(nn.Dense(10))
# 初始化模型参数
net.initialize(init.Normal(sigma=0.01))
# 定义损失函数
loss_function = gloss.SoftmaxCrossEntropyLoss()
# 优化算法(训练器):小批量随机梯度下降
trainer = gluon.Trainer(net.collect_params(), 'sgd', {'learning_rate': 0.1})
# 训练模型
epochs = 10
for epoch in range(epochs):
# 总的损失
train_loss_sum = 0
# 总的准确率
train_acc_sum = 0
for X, y in train_iter:
with autograd.record():
y_pre = net(X)
los = loss_function(y_pre, y)
los.backward()
trainer.step(batch_size)
train_loss_sum += los.mean().asscalar()
train_acc_sum += gb.accuracy(y_pre, y)
print('epoch %d, loss %.4f, train acc %.3f' % (epoch + 1, train_loss_sum / len(train_iter), train_acc_sum / len(train_iter)))
# 测试模型
test_acc = gb.evaluate_accuracy(test_iter, net)
print("Training done, test accuracy is: ", test_acc)
我的运行结果如下;