python神经网络作用_Python · 神经网络(三*)· 网络

(这里是最终成品的 GitHub 地址)

(这里是本章用到的 GitHub 地址)

推荐先修章节:Python · 神经网络(二*)· 层

Python · 神经网络(三)· 网络

由于分形这个东西是在 tensorflow 的基础上实现的且相当麻烦、所以我就没在我自己的结构里面实现分形。因此,我自己实现的网络中只有一个类,某种意义上也好看一些

在讲网络的实现之前,需要先提到的是:正如我们在上一章 (二*)最后提到的、Layer 是需要分成主层(Layer)和附加层(SubLayer)两种的。那么 SubLayer 是干嘛的呢?它可以在 Layer 的输出的基础上进行一些变换以得到更好的输出

典型的 SubLayer 有 Dropout 和 Normalize。它们的定义和功效我以后有时间的话会讲,现在我们只需要有这样一个感觉:SubLayer 通常可以优化 Layer 的输出;SubLayer 之间及 SubLayer 和其根 Layer(定义下面会说)之间的关联不应是可更新的关联(因为 SubLayer 更应该是一个“优化器”而不应是一个传统意义上的神经网络中的可更新的层)

那么 SubLayer 和 Layer 之间的结构关系就比较清楚了。具体而言,有:SubLayer 是附加在 Layer 后面的

一个 Layer 和若干 SubLayer 共同组成一个整体

SubLayer 会有一个域记录其附加的对象(爸爸)

SubLayer 会有一个域记录其根 Layer(定义为最老的爸爸)(……)

Layer 会有一个域记录附加在其后的第一个 SubLayer (孩子)

Layer 会有一个域记录其最年轻的孩子,不妨把它称为最后之作(喂!)

这样说可能有点太抽象(是肯!定!太!抽!象!好!吧!),我们画张图来看:

(嗯。好丑。)

知道 Layer 和 SubLayer 之间的大概关系后、就可以着手实现网络了(目前为止我们的 SubLayer 只有 CostLayer 一种,所以下面代码实现里面没有出现 SubLayer)。思路和 tensorflow 版本的差不多、亦即要先实现两个功能:加入 Layer 与 Layer 之间的关联

加入 Layer 本身

其中加入关联这一步要比 tensorflow 版本的要简单很多:

def _add_weight(self, shape):

self._weights.append(np.random.randn(*shape))

self._bias.append(np.zeros((1, shape[1])))

加入 Layer 本身这一步则几乎一模一样:

def add(self, layer):

if not self._layers:

self._layers, self._current_dimension = [layer], layer.shape[1]

self._add_weight(layer.shape)

else:

_next = layer.shape[0]

layer.shape = (self._current_dimension, _next)

self._add_layer(layer, self._current_dimension, _next)

唯一的区别在于在加入第二个 Layer 或者之后的 Layer 时,最后调用了一个 _add_layer 方法。这个方法能够协调 Layer 和 SubLayer 之间的关系,是我们搭建网络结构的关键所在:

def _add_layer(self, layer, *args):

_parent = self._layers[-1]

_current, _next = args

self._layers.append(layer)

if isinstance(layer, CostLayer):

_parent.child = layer

self.parent = _parent

self._add_weight((1, 1))

self._current_dimension = _next

else:

self._add_weight((_current, _next))

self._current_dimension = _next

这里可能需要进行一些说明:当 layer 不是 CostLayer 时,做的事(else 块里的东西)和 tensorflow 版本的一样

当 layer 是 CostLayer 时,我们只需在我们存储权重和偏置量的列表中放一个占位符、同时要更新一下父子关系(……)

以上就是与Python · 神经网络(三)· 层对应的、用纯 Numpy 写的结构。虽然代码很简单,不过涉及到的概念、理念可能有些太多,我们来整理一下:网络中有两种层:Layer 和 SubLayer。其中 Layer 是传统意义的 Layer, BP 算法更新层之间的关联时只会更新 Layer 之间的关联

SubLayer 是一种“优化器”,它能优化从 Layer那里得到的输出。它会在前向传导算法中用到、但在 BP 算法中、它会有三种行为:SubLayer 之间的关联以及 SubLayer 和根 Layer 之间的关联不会被更新、因为它们只是占位符

