python中forward的作用_基于numpy的前馈神经网络(feedforward neural network)-程序员宅基地

技术标签: python中forward的作用  

***

这几天在上Andrew Ng教授开的Coursera系列课程Deep Learning,总觉得光是看视频和做作业还不够,还是得自己动手写写代码,亲自实现课程里提到的算法内容,于是便有了这篇博客,作为自己入门深度学习的里程碑吧。

前馈神经网络

机器学习有两个基本问题,一是回归,二是分类,神经网络大多用于解决分类问题,前馈神经网络(feedforward neural network)是整个神经网络家族中较为常见和较为基础的一种,如下图右上角的DFF所示。图片来源是Cheat Sheets for AI, Neural Networks, Machine Learning, Deep Learning & Big Data。

神经网络中的基本元素是神经元,每层都有一定数量的神经元,神经元组合的多样性决定了神经网络的丰富性。下面是一个简单的前馈神经网络,总共有三层,从左到右分别是输入层、隐层和输出层,输入层的x1和x2表示这个样本只有两个特征(自变量),因为输入层通常不计入内,所以这是一个两层的神经网络,第一层有4个神经元,第二层只有1个。注意,隐层可以不止一层,隐层设置得越多,整个神经网络越庞大。

这个神经网络的工作原理是,给定一个样本的数据,将数据传输到第一层,进行线性变换和激活变换,得到加工过后的数据,这份新数据传到第二层,作为第二层的输入,接着进行线性变换和激活变换,又得到一份新的数据,因为第二层是最后一层了(如果不止两层就一直进行这样的操作直到抵达最后一层为止),所以最终的输出作为我们对该样本的预测值y_hat。

每一个神经元如同工厂的流水车间的机器,它重复做着四件事情:【接受上一层数据作为输入>>线性变换>>激活变换>>输出数据到下一层】,每个神经元中有三个组成部分:权重(weight)矩阵W,偏置(bias)向量b,以及激活函数(activation function) g,用公式表达为下图,其中上标(i)表示这是第i个样本数据,上标[1]和[2]分别表示这是神经网络的第一层与第二层:

公式(1)中,通过简单的线性变换得到了z[1],z称为prev_activation,接着通过激活变换(这里用的激活函数是tanh函数,下面会讲到),得到了a[1],称为activation,公式(3)(4)表达的是第二层的线性变换和激活变换,和第一层大同小异,只不过第二层的激活函数用的不是tanh函数而是sigmoid函数。

激活函数有下面三种,都是执行了非线性变换,实现的效果都是将prev_activation转化为activation。

每一个神经元都可以从上面三种激活函数中选取一个作为自己的激活函数g,经验表明,使用tanh函数的效果总是碾压使用sigmoid函数,所以人们大多使用tanh作为激活函数,近年来人们发现了relu函数,发现它的性能比tanh更好,relu成为了广受欢迎的激活函数。既然sigmoid性能最差,为什么还要介绍它?在一开始的时候说到,神经网络通常用于分类,比方说,给定一张图片,去识别预测它是不是一只猫:

我们的返回值应该是范围在0~1之间的概率值,sigmoid的函数范围是(0, 1), tanh的范围是(-1, 1), relu的是[0, +∞),使用sigmoid显然更合适些。所以通常一个神经网络的配置是,中间的隐层的所有神经元使用tanh或者relu作为激活函数,输出层的神经元使用sigmoid。

之所以要在线性变换之后进行非线性变化,是因为,如果没有非线性变换,纯粹使用线性变化的话,不管使用了多少层的线性变换,最终的结果通过合并同类项之后仍然是线性变换,100层的神经网络和1层的没有任何差别。神经网络从本质

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39608509/article/details/111756597

智能推荐

博客样式备份-程序员宅基地

文章浏览阅读215次。皮肤LessIsMore页面定制CSS代码#cnblogs_post_body h1 { background: #265B8A; border-radius: 6px 6px 6px 6px; color: #FFFFFF; font-family: FZShuTi; font-size: 23px; font-weight: bo..._cnblogs_post_body table

学生用计算机怎么玩俄罗斯方块,计算机专业项目二 俄罗斯方块-程序员宅基地

文章浏览阅读7.7k次。俄罗斯方块比上一个项目贪吃蛇的难度大,需要考虑到初始化方块的形状,以及对方块变形的存储随机产生方块图形可以类比贪吃蛇食物的随机产生 srand()实现初始化边界方块的自动下落 用sleep()控制下落速度控制范围,当靠近边界空间不够时,不能进行形状的变换当某一行被方块铺满时,消除...........................不多说了直接上代码吧// 方块 简单.cpp : 定义控制台应用程..._计算器怎么玩俄罗斯方块

matlab使用相关分析法和hankel矩阵法进行系统辨识_matlab程序用hankel矩阵求三阶传递函数-程序员宅基地

