【深度学习】基于MXNet的多层感知机的实现

news/2025/2/28 21:49:06/

多层感知机

结构组成

大致由三层组成:输入层-隐藏层-输出层,其中隐藏层大于等于一层

其中,隐藏层和输出层都是全连接

隐藏层的层数和神经元个数也是超参数

多层隐藏层,在本质上仍等价于单层神经网络(可从输出方程简单推得),
但是增加网络的深度可以更加有效地提高网络对深层抽象概念的理解,降低训练难度

激活函数

目前Sigmoid函数正在被逐渐淘汰,目前仅在二分类问题上仍有用武之地

目前最主流的激活函数是ReLU函数及其变种,它使模型更加简单高效,没有梯度消失问题,对输入的敏感程度更高,迭代速度更快

具体实现

  • 完整版本
python">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, 256W1 = 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)
  • 简化版本
python">import d2lzh as d2l
from mxnet import gluon, init
from mxnet.gluon import loss as gloss, nnnet = 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,再增加训练次数,此时可以发现,模型对训练集的误差一直在缩小,但是对测试集的误差不降反增,此时发生了过拟合


http://www.ppmy.cn/news/1575601.html

相关文章

MATLAB中regexprep函数用法

目录 语法 说明 示例 更新的文本 在替代文本中包括词元 在替代文本中包括动态表达式 更新多段文本 保留原始文本中的大小写 替换零长度匹配项 regexprep函数的功能是使用正则表达式替换文本。 语法 newStr regexprep(str,expression,replace) newStr regexprep(st…

JavaScript设计模式 -- 外观模式

外观模式(Facade Pattern)是一种设计模式,用于为复杂的子系统提供一个简单的接口,以减少子系统间的依赖和复杂性。在 JavaScript 中实现外观模式,通常是为了提供一个统一的接口来简化客户端与多个子系统交互的过程。 外…

游戏引擎学习第126天

仓库:https://gitee.com/mrxiao_com/2d_game_3 单生产者/多消费者问题 在今天的讨论中,主要与多线程编程有关。问题出现在多线程环境中,当多个线程同时访问共享资源时,代码没有正确处理竞争条件,导致了错误的行为。 具体问题发…

Vscode编辑器获取更新远程最新分支

解决:打开当前项目的终端,输入 git remote update origin --prune # 查看远程分支 git branch -r --prune --prune 参数告诉 Git 清理那些远程仓库中已经删除但本地仍然存在的跟踪分支。 命令作用 更新远程仓库引用: git remote update …

我是如何从 0 到 1 找到 Web3 工作的?

作者:Lotus的人生实验 关于我花了一个月的时间,从 0 到 1 学习 Web3 相关的知识和编程知识。然后找到了一个 Web3 创业公司实习的远程工作。 👇👇👇 我的背景: 计算机科班,学历还可以(大厂门槛水平) 毕业工…

大学专业01-资源勘查工程专业

资源勘查工程(油气与清洁地质能源)专业分析 一、专业前景 核心优势 国家战略需求驱动 服务于“双碳”目标,聚焦油气勘探与清洁能源开发(如CO₂地质封存、地热开发等),契合能源转型趋势5,7,11。 学科实力…

数据的“潘多拉魔盒”:大数据伦理的深度思考

数据的“潘多拉魔盒”:大数据伦理的深度思考 在大数据的世界里,数据是一种“新石油”,它能驱动商业、优化决策、甚至预测未来。但就像电影里的“潘多拉魔盒”,数据一旦被滥用,便可能引发严重的道德和伦理问题。大数据…

Python 入门教程(2)搭建环境 2.4、VSCode配置Node.js运行环境

文章目录 一、VSCode配置Node.js运行环境 1、软件安装2、安装Node.js插件3、配置VSCode4、创建并运行Node.js文件5、调试Node.js代码 一、VSCode配置Node.js运行环境 1、软件安装 安装下面的软件: 安装Node.js:Node.js官网 下载Node.js安装包。建议选…