TensorFlow多层感知机函数逼近过程详解
http://c.biancheng.net/view/1924.html
Hornik 等人的工作(http://www.cs.cmu.edu/~bhiksha/courses/deeplearning/Fall.2016/notes/Sonia_Hornik.pdf)证明了一句话,“只有一个隐藏层的多层前馈网络足以逼近任何函数,同时还可以保证很高的精度和令人满意的效果。”
本节将展示如何使用多层感知机(MLP)进行函数逼近,具体来说,是预测波士顿的房价。第2章使用回归技术对房价进行预测,现在使用 MLP 完成相同的任务。
准备工作
对于函数逼近,这里的损失函数是 MSE。输入应该归一化,隐藏层是 ReLU,输出层最好是 Sigmoid。
下面是如何使用 MLP 进行函数逼近的示例:
- 导入需要用到的模块:sklearn,该模块可以用来获取数据集,预处理数据,并将其分成训练集和测试集;pandas,可以用来分析数据集;matplotlib 和 seaborn 可以用来可视化:

- 加载数据集并创建 Pandas 数据帧来分析数据:

- 了解一些关于数据的细节:

下表很好地描述了数据:
- 找到输入的不同特征与输出之间的关联:

以下是上述代码的输出:
- 从前面的代码中,可以看到三个参数 RM、PTRATIO 和 LSTAT 在幅度上与输出之间具有大于 0.5 的相关性。选择它们进行训练。将数据集分解为训练数据集和测试数据集。使用 MinMaxScaler 来规范数据集。
需要注意的一个重要变化是,由于神经网络使用 Sigmoid 激活函数(Sigmoid 的输出只能在 0~1 之间),所以还必须对目标值 Y 进行归一化:
- 定义常量和超参数:

- 创建一个单隐藏层的多层感知机模型:

- 声明训练数据的占位符并定义损失和优化器:

- 执行计算图:

解读分析
在只有一个隐藏层的情况下,该模型在训练数据集上预测房价的平均误差为 0.0071。下图显示了房屋估价与实际价格的关系:

在这里,使用 TensorFlow 操作层(Contrib)来构建神经网络层。这使得工作稍微容易一些,因为避免了分别为每层声明权重和偏置。如果使用像 Keras 这样的 API,工作可以进一步简化。
下面是 Keras 中以 TensorFlow 作为后端的代码:

前面的代码给出了预测值和实际值之间的结果。可以看到,通过去除异常值(一些房屋价格与其他参数无关,比如最右边的点),可以改善结果:

TensorFlow多层感知机函数逼近过程详解的更多相关文章
- TensorFlow从0到1之TensorFlow多层感知机函数逼近过程(23)
Hornik 等人的工作(http://www.cs.cmu.edu/~bhiksha/courses/deeplearning/Fall.2016/notes/Sonia_Hornik.pdf)证明 ...
- TensorFlow实现多层感知机函数逼近
TensorFlow实现多层感知机函数逼近 准备工作 对于函数逼近,这里的损失函数是 MSE.输入应该归一化,隐藏层是 ReLU,输出层最好是 Sigmoid. 下面是如何使用 MLP 进行函数逼近的 ...
- DeepLearning tutorial(3)MLP多层感知机原理简介+代码详解
本文介绍多层感知机算法,特别是详细解读其代码实现,基于python theano,代码来自:Multilayer Perceptron,如果你想详细了解多层感知机算法,可以参考:UFLDL教程,或者参 ...
- libpcap 主要函数及过程详解
http://blog.chinaunix.net/uid-21556133-id-120228.html libpcap(Packet Capture Library),即数据包捕获函数库,是Uni ...
- Hadoop MapReduce执行过程详解(带hadoop例子)
https://my.oschina.net/itblog/blog/275294 摘要: 本文通过一个例子,详细介绍Hadoop 的 MapReduce过程. 分析MapReduce执行过程 Map ...
- Linux启动过程详解(inittab、rc.sysinit、rcX.d、rc.local)
启动第一步--加载BIOS 当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它.这是因为BIOS中包含了CPU的相关信息.设备启动顺序信息.硬 ...
- Linux启动过程详解
Linux启动过程详解 附上两张图,加深记忆 图1: 图2: 第一张图比较简洁明了,下面对第一张图的步骤进行详解: 加载BIOS 当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的 ...
- Hadoop Mapreduce分区、分组、二次排序过程详解[转]
原文地址:Hadoop Mapreduce分区.分组.二次排序过程详解[转]作者: 徐海蛟 教学用途 1.MapReduce中数据流动 (1)最简单的过程: map - reduce (2) ...
- MySQL关闭过程详解和安全关闭MySQL的方法
MySQL关闭过程详解和安全关闭MySQL的方法 www.hongkevip.com 时间: -- : 阅读: 整理: 红客VIP 分享到: 红客VIP(http://www.hongkevip.co ...
随机推荐
- Centos7.5 安装Mysql5.7
#yum -y install wget #wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rp ...
- Spark Core知识点复习-1
Day1111 Spark任务调度 Spark几个重要组件 Spark Core RDD的概念和特性 生成RDD的两种类型 RDD算子的两种类型 算子练习 分区 RDD的依赖关系 DAG:有向无环图 ...
- JNDI学习总结(一):JNDI到底是什么?
https://blog.csdn.net/wn084/article/details/80729230 分类专栏: JNDI JNDI是 Java 命名与目录接口(Java Naming and ...
- vscode+flutter+win10搭建问题记录
1.下载安装vscode.flutter sdk.安装vscode相关插件.android sdk,这些网上有教程,比如https://blog.csdn.net/SVNzK/article/deta ...
- Loadrunner 11.00 初始化失败; 通信错误。 Error (-81024): LR_VUG: The 'WS_SOAP' type is not supported on 'WIN32' platforms .
搜索LR安装目录bin文件夹下有个“wlrun.exe”的文件,邮件点击“属性”->"兼容性"->兼容模式中选择“windows 7”,确认后重新打开即可,win10下 ...
- 香草js侦测元素是否离开视窗viewport
很多时候,我们需要检查一个元素是否已经部分不在或者全部不在视窗区域,当这种现象发生时做相应的处理. 比如在CMS编辑内容时,其工具菜单很有可能因为内容区域过长导致滑出视窗区域,而工具栏又是经常要使用的 ...
- 两道JVM面试题,竟让我回忆起了中学时代!
作者:肥朝 原文链接:https://mp.weixin.qq.com/s/4wJ6ANal0blLOseasfIuVw 中学授课模式 考虑到可能有部分粉丝对JVM参数不清楚,所以我们参照中学的授课模 ...
- rabbitMq 学习笔记(一)
消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题 实现高性能,高可用,可伸缩和最终一致性架构. RabbitMQ 是采用 Erlang 语言实现 AMQP (Adva ...
- Nginx实现防盗链的方式
一.ngx_http_referer_module(阻挡来源非法的域名请求),配置如下: location ~.*\. (gif|jpg|png|flv|swf|rar|zip)$ { valid_r ...
- 打包工具webpack和热加载深入学习
本次小编呢,为大家带来一篇深入了解打包工具 webpack. 我们今天使用的是 webpack3.8.1版本的,我们学习使用 3.8.1更稳定些,并学习自己如何配置文件,最新版本不需要自己配置文件,但 ...

