Mxnet (5):多层感知机(multilayer perceptron,MLP)
程序员文章站
2024-03-14 09:43:10
...
在softmax回归的基础上实现,将模型网络换成多层感知机。
1.数据
数据跟softmax回归一样使用Fashion-MNIST图像分类数据集。
from d2l import mxnet as d2l
from mxnet import gluon, np, npx, autograd, init
from plotly.offline import plot, init_notebook_mode
import plotly.graph_objs as go
init_notebook_mode(connected=True)
npx.set_np()
ctx = npx.gpu() if (npx.num_gpus()) > 0 else mx.cpu()
batch_size = 256
train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size)
2. 创建模型参数
- 输入同样是28×28=784,输出同样是10个种类,这里添加一个具有256个隐藏单元的隐藏层。
- 对于每一层都要有一个权重矩阵和一个偏差向量
num_inputs = 28*28
num_hiddens = 256
num_outputs = 10
W1 = np.random.normal(scale=0.01, size=(num_inputs, num_hiddens), ctx=ctx)
b1 = np.zeros(num_hiddens, ctx=ctx)
W2 = np.random.normal(scale=0.01, size=(num_hiddens, num_outputs), ctx=ctx)
b2 = np.zeros(num_outputs, ctx=ctx)
params = [W1, b1, W2, b2]
for param in params:
param.attach_grad()
3.创建**函数
通过使用maximum函数模拟ReLU**函数
def relu(X):
return np.maximum(X, 0)
4. 模型
因为我们不考虑空间结构,所以我们将reshape每个二维图像变成一个长度为long的平面向量num_inputs。
def net(X):
X = X.reshape((-1, num_inputs))
H = relu(np.dot(X, W1) + b1)
return np.dot(H, W2) + b2
5.损失函数
利用高级API的集成函数来计算softmax和交叉熵损失
loss = gluon.loss.SoftmaxCrossEntropyLoss()
6.优化函数
适用sgd,学习效率0.1
lr = 0.1
def updater(batch_size):
return d2l.sgd(params, lr, batch_size)
7. 训练
- 训练10个epochs
- 使用完成softmax时使用的训练模型
num_epochs = 10
result = train(net, train_iter, test_iter, loss, num_epochs, updater)
- 可视化结果
draw_graph(result)
8. 简化
与softmax的模型设置基本相同,就是在网络中添加一个256个隐藏单元的隐藏层。mxnet允许在神经层中指定**函数,这点pytorch不同
from mxnet.gluon import nn
from mxnet import gluon
net = nn.Sequential()
net.add(nn.Dense(256, activation='relu'),
nn.Dense(10))
net.initialize(init.Normal(sigma=0.01),ctx=ctx)
8.1 trainer
trainer = gluon.Trainer(net.collect_params(), 'sgd', {'learning_rate': lr})
8.2 训练
训练30个epochs
num_epochs=30
result = train(net, train_iter, test_iter, loss, num_epochs, trainer)
draw_graph(result)
可以看出训练准确率一直在增加,而测试准确率之后20epoch之后趋平,甚至有下降趋势,这个是应为模型训练过渡会出现过拟合的现象。
9. 参考
https://d2l.ai/chapter_multilayer-perceptrons/mlp-concise.html