SubLayer 作为优化器本身可能会有一些参数,这些参数可能会被 BP 算法更新、但影响域仅在该 SubLayer 内部(Normalize 是一个很好的栗子)

Layer 之间的关联的更新是通过更新最后之作和下一层 Layer 之间关联完成的:

(……捂脸)

最常见的两种 SubLayer 就是 Dropout 和 Normalize(Batch Normalization)了,如果想要知道怎么将它们加入我们的网络的话、知道这些理念是必要的。事实上,在这个框架搭建完成后,我们完全可以尝试使用诸如 Dropout + Normalize + Dropout 这样的结构会发生什么(虽然它可能非常不合理、但至少能去尝试)。而由于算法是用 Numpy 写的,我们甚至可以随便自定义 SubLayer 并尝试它和其它 SubLayer 的组合效果。这可能对一部分观众老爷比较有用 ( σ'ω')σ

如果弄懂了 Layer 和 SubLayer 之间的关系、加上已经支持的(比较简单的)自定义激活函数的话,可能就能初步应用它来扩展出属于自己的比较复杂的神经网络模型了。如果再能够理解这篇文章里介绍的 Optimizers 的思想,我们就能自定义梯度下降算法、从而就可以对神经网络进行相当大的变装了

希望观众老爷们能够喜欢~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/489003.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大公司里怎样开发和部署前端代码

作者:张云龙链接:https://www.zhihu.com/question/20790576/answer/32602154来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。没人邀请,看到这个问题不错,路过怒答。&#x…

5G产业发展最新进展深度解析(144页PPT)

来源:吴东升本报告对不同区域(全球、美国、中国、日本、欧洲等)的5G产业发展做了深入、全面的分析;对5G产业链和生态链以及主要产业应用状况做了系统盘点分析;对5G技术进展、投资环境和投资机会等也做了详细梳理。是5G…

php layui table,Layui table组件相关介绍

出现的问题:1、使用 Layui 官方提供的 【转换静态表格】 方式初始化加载时报 id 找不到的错误(自己的锅)2、传递参数问题使用的 table 加载刷新方案有一个页面,左侧是一个 tree,右侧是一个 table,默认 table 加载全数据&#xff0…

python中setpos_如何用类初始化Python中的多个turtle

only one turtle shown on screen. Two are defined in the code below.the turtles heading and coordinates arent being initialized.我相信问题是你定义了一次随机的位置和方向,在海龟创造循环之外,所以它们都从同一个地方开始,以相同的速…

存内计算能否成为下一代AI芯片的关键

来源:半导体行业观察随着人工智能的落地和大规模应用,AI芯片也成为了常见的芯片品类。AI芯片相比传统芯片来说,主要的竞争优势就在于高算力和高能效比。高算力是指能够比传统芯片更快地完成AI计算,而高能效比则是指能比传统芯片用…

[转载]sql server 分布式查询

--用openrowset连接远程SQL或插入数据 --如果只是临时访问,可以直接用openrowset--查询示例select * from openrowset(SQLOLEDB,sql服务器名;用户名;密码,数据库名.dbo.表名)在跨库查询时需要启用Ad Hoc Distributed Queries启用Ad Hoc Distributed Queries:exec sp…

python中复选框取消修改_python – 如何在PySide / PyQt中设置“只读复选框”

我迟到了 – 看起来你有一个有效的解决方案.为了将来参考,您可以采用的另一种方式是使用鼠标事件 – 这可以保持所有信号的工作方式:from PyQt4 import QtGui, QtCoreclass MyCheckBox(QtGui.QCheckBox):def __init__( self, *args ):super(MyCheckBox, self).__ini…

matlab画半透明矩形,使用matlab画半透明椭圆

