开发者学堂课程【高校精品课-华东师范大学 - Python 数据科学基础与实践:神经网络详情】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/1067/detail/15457
神经网络详情
内容介绍
一、复习
二、数据和结构
一、复习
之前已经讲过神经网络十分重要,现在随着时代的发展,每一届研究生总归有一届研究生开始以神经网络录取为主,每一届是有差别的,那么,这一届要完全这样开始,可能有点难度。Python 有的同学可能刚开始学习,随着时代发展,有很多大学有可能以后 python 课都要开设。
到此时,研究生的数据挖掘。传统的数据挖掘方法基本上和现在一样,最多介绍下神经网络,主要的内容是深度学习。上次已经有了神经网络的简介,讲解了神经网络的意思。
接下来要用 python 的方法来加深一下神经网络的学习。总共有七个小节的内容。
第一个是神经网络的揭秘。这里有一个学习技巧为代码驱动式学习,是在国际上流行的。国外有很多硕士博士本身的硕士专业也不是全部学过机械学习。那么他是怎么在博士进行深度学习的呢?如果认为首先要看这些复杂的算法原理,要看明白,才有信心学这个方向,则绝对是有问题的。因为很多算法很抽象,也许算法学到一半就放弃了。那怎么办?有一个技巧是代码驱动式学习。先用代码跑通,然后运行,最好能用实验做起来,然后反过来理解这些算法。所以跟学硕硕士交流,要想把机械学习进一步学好,如果有捷径,则只能是代码驱动式学习。能用 python 最好用 python。为什么没办法靠工具呢?
因为任何一个工具都是滞后的,都是公司开发出来的,新的算法层出不穷,每天都有人在尝试。要用工具就远远滞后了。现在 python 很热,因为要学习新语言,研究新算法。如果掌握了编程工具,有很多人很聪明,对算法很快就理解了,并且写出 demol,而且这些人愿意做雷锋,把他的代码贡献在互联网上面。用 python 最大的好处是可以用网站,有这样一个网站 github.com,上面有各种语言,比如 python 语言占的比重很大,就有很多人提供了这样的代码,只要有本领把代码运行起来,然后再吸收消化。写论文的话就去这个网站上找代码,比如现在要做自动问答,如果 python 很熟练的话,可以去 github 上找相似的代码,把代码钻研透,很多代码是英文的,把它翻译成中文,现在还有很多强化学习的方法,对图片的语义分割,图片里面看图说话,只要能看懂代码,再结合例子,要做论文的话,在本专业里都是新的。要学机械学习深度学习,就一个技巧,代码驱动式学习。不要找其他的路径了,这个路径是可行的,其他的路径除非你有非常强的逻辑,就比如有些外国人对代码的构造能力很强。很多东西刚出来,代码就写的非常好。当然需要有时间消化代码。现在的研究生现在越来越觉得如果 python 代码不强大的话,后面就很难组织语言。
二、数据和结构
神经网络有多层结构。
如上图所示,数据有 Y 和 y,把二维的样本数据分成 Y 和 y。y 的取值如果是型则为回归,支付型则为分类。然而没有 y,样本和样本本之间的关系,如果看属性关系的话,关系规则。这个很简单,初学者很容易把握。以前有专硕上完课后,因为数据挖掘课讲授大约十多年了,问他们什么是有监督,什么是无监督。他们回答不出来,因为十多年的技术,所以当时特别感谢一个系主任叫范老师。他特别能接受新的东西,当时老师在公司做的时候,跟范老师说数据挖掘太重要了,所以看了范老师的课,叫做挖据与商业制度。当时范老师很支持,还没有大数据宣传时,范老师就支持数据挖掘和商业制度,所以这门课也有将近十年的历史。早年同学们觉得很难学,他的定义、X Y 的形式如下图所示。
维数是变量的指标、属性,如果目标是一个值的话,我们要预测一个数值的话,那这个维数就是一,是二元分类的话,也是一,表示一个0一个1,一开始要理解数据。举例,我们要通过输入数据 X 来预测输出数据 y,假设 X 表睡眠时间和学习时间,y 表示测试成绩。X 是一行,代表一个实例,这一行有两个值,一个是睡眠时间,一个是学习时间。
In [1]:
# X=(睡眠时间小时, 学习时间小时),y =测试成绩,用 numpy 的数组来存储 import numpy as np 这是 python 里面一个强大的包,里面有数据非常高强大,
X=np. array(([3,5], [5, 1], [10,2]), dtype-float) X 有两个值,是两列,来构造三条记录,数据类型是 float,np 构造起来很方便,
y = np.array(([75], [82], [93]), dtype=float) y 是三个值,第一个人75分,第二个人82分,第三个人93分,代码驱动式的学习,python 代码的熟练程度很重要,这个代码很简单,如果要看复杂的代码要看明白所以 python 的基础很重要。<h1 align ='center'>神经网络揭秘</h1>
<h2 align = ' center'> Part 1: 数据和结构</h2>
github.com
运行一下,显示一下 X 的值,是三行两列,构造了 X 和 y。
In [2]: X
Out[2]:array([[ 3.,5. ],
[ 5.,1.],
[10.,2.]])
y 是向量,也是二维的,三行一列。
In [3]: y
0ut[3]:array([[75. ],
[82.],
[93. ]])
下面有一些文字介绍,需要仔细看看。讲课的代码案例,是讲 python 基础最清楚的案例,这里面有些是老师翻译的,没有打磨和斟酌,翻译没有针对性很强,可以自己改。现在我们有了一些数据(包括其存储结构),我们可以预测下次你花多少时间在睡眠和学习上,然后你可能取得的考试成绩。这是有监督的回归问题。可以把 y 分成等级,A B C,那就是分类问题。为什么?如果预测的是你的考试等级,那是什么问题?
有许多机器学习的方法可以解决这个问题,这里我们要用的方法被称作人工神经网络(ANN, artificial neural network)。它里面是分层的,每一层都是神经元。所以后面想办法构造每一层的神经元。它的工作原理类似人类大脑中的神经元,最近已经解决了一些非常难的问题。神经网络深度学习,特别要注意在其他算法里面可能不做的,但是在神经网络里面一定要做的。
在我们把数据送到模型之前,我们需要将数据做归一化处理,即将数据的值处理成0到1之间的数。以后做文本和图像数据的话,要做到零和一之间。为什么?
In[4]: X = X/np. amax(X, axis=0)用 np 里面一个函数,最大值,除以 X 里面最大值以后,按照行列把里面每一个值做规划处理,X 是一个二维表,一个操纵,里面所有的东西都规划处理,所以 python 很强大。规划后的值,都已经做了规划处理。这里面有1,y 也规划处理了。
y = y/100#Max test score is 100
In[5]:X
Out[5]:array([[0.3,1. ],
[0.5,0.2],
[1.,0.4]])
In[5]:У
0ut[5]:array([[0. 75],
[0. 82],
[0.93]])
下面来研究神经网络的结构。神经网络输入层有两个神经元,一个睡眠时间,一个学习时间。现在我们可以来构建本例需要的神经网络。它得有2个输入, 输出是 y,学习成绩,所以是一个输出。在输入和输出之间的任何层,称为隐藏层。近年来,研究者已经构建了多隐藏层,它们被称为深度信念网络,从而产生了目前最热门的深度学习的概念。本例中我们只用1个隐藏层,含3个神经元。一般隐藏层的神经元要比输入层多一点。除非本身的输入就很多了,比如做一个图片处理,假如做的图片大小是218×218,那隐藏层的神经元有多大呢?隐藏层就不要这么大了。218×218它的像素四万多,每一个像素可以接受一个,作为一个输入,所以输入层有几万个神经元。
In[6]:
from IPython. display import Image
i = Image (filename=' images/ simpleNetwork. png' )
Out[6]:
在上图中,有两个神经元,一个是睡眠时间,另一个是学习时间,绿色的是输出 y,y 上面带个帽子是预测值,一层一层往前传,最后通过激活函数,得到一个预测值,真实的 y 再样本里。最后有个误差,即真实的 y 和 y hut 的差值,是误差,用误差的平方表示。圆圈代表神经元,边代表突触。模拟人的神经网络。神经网络里面有突触和数突。把他简化成图。
突触所做的工作较简单就是将获得输入数据乘以一个特殊的权重,然后再输出这个结果。神经元的工作稍微有点复杂,它将与它相连的所有突触的输出加起来后应用于一个激活函数。特定的激活函数可以让神经网络建模复杂的非线性模式。下面我们来用Python来构建我们的神经网络。
