侵权投诉

如何使用Numpy搭建神经网络

2019-05-18 11:02 次阅读

很多同学入门机器学习之后,直接用TensorFlow调包实现神经网络,对于神经网络内在机理知之甚少。

编程语言与技术框架变化更新非常之快,理解背后的原理才是王道。下面文摘菌和大家一起用Numpy实现一步一步实现神经网络。

此篇文章旨在帮大家梳理神经网络知识点,且此篇文章是第一部分,只是简单搭一个简单的框架。暂时不涉及梯度下降、学习率调参等知识点。

最简单的神经网络包含三个要素,输入层,隐藏层以及输出层。关于其工作机理其完全可以类比成一个元函数:Y=W*X+b。

一个简单的神经网络可以理解为两次一元函数的输入和输出。

第一次:Y1=A1(W1*X+b1) ,其中X是原始数据的输入,A1代表激活函数。

第二次:Y2=A2(W2*Y1+b2),其中Y1是第一次的输出,A2是激活函数。参数W1、W2、b1、b2原则上各不相同。

本篇文章我们用到的激活函数有两个,一个是tan(x),另一个是softmax。两者的函数曲线如下。

两个函数都有相同的特点,即函数值在零点左右变化较大,当输入值远离零点,其输出较稳定。

首先导入相关的库,需要两个库,一个用于科学计算的Numpy,另一个是math。

import numpy as npimport math

然后定义激活函数,

def tanh(x): return np.tanh(x)def softmax(x): exp=np.exp(x-x.max()) return exp/exp.sum()

这两个激活函数,其中tanh函数,Numpy直接内嵌。softmax根据数学定义进行设置。第二个激活函数因为是指数函数,其值会变化较大,所以我们用x-x.max 缩小其变化范围,这对结果不影响。

我们使用的图片大小是 28*28像素。以后会用手写数字数据集训练网络,所以会有10个数字输入,分别是[1,2,3,4,5,6,7,8,9,10]。所以要先定义三个列表。

dinensions=[28*28,10]activation=[tanh,softmax]distribution=[{'b':[0,0]},             {'b':[0,0],'w':[-math.sqrt(6/(dinensions[0]+dinensions[1])),math.sqrt(6/(dinensions[0]+dinensions[1]))]}]

dinensions列表里面包含两个数,第一个是图片的像素大小,第二个是数字的输入变化量。

activation列表包含两个激活函数,分别为tanh,softmax。

distribution 列表里面对应的是字典格式的数据,分别对应神经网络参数取值范围。

其中第一层不包含参数W。

def init_parameters_b(layer):   dist=distribution[layer]['b'] return np.random.rand(dinensions[layer])*(dist[1]-dist[0])+dist[0] #使得生成的随机数在 b 的区间内def init_parameters_w(layer):   dist=distribution[layer]['w'] return np.random.rand(dinensions[layer-1],dinensions[layer])*(dist[1]-dist[0])+dist[0] #使得生成的随机数在 b 的区间内

上面代码是对b和w这两个参数初始化,因为我们输入的是28*28个数字,输出的是10个数字。所以第一层的 b 也有28*28个数字组成。根据矩阵的乘法规则,第二层的时候,w的维度只有是28*28行,10列才能满足输出的10个数字。因此第二层的b是10个数字。

dinensions[X] 意思是取切片,dinensions[1] 取得是10,dinensions[0],取得是28*28。

又因为np.random.rand()这一函数输出值的范围在[0,1],括号里面的参数(即dinensions[layer]只是确保输出的数字个数满足要求),所以为了让输出的值在一开始设置的 b 的区间内,我们设置先乘(dist[1]-dist[0])然后加上dist[0]。dist[1]和dist[0]分别对应参数的上下限。

def init_parameters():   parameters=[]   for i in range(len(distribution)):       layer_parameters={}       for j in distribution[i].keys():           if j=='b':               layer_parameters['b']=init_parameters_b(i)               continue           if j=='w':               layer_parameters['w']=init_parameters_w(i)               continue       parameters.append(layer_parameters) return parameters

上面代码是将三个参数的初始化集成达到一个函数里面。

先定义一个空列表(不要写错成空字典)是为了将三个参数统一输出。

注:字典类型不能用append,列表可以用,列表.append(字典) 也是可以的。

然后从零开始遍历distribution。用if循环语句,目的是把参数全部包含进来。

第二层for循环和if语句是判断,并正确添加参数。

parameters=init_parameters() #将参数赋值给新的变量。def predict(img,parameters):    I0_in=img+parameters[0]['b']    I0_out=activation[0](I0_in)    I1_in=np.dot(I0_out,parameters[1]['w']+parameters[1]['b'])    I1_out=activation[1](I1_in) return I1_out