文章浏览阅读4.5k次,点赞10次,收藏49次。matlab使用相关分析法和hankel矩阵法进行系统辨识欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。新的改变我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,..._matlab程序用hankel矩阵求三阶传递函数

nodejs与python_NodeJS与Python:如何选择最佳技术来开发Web应用程序的后端-程序员宅基地

文章浏览阅读1.3k次。nodejs与pythonIn this article, we'll be bold and claim that one of these technologies is winning. The question is: which one is it? Let's jump on in and find out. 在本文中,我们将大胆地说出其中一项技术正在获胜。 问题是:是哪一个? 让我们..._后端用node还是python

Datawhale 暑期组队学习计划-程序员宅基地

文章浏览阅读91次。Datawhale暑期组队学习计划马上就要开始啦这次共组织15个组队学习涵盖了AI领域从理论知识到动手实践的内容按照下面给出的最完备学习路线分类难度系数分为低、中、高三档可以按照需要参加学习路线基础知识1 Python基础课程简介**课程设计:**马晶敏,叶梁**..._课程设计:杨皓博 孙涛 杨煜 组队学习说明:一周内快速了解并掌握mysql的主要内容。

CURL用法大全_curl -x命令-程序员宅基地

文章浏览阅读2.1k次。1)查看页面信息数据curl http://www.yahoo.com > page.html用curl的内置option就好,存下http的结果,用这个option: -ocurl -o page.html http://www.yahoo.com这样,你就可以看到屏幕上出现一个下载页面进度指示。等进展到100%,自然就OK咯3)什么什么?!访问不到?肯定是你_curl -x命令

随便推点

Android GSYVideoPlayer视频播放器_com.shuyu:gsyvideoplayer-程序员宅基地

文章浏览阅读8.2k次,点赞9次,收藏24次。GSYVideoPlayerGSYVideoPlayer官方地址GSYVideoPlayer 一个基于IJkPlayer的播放器支持调节声音亮度边播边缓存 使用了AndroidVideoCache;ExoPlayer使用SimpleCache支持多种协议h263\4\5、Https、concat、rtsp、hls、rtmp、crypto、mpeg等等简单滤镜(马赛克、黑白、色彩过滤、高斯、模糊、模糊等等20多种)、动画、(水印、画面多重播放等)视频第一帧、视频帧截图功能,视频生成gif功能。_com.shuyu:gsyvideoplayer

python 学习笔记18 GFPGAN人脸(图片)修复_nameerror: name 'fused_act_ext' is not defined-程序员宅基地

文章浏览阅读7.6k次,点赞9次,收藏58次。老实说这个和学习没啥关系,就是一个python解决方案的实践。觉得有趣就试了一下,先上链接:官方:https://github.com/TencentARC/GFPGAN/blob/master/README.md这是个高分项目,用于人脸(在逐渐拓展到其他图像类别,如背景)图像修复。如下图:腾讯 AI 的研究人员提出了他们的新GFP-GAN 模型,以在一次前向传递中实现真实性和保真度的良好平衡。该模型由退化去除模块和预先训练的人脸生成器组成。它们通过直接潜在代码映射连接到使用 CS SFT _nameerror: name 'fused_act_ext' is not defined

《Windows API巡礼》---WSAStartup和WSACleanup-程序员宅基地

文章浏览阅读2.8k次。由于Winsock在被调用时是以动态链接库Winsock.dll的形式实现的,所以在它初始化时应首先调用WSAStartup函数,对Winsock DLL进行初始化,确定被调用的Winsock的版本号,并以此分配必要的资源:int WSAStartup( __in WORD wVersionRequested, //用于存储要加载的Winsock库的版本;一般高位字节用于存储 //Winsock库的副版本,而低位字节则用来存储主版

TCP——多进程编程(1)_tcp多进程-程序员宅基地

文章浏览阅读275次。1、什么是进程在操作系统原理使用这样的术语来描述的:正在运行的程序及其占用的资源(CPU、内存、系统资源等)叫做进 程。我们使用vim编辑生成的C文件叫做源码,源码给程序员来看的但机器不识别,这时我们需要使用 编译器gcc编译生成CPU可识别的二进制可执行程序并保存在存储介质上,这时编译生成的可执行程序只能叫做程序而不能叫进 程。而一旦我们通过命令(./a.out)开始运行时,那正在运行的这个程..._tcp多进程

Python 爬虫学习笔记三:多页内容爬取&内容分析及格式化_python 爬虫 页码的格式化-程序员宅基地

文章浏览阅读1.3w次。Python 爬虫学习笔记三:多页内容爬取&内容分析及格式化 python int 与 string 之间的转换: Python int与string之间的转化 string–>int 1、10进制string转化为int  int(‘12’) 2、16进制string转化为int   int(‘12’, 16) int–>str_python 爬虫 页码的格式化

k8s安装配置-程序员宅基地

文章浏览阅读893次。为什么80%的码农都做不了架构师?>>> ...

推荐文章

热门文章

相关标签