【深度学习】基于MXNet的多层感知机的实现
- 开源代码
- 2025-08-31 09:51:01

多层感知机 结构组成
大致由三层组成:输入层-隐藏层-输出层,其中隐藏层大于等于一层
其中,隐藏层和输出层都是全连接
隐藏层的层数和神经元个数也是超参数
多层隐藏层,在本质上仍等价于单层神经网络(可从输出方程简单推得), 但是增加网络的深度可以更加有效地提高网络对深层抽象概念的理解,降低训练难度
激活函数目前Sigmoid函数正在被逐渐淘汰,目前仅在二分类问题上仍有用武之地
目前最主流的激活函数是ReLU函数及其变种,它使模型更加简单高效,没有梯度消失问题,对输入的敏感程度更高,迭代速度更快
具体实现 完整版本 import d2lzh as d2l from mxnet import nd from mxnet.gluon import loss as gloss ''' 基础准备工作 ''' batch_size = 256 train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size) num_inputs, num_outputs, num_hiddens = 784, 10, 256 W1 = nd.random.normal(scale=0.01, shape=(num_inputs, num_hiddens)) # 形状等于 输入*输出 b1 = nd.zeros(num_hiddens) W2 = nd.random.normal(scale=0.01, shape=(num_hiddens, num_outputs)) # 形状等于 输入*输出 b2 = nd.zeros(num_outputs) params = [W1, W2, b1, b2] for param in params: param.attach_grad() # 统一申请梯度空间 # 激活函数 def relu(X): return nd.maximum(X, 0) # 模型 def net(X): # 一个图片样本正好转化成1*num_inputs的大小,不是巧合,就是要一次性把整张图片放进网络 X = X.reshape((-1, num_inputs)) H = relu(nd.dot(X, W1)+b1) # 隐藏层需要应用激活函数 return nd.dot(H, W2) + b2 # 输出层不需要用激活函数 # 损失 loss = gloss.SoftmaxCrossEntropyLoss() ''' 开始训练 ''' num_epochs, lr = 20, 0.2 d2l.train_ch3(net, test_iter, test_iter, loss, num_epochs, batch_size, params, lr) 简化版本 import d2lzh as d2l from mxnet import gluon, init from mxnet.gluon import loss as gloss, nn net = nn.Sequential() # 添加一层256个节点的全连接层,并使用ReLU激活函数 # 再添加一层10个节点的全连接层,不使用激活函数(输出层) net.add(nn.Dense(256, activation='relu'), nn.Dense(10)) net.initialize(init.Normal(sigma=0.01)) batch_size = 256 train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size) loss = gloss.SoftmaxCrossEntropyLoss() trainer = gluon.Trainer(net.collect_params(), 'sgd', {"learning_rate": 0.2}) num_epochs = 20 d2l.train_ch3(net, test_iter, test_iter, loss, num_epochs, batch_size, None, None, trainer)实际上只简化了训练器的构建,由此也可以发现,实现一个网络的训练是一件非常简单的事情,复杂的主要是训练前后的各种处理,训练只是手段,不是目的
注意事项尝试将隐藏层的数量改成1024,再增加训练次数,此时可以发现,模型对训练集的误差一直在缩小,但是对测试集的误差不降反增,此时发生了过拟合
【深度学习】基于MXNet的多层感知机的实现由讯客互联开源代码栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“【深度学习】基于MXNet的多层感知机的实现”