定义输出函数,思路是这样的:输入数据后,根据函数:y=wx+b,进行变换,第一层w全为1。然后经过激活函数(第一个激活函数是tanh,所以用activation[0]),得出第一层的输入I0_out。 然后进入第二层,第一层的输出作为输入,根据函数:y=wx+b,进行变换,第二层的w为parameters[1]['w'],第二层的b为parameters[1]['b']。然后再经过激活函数softmax,得到输出。

predict(np.random.rand(784),parameters).argmax()

最后,随便输入一个784维数据(像素),都可以输出一个图片标签。

预测图片中的数字

好了,我们第一个简单的神经网络就搭建好了,关于如何使用梯度下降和学习率,如何训练网络以及如何加载图片数据,我们在以后的文章中会介绍。

注:此篇文章受B站up主大野喵渣的启发,并参考了其代码,感兴趣的同学可以去B站观看他关于神经网络的教学视频。

原文标题:TensorFlow什么的都弱爆了,强者只用Numpy搭建神经网络

文章出处:【微信号:BigDataDigest,微信公众号:大数据文摘】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
分享:

评论

相关推荐

销售行业是怎样被人工智能改变的

人工智能和机器学习现在很容易采用,并且人们也知道可以使现在执行的许多重复性任务和过程实现自动化。
发表于 12-09 17:06 9次 阅读
销售行业是怎样被人工智能改变的

人工智能已经能够在短时间内训练更大的神经网络

您会听到很多东西,那就是计算资源的可用性不断提高为人工智能的重要进步铺平了道路。
发表于 12-09 11:04 121次 阅读
人工智能已经能够在短时间内训练更大的神经网络

孩子们的可穿戴设备值不值得买

可穿戴设备还能帮助家长通过传感器监测孩子的关键生物特征(心跳、体温、血氧、出汗程度等),并借助机器学....
发表于 12-09 10:12 34次 阅读
孩子们的可穿戴设备值不值得买

为单元测试“正名”

我们有单元测试、增量测试、集成测试、回归测试、冒烟测试等等,名字非常多。谷歌看到这种“百家争鸣”的现....
的头像 腾讯技术工程官方号 发表于 12-08 11:00 192次 阅读
为单元测试“正名”

基于机器学习的密码强度评测微服务实现

K 最近邻算法 (k-Nearest Neighbor),简称KNN,是一个在理论上比较成熟的算法,....
的头像 腾讯技术工程官方号 发表于 12-08 10:46 312次 阅读
基于机器学习的密码强度评测微服务实现

对于代码规范的一些总结

都说代码是程序员的第二张脸,长时间下来,写的好的代码定会受到大家的尊重。遵循一些简单的规范,写干净一....
的头像 玩转单片机 发表于 12-08 10:21 159次 阅读
对于代码规范的一些总结

深度学习是基础服务

最重要的是,所有这些关键要素都统一在一个“云”平台上,创业者只需要考虑好自己的商业模式能不能挣钱就行....
的头像 面包板社区 发表于 12-08 09:28 267次 阅读
深度学习是基础服务

