python编程之神经网络篇(python的神经网络编程)
off999 2025-05-02 12:52 6 浏览 0 评论
#头条创作挑战赛#神经网络发展到今天大致经历了2次兴起和2次衰落,1943年心理学家McCulloch(麦卡洛克)和数学家Pitts(皮茨)参考生物神经系统的工作原理,首次提出建立了MP神经元模型。
其中x1、x2、x3……xn来表示输入,w1、w2……wn表示权重,代表每个信号的重要程度,计算公式为:x1*w1+x2*w2+x3*w3+……+xn*wn,这被称为信号的加权求和,中间的f代表激活函数,它会对计算结果进行处理,只有大于阈值θ的才会被输出,否则不输出(或者输出为0)。神经元的整个计算公式如下
MP模型采用的激活函数是阶跃函数sgn(x)
1958年罗森布拉特基于MP模型提出感知机模型,最早的感知机就是由输入和输出层组成的线性分类器,输入层把信号加权求和传递给输出层,权重初始值是随机给定的,然后计算损失值就是输出结果和标签值之差,再根据损失值反向调整输入权重,重复多次直至模型可以很好拟合数据,实现有效分类,过程如图所示。
当时罗森布拉特演示使用该算法识别出简单图像,引发了全社会关注,美国军方甚至认为神经网络比“原子弹”更重要,大力投入经费研发使得神经网络的发展进入第一次高潮。但随着1969年人工智能泰斗马文·明斯基发文指出单层感知机无法完成异或问题,而多层感知机对计算机算力要求又太高,从而认为深度神经网络的研究没有意义,致使神经网络进入了第一次冰河期。异或问题如下所示,这种问题需要采用非线性方式解决,右图使用椭圆实现分类。
1970年芬兰数学家Seppo Linnainmaa提出反向传播算法,但当时没有引起人们足够的重视,1983年物理学家John Hopfield利用神经网络,在求解旅行商问题上获得了当时最好成绩,引起了轰动。但是20世纪90年代支持向量机的诞生又一次让神经网络陷入低谷,因为支持向量机可以把二维数据映射到高维从而简单完成非线性分类,并且没有增加计算复杂度,而且还支持小样本数据的回归和分类,相比较而言神经网络的可解释性较差,经常被称为黑盒子(人们很难说清楚每一个隐藏层的功能,所以使用的时候很担心)并且需要非常大量的数据,需要高性能的计算机。神经网络工作过程如下图所示。
Image Net是世界级计算机视觉领域挑战赛,比赛任务之一是对1000类图片分类。2010年冠军队使用支持向量机和手工操作相结合,错误率为28.2%,2012年多伦多大学首先使用深度神经网络使错误率降至15.3%,使用的神经网络仅由五个卷积层和三个全连接层组成,再一次把神经网络的研究推向高潮。之后每年的比赛都是神经网络的较量赛,2016年冠军团队使用了500多个卷积层,至此之后人们开始使用更多的隐藏层和神经元来解决问题。如今,据说微软使用了152层神经网络,拥有数千万级的神经元。
2011年IBM的超级计算机“沃森”打败人类选手夺得100万美元奖金。2016年谷歌的AlphaGo接连打败世界围棋冠军李世石和柯洁,它就是使用了神经网络算法。现在神经网络算法的使用已经非常广泛了,但人们依旧不知道黑盒子中的秘密,谷歌曾有一位工程师导出了AlphaGo的运行数据,想要研究一下它下围棋的秘诀,从而传授给学围棋的儿子,但研究了很久他也无法看懂隐藏层的调参过程。
下面就以建立单神经元模型求解直线方程为例来讲解。
根据我们的经验可以得到该方程应该是线性的:y=w*x+b,w为斜率,b为偏置项。
#导入要使用的第三方库
import tensorflow as tf #导入tensorflow库
import numpy as np #导入numpy库
import matplotlib.pyplot as plt #导入绘图库
#生成数据
X=np.linspace(-1,1,100) #使用numpy的linspace函数生成等差数列,-1到1之间的100个数
y=2*X+1+np.random.randn(*X.shape)*0.4 #生成每个X对应的y值,y=2*x+1
#np.random.randn是生成一组服从标准正态分布的随机样本值,这里是加入噪音
plt.scatter(X,y) #绘制生成的数据散点图
def model(x,w,b): #建立模型,计算x*w+b,返回计算结果
return tf.multiply(x,w)+b #tf.multiply函数是把x和w对应位置的元素相乘
def loss(x,y,w,b): #定义损失函数,求均方差
error=model(x,w,b)-y #计算模型预测值和真实值的差
squard=tf.square(error) #求差值的平方,tf.square函数是对每一个参数求平方
return tf.reduce_mean(squard) #tf.reduce_mean计算参数某一维度的平均值,这里没有写维度
def grad(x,y,w,b): #定义梯度函数,计算x,y在w,b上的梯度
with tf.GradientTape() as tape: #tf.GradientTape封装了求导的计算
loss_=loss(x,y,w,b) #调用损失函数计算均方差
return tape.gradient(loss_,[w,b]) #对均方差在[w,b]上求导,返回梯度向量
w=tf.Variable(np.random.randn(),tf.float32) #tf.Variable是声明变量,可以保存和更新参数
#构建变量w表示线性函数的斜率,初始值为随机生成的服从正态分布的数值
b=tf.Variable(0.0,tf.float32) #构建变量b表示线性函数的截距,初始值为0
p=8 #训练的轮数,迭代次数
learn_rate=0.01 #学习率
for e in range(p): #重复训练p次
for xx,yy in zip(X,y): #每次从X和y中逐一取出[xx,yy]数据
w_,b_=grad(xx,yy,w,b) #计算当前数据[xx,yy]在[w,b]上的梯度向量
c_w=w_*learn_rate #梯度向量w*学习率=需要调整的w
c_b=b_*learn_rate #梯度向量b*学习率=需要调整的b
w.assign_sub(c_w) #w减去需要调整的w得到新的w
b.assign_sub(c_b) #b减去需要调整的b得到新的b
plt.plot(X,w.numpy()*X+b.numpy()) #每一轮结束绘制一条拟合数据的直线
plt.show()
8轮迭代训练之后,模型基本稳定,画出的直线方程差异越来越小,最大化拟合了现有数据。
相关推荐
- 软件测试|Python requests库的安装和使用指南
-
简介requests库是Python中一款流行的HTTP请求库,用于简化HTTP请求的发送和处理,也是我们在使用Python做接口自动化测试时,最常用的第三方库。本文将介绍如何安装和使用request...
- python3.8的数据可视化pyecharts库安装和经典作图,值得收藏
-
1.Deepin-linux下的python3.8安装pyecharts库(V1.0版本)1.1去github官网下载:https://github.com/pyecharts/pyecharts1...
- 我在安装Python库的时候一直出这个错误,尝试很多方法,怎么破?
-
大家好,我是皮皮。一、前言前几天在Python星耀群【我喜欢站在一号公路上】问了一个Python库安装的问题,一起来看看吧。下图是他的一个报错截图:二、实现过程这里【对不起果丹皮】提示到上图报错上面说...
- 自动化测试学习:使用python库Paramiko实现远程服务器上传和下载
-
前言测试过程中经常会遇到需要将本地的文件上传到远程服务器上,或者需要将服务器上的文件拉到本地进行操作,以前安静经常会用到xftp工具。今天安静介绍一种python库Paramiko,可以帮助我们通过代...
- Python 虚拟环境管理库 - poetry(python虚拟环境virtualenv)
-
简介Poetry是Python中的依赖管理和打包工具,它允许你声明项目所依赖的库,并为你管理它们。相比于Pipev,我觉得poetry更加清爽,显示更友好一些,虽然它的打包发布我们一般不使...
- pycharm(pip)安装 python 第三方库,时下载速度太慢咋办?
-
由于pip默认的官方软件源服务器在国外,所以速度慢,导致下载时间长,甚至下载会频繁中断,重试次数过多时会被拒绝。解决办法1:更换国内的pip软件源即可。pip指定软件源安装命令格式:pipinsta...
- 【Python第三方库安装】介绍8种情况,这里最全看这里就够了!
-
**本图文作品主要解决CMD或pycharm终端下载安装第三方库可能出错的问题**本作品介绍了8种安装方法,这里最全的python第三方库安装教程,简单易上手,满满干货!希望大家能愉快地写代码,而不要...
- python关于if语句的运用(python中如何用if语句)
-
感觉自己用的最笨的方式来解这道题...
- Python核心技术——循环和迭代(上)
-
这次,我们先来看看处理查找最大的数字问题上,普通人思维和工程师思维有什么不一样。例如:lst=[3,6,10,5,7,9,12]在lst列表中寻找最大的数字,你可能一眼能看出来,最大值为...
- 力扣刷题技巧篇|程序员萌新如何高效刷题
-
很多新手初刷力扣时,可能看过很多攻略,类似于按照类型来刷数组-链表-哈希表-字符串-栈与队列-树-回溯-贪心-动态规划-图论-高级数据结构之类的。可转念一想,即...
- “千万别学我!从月薪3000到3万,我靠这3个笨方法逆袭”
-
3年前,我还在为房租而忧心忡忡,那时月薪仅有3000元;如今,我的月收入3万!很多人都问我是如何做到的,其实关键就在于3个步骤。今天我毫无保留地分享给大家,哪怕你现在工资低、缺乏资源,照着做也能够实...
- 【独家攻略】Anaconda秒建PyTorch虚拟环境,告别踩坑,小白必看
-
目录一.Pytorch虚拟环境简介二.CUDA简介三.Conda配置Pytorch环境conda安装Pytorch环境conda下载安装pytorch包测试四.NVIDIA驱动安装五.conda指令一...
- 入门扫盲:9本自学Python PDF书籍,让你避免踩坑,轻松变大神!
-
工作后在学习Python这条路上,踩过很多坑。今天给大家推荐9本自学Python,让大家避免踩坑。入门扫盲:让你不会从一开始就从入门到放弃1《看漫画学Python:有趣、有料、好玩、好用》2《Pyth...
- 整蛊大法传授于你,不要说是我告诉你的
-
大家好,我是白云。给大家整理一些恶搞代码,谨慎使用!小心没朋友。1.电脑死机打开无数个计算器,直到死机setwsh=createobject("wscript.shell")do...
- python 自学“笨办法”7-9章(笨办法学python3视频)
-
笨办法这本书,只强调一点,就是不断敲代码,从中增加肌肉记忆,并且理解和记住各种方法。第7章;是更多的打印,没错就是更多的打印第八章;打印,打印,这次的内容是fomat的使用与否f“{}{}”相同第九...
你 发表评论:
欢迎- 一周热门
-
-
python 3.8调用dll - Could not find module 错误的解决方法
-
加密Python源码方案 PyArmor(python项目源码加密)
-
Python3.8如何安装Numpy(python3.6安装numpy)
-
大学生机械制图搜题软件?7个受欢迎的搜题分享了
-
编写一个自动生成双色球号码的 Python 小脚本
-
免费男女身高在线计算器,身高计算公式
-
将python文件打包成exe程序,复制到每台电脑都可以运行
-
Python学习入门教程,字符串函数扩充详解
-
Python数据分析实战-使用replace方法模糊匹配替换某列的值
-
Python进度条显示方案(python2 进度条)
-
- 最近发表
-
- 软件测试|Python requests库的安装和使用指南
- python3.8的数据可视化pyecharts库安装和经典作图,值得收藏
- 我在安装Python库的时候一直出这个错误,尝试很多方法,怎么破?
- 自动化测试学习:使用python库Paramiko实现远程服务器上传和下载
- Python 虚拟环境管理库 - poetry(python虚拟环境virtualenv)
- pycharm(pip)安装 python 第三方库,时下载速度太慢咋办?
- 【Python第三方库安装】介绍8种情况,这里最全看这里就够了!
- python关于if语句的运用(python中如何用if语句)
- Python核心技术——循环和迭代(上)
- 力扣刷题技巧篇|程序员萌新如何高效刷题
- 标签列表
-
- python计时 (54)
- python安装路径 (54)
- python类型转换 (75)
- python进度条 (54)
- python的for循环 (56)
- python串口编程 (60)
- python写入txt (51)
- python读取文件夹下所有文件 (59)
- java调用python脚本 (56)
- python操作mysql数据库 (66)
- python字典增加键值对 (53)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python qt (52)
- python人脸识别 (54)
- python斐波那契数列 (51)
- python多态 (60)
- python命令行参数 (53)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- centos7安装python (53)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)