先上最终效果图:本来是想直接用scatter和alpha来画的,结果在尝试以下代码后,发现无法显示透明效果scatter(rand(1000,1),rand(1000,1), ‘filled‘);alpha(0.5)具体原因可以参考stackoverflow(http://stackoverflow.com/questions/6366404/se…

2019全球信息通信业热点回顾

来源: 人民邮电报编辑:于莉莉 监制:郭川时光飞逝,倏忽一年。回首2019年,全球电信业最大的热点当属5G。这一年,5G在经过数年酝酿后终于商用,无论是运营商还是政府,都对5G给予了空前的…

SSIS添加分区-动态

主要参考:动态分区 一、前提准备: 1、一个日期存储过程,注意代码可以得到一个月中的最后一天,最终生成时间维度。 USE [DrugDW] GO /****** Object: StoredProcedure [dbo].[PROC_DATETIME] Script Date: 2/28 星期二 14:16:4…

canvas 实现图片局部模糊_小技巧!H5使用Html2Canvas实现自动截屏(下)

上文写到使用html2Canvas实现截屏。上次留了一个问题,如果当前dom元素对象比较大,比如包含一个比较大的图片等,在将dom序列化成字符串时,极易导致字符串超长。对于超长的内容,后台程序将获取不到参数,那么怎…

getjson php 函数,PHP读写JSON文件以及jQuery的getJSON函数用法

在写的音乐网站中用到保存用户歌单功能,即用户登录后可以显示该用户之前保存的歌单,开始的思路是使用数据库来保存,后来为了方便于是考虑使用json数据格式来保存歌单,这样也和播放器插件的json参数比较契合.读取JSON文件<?php $filename "chation99.json";$json…

悬而未决的AI竞赛:全球企业人工智能发展现状

来源&#xff1a;德勤,智东西随着企业领袖逐渐将人工智能视为下一轮经济大扩张的重要推动力量&#xff0c;一种担忧错失良机的情绪在全球范围内日益蔓延。许多国家纷纷制定人工智能战略&#xff0c;通过资金投入、政策激励、人才发展和风险管理推进技术能力的发展。人工智能对于…

zbb20170228_spring_tdt

applicationContext.xml 的 TDT <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/beans" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xmlns:aop"http://www…

python文件系统_你应该知道的10个Python文件系统方法

4.os.chdir("/absolute/or/relative/path")等价于macOS/Linux系统的cd命令此方法将当前工作目录更改为提供的绝对路径或相对路径。如果您的代码随后对文件系统做了其他更改&#xff0c;那么在使用try-except方法时处理任何抛出的异常都是一个好主意。否则&#xff0c…

php打包压缩下载多大,php多文件打包压缩下载简单示例

调用php中内置扩展ZipArchive类可以进行文件压缩打包下载&#xff0c;(PHP 5>5.2.0&#xff0c;PHP 7&#xff0c;PECL zip>1.1.0)调用php中内置扩展ZipArchive类可以进行文件压缩打包下载&#xff0c;(PHP 5>5.2.0&#xff0c;PHP 7&#xff0c;PECL zip>1.1.0)简…

Science揭示:身体如何应对细菌的“群体感应”

电子显微镜下的假单胞菌细菌。图片来源&#xff1a;MPIIB / Volker Brinkmann来源&#xff1a;中国生物技术网众所周知&#xff0c;细菌感染并不会马上导致疾病&#xff0c;只有在它们大量出现时才会对身体造成威胁。近日&#xff0c;发表在《Science》上的一项研究中&#xff…

MySql分页存储过程

分页获取数据 code DELIMITER $$ DROP PROCEDURE IF EXISTS testDB.GetRecordAsPage $$ CREATE PROCEDURE testDB.GetRecordAsPage (in tbName varchar(800),in fldName varchar(1000), in strWhere varchar(500),in pageIndex int,in pageSize int,in orderType int,in sortN…

python快速入门课堂笔记_Python 快速入门笔记(9):模块和包

本系列随笔是本人的学习笔记&#xff0c;初学阶段难免会有理解不当之处&#xff0c;错误之处恳请指正。转载请注明出处&#xff1a;https://www.cnblogs.com/itwhite/p/12302882.html。目录一、模块指定导入的符号列表模块查找的路径在模块中插入测试代码二、包一、模块所有 py…

mysql中的dump,从mysql中dump数据到本地

方法一&#xff1a;使用mysqldump命令&#xff0c;如&#xff1a; mysqldump -h10.90.6.237 -uf_insplat2car_r -P3306 -pxxxxxxxxx nbmp tb_tag_log --skip-lock-tables --set-charset --where"origin_chance_no like nbcar%" > dump.sql注意此方法默认情况下会在…