傅里叶变化入门教程之傅里叶分析PDF电子书免费下载

 傅里叶,Jean Baptiste Joseph Fourier(简·巴普蒂斯·约瑟夫·傅里叶,1....
发表于 12-06 15:36 44次 阅读
傅里叶变化入门教程之傅里叶分析PDF电子书免费下载

ESP8266_09基于IIC控制的OLED屏幕

上面代码中出现的函数,例如i2c_master_start()、i2c_master_writeBy....
的头像 单片机爱好者 发表于 12-06 15:12 263次 阅读
ESP8266_09基于IIC控制的OLED屏幕

自动化机器学习,2019人工智能最新的前沿技术

随着概念的普及,科技公司对人工智能的要求越来越高,成本、准确度、效率都影响着人工智能能否落地融入日常....
发表于 12-06 10:53 284次 阅读
自动化机器学习,2019人工智能最新的前沿技术

去匿名化这个问题怎样用机器学习来解决

在使用区块链ETL工具将区块链原始数据加载到数据库或大数据分析平台后,将标注层引入区块链数据集是进行....
发表于 12-06 09:56 45次 阅读
去匿名化这个问题怎样用机器学习来解决

C语言函数的实验详细资料说明

实验目的和要求(1)掌握C语言函数的定义方法、函数的声明及函数的调用方法。(2)掌握函数实参和形参的....
发表于 12-06 08:00 48次 阅读
C语言函数的实验详细资料说明

使用神经网络实现语音驱动发音器官运动合成方法详细资料说明

实现一种基于深度神经网络的语音驱动发音器官运动合成的方法, 并应用于语音驱动虚拟说话人动画合成。 通....
发表于 12-05 15:53 32次 阅读
使用神经网络实现语音驱动发音器官运动合成方法详细资料说明

具P Laplace算子的分数阶微分方程边值问题解的存在性论文说明

分数阶微积分理论是整数阶微积分理论的推广,发展至今已有300多年的历史。特别是近几十年来,分数阶微分....
发表于 12-05 15:53 34次 阅读
具P Laplace算子的分数阶微分方程边值问题解的存在性论文说明

如何使用谱回归核判别分析实现候机楼室内快速定位算法的论文详细说明

针对机场候机楼客流量大、室内环境复杂多变的特点,提出了一种基于谱回归核判别分析(SRKDA)的室内定....
发表于 12-05 15:27 29次 阅读
如何使用谱回归核判别分析实现候机楼室内快速定位算法的论文详细说明

使用LabVIEW数字波形图显示一个数字信号的步骤详细说明

用digital waveform graph 显示一个数字信号的步骤1.采集一个数字信号。2.构建....
发表于 12-05 14:59 30次 阅读
使用LabVIEW数字波形图显示一个数字信号的步骤详细说明

人工智能在数据中心有什么价值

人工智能(AI)理解和解决问题时近乎具有神秘的力量。
发表于 12-04 17:12 75次 阅读
人工智能在数据中心有什么价值

人工智能增强客户服务代理的方法是什么

人工智能技术通常可以执行大量的人类重复工作,这使企业员工能够有更多时间和精力应对棘手的问题。
发表于 12-04 17:05 54次 阅读
人工智能增强客户服务代理的方法是什么

如何使用深度神经网络实现实时人脸识别

作为典型的模式识别任务,人脸识别有着巨大的实际应用价值与市场前景。理想环境下的人脸识别已经取得不俗成....
发表于 12-04 16:57 60次 阅读
如何使用深度神经网络实现实时人脸识别

人工智能在高性能计算学习方面可以吸取怎样的教训

高性能计算(HPC)具有非常高水平的聚合计算能力,为单个应用程序提供巨大的性能,远远超过性能最强大的....
发表于 12-04 16:56 60次 阅读
人工智能在高性能计算学习方面可以吸取怎样的教训

人工智能的寒冬是否会再次来临

尽管人工智能作为生活的得力助手,早已解决了先前无法解决的痛点,但按照当前科技发展状况,超越人类能力的....
发表于 12-04 16:52 189次 阅读
人工智能的寒冬是否会再次来临

人工智能解决了还是助长了网络安全问题

而随着技术的进步,商业运作变得更加智能化,操作也是如此,强大的技术改变了商业的本质。
发表于 12-04 16:34 62次 阅读
人工智能解决了还是助长了网络安全问题

AI时代的软件开发你觉得怎么样

人工智能驱动的优化算法,如神经网络,可以针对一个问题,尝试各种解决方案的评估标准,直到找到他们所认为....
发表于 12-04 16:27 73次 阅读
AI时代的软件开发你觉得怎么样

人工智能是如何来评估神经系统疾病的

人工神经网络目前已经被用于驾驶汽车、解读视频监控以及监控和调节交通等。使用人工神经网络的这场革命也鼓....
发表于 12-04 15:39 49次 阅读
人工智能是如何来评估神经系统疾病的

上品折扣携手容联七陌,打造“线上+线下”极致服务体验

容联七陌全场景智能客服在上品折扣部署时,为其将用户咨询渠道进行全面整合,打通电话、App、网站、微信....
的头像 CTI论坛 发表于 12-04 14:31 233次 阅读
上品折扣携手容联七陌,打造“线上+线下”极致服务体验

XDF亚洲站:Xilinx宣布三大战略取得重大成就

由自适应和智能计算的全球领先企业赛灵思公司(Xilinx, Inc.,(NASDAQ:XLNX))举....
发表于 12-04 14:21 986次 阅读
XDF亚洲站:Xilinx宣布三大战略取得重大成就

世界各地的企业都需要尖端技术,在商业世界中的AI和ML

世界变得极具竞争性,因此,企业需要最新技术这一事实是毫无疑问的。高端技术的实施使企业可以更有效地工作....
的头像 CTI论坛 发表于 12-04 14:07 304次 阅读
世界各地的企业都需要尖端技术,在商业世界中的AI和ML

XDF一线报道:Xilinx“数据中心优先战略” 取得惊人发展 强大生态系统引领现代数据中心转型

2019 年赛灵思开发者大会( XDF )亚洲站今日于北京盛大揭幕。
发表于 12-04 13:45 91次 阅读
XDF一线报道:Xilinx“数据中心优先战略” 取得惊人发展 强大生态系统引领现代数据中心转型

合成生物学能否激发下一波人工智能的发展

赖特兄弟(Wright Brothers)在20世纪初制造了世界上第一架飞机时,从鸟类的“有见识”运....
发表于 12-04 10:41 166次 阅读
合成生物学能否激发下一波人工智能的发展

PID控制的理论和PID控制器设计的及PID控制器参数整定的以及分析

PID控制作为一种经典的控制方法而广泛应用于工业控制中,是实际工业生产过程正常运行的基本保障。随着计....
发表于 12-04 08:00 57次 阅读
PID控制的理论和PID控制器设计的及PID控制器参数整定的以及分析

C语言相关文件函数的功能与用法详细说明

fopen(打开文件) 相关函数 open,fclose 表头文件 #include《s....
发表于 12-04 08:00 62次 阅读
C语言相关文件函数的功能与用法详细说明

Imagination联合紫光展锐开展新一代神经网络加速器的AI战略

Imagination Technologies宣布:领先的无晶圆厂半导体公司紫光展锐(UNISOC....
发表于 12-03 17:55 174次 阅读
Imagination联合紫光展锐开展新一代神经网络加速器的AI战略

IT服务管理可能受到人工智能的影响吗

人工智能或者机器智能将很快会创造出一种前所未有的现象。
发表于 12-03 17:24 61次 阅读
IT服务管理可能受到人工智能的影响吗

人工智能数据存储需要注意哪一些问题

人工智能和机器学习将成为帮助企业利用其核心数字资产创造竞争优势的两个最重要的工具。
发表于 12-03 16:55 54次 阅读
人工智能数据存储需要注意哪一些问题

商业人工智能的采用你认为可信吗

对许多组织而言,由于缺乏透明度,人工智能仍然是谜团重重,人们不敢将其投入生产中。
发表于 12-03 16:39 56次 阅读
商业人工智能的采用你认为可信吗

使用人工智能和机器学习需要提前知道什么

在业务用例中有效使用人工智能和机器学习技术可以帮助企业领先于其他竞争对手,因为这些技术将会消除困扰其....
发表于 12-03 16:34 69次 阅读
使用人工智能和机器学习需要提前知道什么

机器学习翻译存在什么局限性

机器学习为企业提供了翻译文档的新机会,他们可以使用机器学习来翻译营销材料和其他文献。
发表于 12-03 16:26 49次 阅读
机器学习翻译存在什么局限性

3个C语言编程易犯的错误

对比过后显然是错误的,大家一眼看出a要写成&a,这没问题。但也有人说可以把*pa改成&pa,这样行吗....
的头像 嵌入式ARM 发表于 12-03 15:47 217次 阅读
3个C语言编程易犯的错误

如何学习深度神经网络和目标检测详细笔记说明

今天的计算机视觉技术已经可以在图片、视频中识别出大量类别的物体, 甚至可以初步理解图片或者视频中的内....
发表于 12-03 15:29 49次 阅读
如何学习深度神经网络和目标检测详细笔记说明

如何使用深度卷积神经网络进行ImageNet数据库的分类

我们训练了一个大型的深度卷积神经网络,来将在ImageNet LSVRC-2010 大赛中的120万....
发表于 12-03 15:29 45次 阅读
如何使用深度卷积神经网络进行ImageNet数据库的分类

如何利用二分类学习器来解决多分类问题

一对其余其实更加好理解,每次将一个类别作为正类,其余类别作为负类。此时共有(N个分类器)。
的头像 Imagination Tech 发表于 12-03 11:09 265次 阅读
如何利用二分类学习器来解决多分类问题

人工智能AI的主要内容和AI有哪些研究方法及一些MATLAB仿真的详细说明

人工智能(Artificial Intelligence,简称AI)是50年代兴起的一门新兴边缘学科....
发表于 12-03 10:48 52次 阅读
人工智能AI的主要内容和AI有哪些研究方法及一些MATLAB仿真的详细说明

人工智能正在学习量子力学以此来设计新分子

一种新的机器学习算法可以探测分子的量子行为,从而使化学家具有更好的从头开始设计新化合物的能力。
发表于 12-03 10:30 1589次 阅读
人工智能正在学习量子力学以此来设计新分子

随着人工智能的落地 自动化机器学习方法AutoML应运而生

随着概念的普及,科技公司对人工智能的要求越来越高,成本、准确度、效率都影响着人工智能能否落地融入日常....
发表于 12-02 15:03 89次 阅读
随着人工智能的落地 自动化机器学习方法AutoML应运而生

激光物理学的PDF电子书免费下载

在本书中我们论述辐射与物质的相互作用,并特别注意它对于典型地存在于激光器中的增益(放大)介质的应用。....
发表于 12-02 08:00 38次 阅读
激光物理学的PDF电子书免费下载

C语言的习题集资料合集免费下载

本文档的主要内容详细介绍的是C语言的习题集资料合集免费下载包括了:第一单元 程序设计和C语言,第二单....
发表于 12-02 08:00 46次 阅读
C语言的习题集资料合集免费下载

深度学习和机器学习的六个本质区别你知道几个?

深度学习和机器学习已经变得无处不在,那它们之间到底有什么区别呢?本文我们为大家总结了深度学习VS机器....
的头像 汽车玩家 发表于 11-30 11:17 462次 阅读
深度学习和机器学习的六个本质区别你知道几个?

谷歌发布的新AI工具可以帮助克服机器学习的难点

虽然大多数人每天都会接触某种算法,但没有多少人可以自信地说他们实际上了解人工智能(AI)的工作原理。
发表于 11-30 11:09 274次 阅读
谷歌发布的新AI工具可以帮助克服机器学习的难点

特斯拉自动雨刷软件升级,深层神经网络控制雨刷

据外媒报道,特斯拉发布了一款新的软件升级,使用一种新的车辆深度神经网络对车辆的自动雨刷进行了重大升级....
的头像 汽车玩家 发表于 11-29 16:24 383次 阅读
特斯拉自动雨刷软件升级,深层神经网络控制雨刷

史上最全AI人工智能入门+进阶学习视频全集(200G)【免费领取】

近几年来,人工智能(AI)概念很火热,几乎人人都在学习人工智能,AI市场人才的抢夺也非常的激烈。根据百科的解释,人工智能...
发表于 11-27 12:10 339次 阅读
史上最全AI人工智能入门+进阶学习视频全集(200G)【免费领取】

请问用户在写特征值时应该注意什么样的问题来避免丢数据呢?

Hi    TI的前辈们!     我在simpleBLECentral工程中,在用户的任务里调用函数GATT_WriteCha...
发表于 11-11 14:06 233次 阅读
请问用户在写特征值时应该注意什么样的问题来避免丢数据呢?

如何理解GATT_DiscAllPrimaryServices这些数据?

使用标题的函数后如果成功后,会发出一个消息:ATT_READ_BY_GRP_TYPE_RSP static void simpleBLEGAT...
发表于 11-11 11:22 154次 阅读
如何理解GATT_DiscAllPrimaryServices这些数据?

请问CC2541用IAR调试时函数形参和实参不一样该怎么办?

IAR 9.30.1调试CC2541的BLE工程时出现函数调用形参和实参不一致的问题。 ...
发表于 11-11 10:42 109次 阅读
请问CC2541用IAR调试时函数形参和实参不一样该怎么办?

为什么7寸电容触摸屏应用在F4探索板时触摸无效?

新买了一块原子哥的7寸电容触摸屏,我用的是原子哥的F4探索板,程序是ucGUI&Emwin+触摸屏,这个程序在老版的7寸V2电容屏上好...
发表于 11-11 04:35 65次 阅读
为什么7寸电容触摸屏应用在F4探索板时触摸无效?

为什么用内联汇编调用CPSIE退出临界态系统会被卡住?

出问题的地方和反汇编结果如图。这个是在MDK里优化等级为Level-2时编出来的,开关中是用内联汇编调用指令 #if OS_CRIT...
发表于 11-11 04:35 76次 阅读
为什么用内联汇编调用CPSIE退出临界态系统会被卡住?

如何让LCD中的进度条函数显示出来?

各位,小弟最近在做进度条,就是在12864上面做进度条显示,不会弄,可以指点一下吗? 对了,有这个程序吗?可以发上来分享下吗...
发表于 11-11 00:22 89次 阅读
如何让LCD中的进度条函数显示出来?

ECMAScript的闭包与匿名函数你分的清吗?

重拾ECMAScript基础——闭包与匿名函数
发表于 11-08 09:39 60次 阅读
ECMAScript的闭包与匿名函数你分的清吗?

USB HOST返回函数怎么调用?

                           &nb...
发表于 11-08 09:17 92次 阅读
USB HOST返回函数怎么调用?

为什么调用C的函数参数传递的往往是传值?

#include void swap(int m,int n) {      int temp;      temp = m;   &nbs...
发表于 11-08 04:35 49次 阅读
为什么调用C的函数参数传递的往往是传值?