多层感知机
发布日期:2021-06-29 18:16:18
浏览次数:2
分类:技术文章
本文共 3202 字,大约阅读时间需要 10 分钟。
多层感知机简介
多层感知机就是含有至少一个隐藏层的由全连接层组成的神经网络,且每个隐藏层的输出通过激活函数进行变换,多层感知机的层数个各个隐藏层中隐藏单元个数都是超参数,输出可以通过以下公式计算得出:
其中Φ
代表激活函数; 隐藏层
多层感知机在单层神经网络的基础上引入一到多个隐藏层(hidden layer),位于输入层和输入层之间,其中的隐藏层和输出层都是全连接层,神经网络图如下:
虽然神经网络引入了隐藏层,但依然等价于一个单层神经网络,这是因为全连接层只是对数据做仿射变换(affine transformation),而多个仿射变换的叠加仍然是一个仿射变换;激活函数
为解决添加多个隐藏层也只能与仅含输出层的单层神经网络等价问题,故引入非线性变换,如对隐藏变量使用按元素运算的非线性函数进行变换,然后再作为下一个全连接层的输入,这个非线性函数叫做激活函数(activation function);以下介绍几种激活函数:
-
ReLU函数
ReLU(rectfied linear unit)提供了一种简单的非线性变换,给定元素x,则函数定义为:ReL(x) = max(x, 0),它将负数元素清零,只保留整数元素; -
Sigmoid函数
Sigmoid函数可以将元素和值变换到0和1之间,sigmoid(x)=1/(1 + exp(-x))
; -
tanh函数
tanh(双曲正切)函数将元素的值变换到-1和1之间,tanh(x)=(1-exp(-2x))/(1+exp(-2x))
,当输入接近0时,tanh函数接近线性变换; -
相关代码
#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : 2019/4/20 10:40# @Author : cunyu# @Site : cunyu1943.github.io# @File : MultiLayer.py# @Software: PyCharm# ReLUimport d2lzh as d2lfrom mxnet import autograd, nd# 绘图函数def xyplot(x_vals, y_vals, name): d2l.set_figsize(figsize=(5, 2.5)) d2l.plt.plot(x_vals.asnumpy(), y_vals.asnumpy()) d2l.plt.xlabel('x') d2l.plt.ylabel(name + '(x)')x = nd.arange(-8.0, 8.0, 0.1)x.attach_grad()with autograd.record(): y = x.relu()xyplot(x, y, 'relu')y.backward()xyplot(x, x.grad, 'grad of relu')d2l.plt.show()# sigmoid函数with autograd.record(): y = x.sigmoid() xyplot(x, y, 'sigmoid')d2l.plt.show()y.backward()xyplot(x, x.grad, 'grad of sigmoid')d2l.plt.show()# tanh函数with autograd.record(): y = x.tanh()xyplot(x, y, 'tanh')d2l.plt.show()y.backward()xyplot(x, x.grad, 'grad of tanh')d2l.plt.show()
多层感知机的实现
- 从零开始实现多层感知机, 代码如下:
#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : 2019/4/20 11:45# @Author : cunyu# @Site : cunyu1943.github.io# @File : MultiLayer0.py# @Software: PyCharmimport d2lzh as d2lfrom mxnet import ndfrom mxnet.gluon import loss as gloss# 获取和读取数据batch_size = 256train_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, b1, w2, b2]for param in params: param.attach_grad()# 定义激活函数def relu(X): return nd.maximum(X, 0)# 定义模型def net(X): 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 = 5, 0.5d2l.train_ch3(net, train_iter, test_iter, loss, num_epochs, batch_size, params, lr)
- 简洁实现多层感知机,代码如下:
#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : 2019/4/20 13:43# @Author : cunyu# @Site : cunyu1943.github.io# @File : MultiLayerSimple.py# @Software: PyCharmimport d2lzh as d2lfrom mxnet import gluon, initfrom mxnet.gluon import loss as gloss, nn# 定义模型net = nn.Sequential()net.add(nn.Dense(256,activation='relu'), nn.Dense(10))net.initialize(init.Normal(sigma=0.01))# 读取数据并训练模型batch_size = 256train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size)loss = gloss.SoftmaxCrossEntropyLoss()trainer = gluon.Trainer(net.collect_params(), 'sgd', { 'learning_rate':0.5})num_epochs = 5d2l.train_ch3(net, train_iter, test_iter, loss, num_epochs, batch_size, None, None, trainer)
转载地址:https://cunyu1943.blog.csdn.net/article/details/89237259 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
第一次来,支持一个
[***.219.124.196]2024年04月24日 08时13分36秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
湮没在赞誉之中,科学史上鲜为人知的五大“败笔”
2019-04-29
别再对分类变量进行独热编码!你还有更好的选择
2019-04-29
如果不能用Python执行机器学习,那该用什么呢?
2019-04-29
不论何时,互联网从业者一直幸福着~
2019-04-29
mysql用户口令中含有特殊字符@的情况下,如何正确链接数据库
2019-04-29
SpringFox接口文档API DOC
2019-04-29
netty优化策略
2019-04-29
架构师知识体系全景图
2019-04-29
guava中EventBus(事件总线)源码分析与使用
2019-04-29
程序员成神之路文章目录
2019-04-29
SASS软件的成熟度模型总结
2019-04-29
一次搞定redis使用
2019-04-29
最全架构设计实践方法论: 微服务
2019-04-29
Linux下简单几步安装AI开发环境-ROS(超有意思)
2019-04-29
linux入门--磁盘管理之分区、格式化与挂载
2019-04-29
开发必备:HTTP 及 TLS
2019-04-29
如何设计自己的第一个加密交易机器人?
2019-04-29
TKDE 2020 | 综述:基于知识图谱的推荐系统
2019-04-29
休息时间!哪些业余活动能提升开发人员的技能?
2019-04-29
事关人类生存?为什么要探寻AI系统的可解释性?
2019-04-29