第15章-Python与人工智能_第1页
第15章-Python与人工智能_第2页
第15章-Python与人工智能_第3页
第15章-Python与人工智能_第4页
第15章-Python与人工智能_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第15章Python与人工智能王雷春湖北大学内容15.1概述15.2机器学习15.3深度学习15.1概述15.1.1人工智能简介15.1.2Python与人工智能15.1.1人工智能简介1.什么是人工智能1939年,27岁的数学天才阿兰·图灵思考“如何用一台机器打败另一台机器”。1956年,一批年轻的科学家讨论人工智能(ArtificialIntelligence,AI)。1997年,IBM“深蓝”计算机击败了国际象棋冠军卡斯帕罗夫。2016年和2017年,谷歌研发的“AlphaGo”战胜了世界围棋顶级棋手李世石九段和柯洁九段。

人工智能不再停留在口头上和实验室中,而是离人类越来越近,已经进入人类的工作和生活中,与人类深度融合。

人工智能是21世纪三大尖端技术(基因工程、纳米科学、人工智能)之一。15.1.1人工智能简介人工智能的定义:人工智能是研究、开发用于模拟、延伸和扩展人类智能的理论、方法、技术及应用系统的一门新科学技术。人工智能企图了解智能的实质,并生产出一种新的能以与人类智能相似的方式做出反应的智能机器。

人工智能领域的研究包括机器人、语言识别、图像识别、自然语言处理和专家系统等。

人工智能自诞生以来,其理论和技术日益成熟,其应用领域不断扩大。

人工智能带来的科技产品将是人类智慧的“容器”。

部分国家对人工智能进行了战略布局见表15.1(教材P290)。15.1.1人工智能简介(1)一些世界顶尖公司在人工智能的研究和应用方面投入了巨大的人力、物力:

谷歌拥有2个世界顶尖工智能实验室,即GoogleX实验室(深度学习框架TensorFlow在这里诞生)和DeepMind实验室(AlphaGo是其代表作品)

微软公司在2014年成立了艾伦人工智能研究院,致力于研究人工智能Facebook发展了两个人工智能实验室(FAIR和AML)

百度在2013年1月、2017年3月分别成立深度学习研究院和深度学习技术及应用国家工程实验室

阿里巴巴人工智能实验室于2017年7月5日首次公开亮相

腾讯在2018年3月成立了机器人实验室。15.1.1人工智能简介(2)国内外知名大学成立了研究机构或学院进行人工智能研究和教学:

麻省理工学院在1959年就成立了人工智能实验室,于2018年10月宣布启用10亿美元建设新的人工智能学院

斯坦福大学在1962年成立的人工智能实验室致力于推动机器人教育

加州大学伯克利分校的机器人和智能机器实验室致力于用机器人模拟动物的行为

清华大学在1987年成立了智能技术与系统国家重点实验室

中国科学院大学在2017年5月宣布成立人工智能技术学院

中国科学技术大学建立了两个人工智能方向的国家工程实验室。15.1.1人工智能简介(3)人工智能与科学技术及工业等相结合已经产生了多方面的应用:

人脸识别(如face++)

购物推荐(如淘宝App)

语音识别(如讯飞输入法)

图像识别(如微信小程序)

新闻资讯推荐(如今日头条)

无人驾驶AlphaGo围棋

苹果公司个人助理Siri(能够帮助客户发送短信等)

亚马逊推出的Alexa(可以帮助用户在网上搜寻信息)15.1.1人工智能简介

人工智能、机器学习(MachineLearning,ML)和深度学习(DeepLearning,DL)三者之间的关系见右图)。

人工智能包含范围最大,最早被提出;机器学习在20世纪80年代才逐渐被提出和研究;深度学习则在近几年才被广泛研究并迅速成为研究热点。人工智能是研究用计算机模拟人的某些思维过程和智能行为(如学习、推理、思考、规划等)的学科。

人工智能涉及计算机科学、心理学、哲学、语言学等几乎所有自然科学和社会科学,其范围已远远超出了计算机科学的范畴。15.1.2Python与人工智能2.Python与人工智能人工智能的程序开发语言目前主要有Prolog、LISP、C/C++、Java和Python。Python拥有在人工智能学习和处理过程中所需要的各种库。(1)数据获取库,如数据获取库Requests、Scrapy和数据解析库BeautifulSoup等。(2)数据分析、处理库,如NumPy(数组和矩阵运算等)库、Pandas(数据分析)库、SciPy(工程和科学计算)库和MatPlotlib(数据可视化)库等。(3)人工智能库,如自然语言处理库NLTK、机器学习库Sklearn和深度学习库TensorFlow、Keras、PyTorch等。

另外,Python的开源、与平台无关、包装能力、可组合性、可嵌入性都非常有利于人工智能的学习和研究。15.2机器学习15.2.1Sklearn15.2.2典型案例——使用线性回归模型训练、测试和预测数据15.2机器学习

机器学习是一门研究机器获取新知识和新技能,并识别现有知识的科学。

机器学习领域的主要研究对象是人工智能,特别是如何在经验学习中改善具体算法的性能。

通过机器学习,可以发现喜欢的新音乐;快速找出想网购的鞋子;通过命令控制手机;让恒温器自动调节温度;比人类更准确地识别出潦草的手写邮箱地址;更安全地防止信用卡诈骗;从网页寻找头条新闻等。机器学习算法和软件逐渐成为许多产业的核心工具。

那么,机器学习是如何进行学习的呢?普遍认为,机器学习的基础是归纳(Generalize),就是从已知案例数据中找出未知的规律。

机器学习的过程与推理过程是紧密相连的,学习中所用的推理越多,系统的能力就越强。15.2机器学习机器学习通常按学习和模型类型分类。(1)按学习方式分类:

监督学习(SupervisedLearning)

无监督学习(UnsupervisedLearning)

半监督学习(Semi-supervisedLearning)

强化学习(ReinforcementLearning)(2)按模型类型分类:回归、基于距离方法、正则化方法、树方法、贝叶斯方法、聚类、神经网络、深度学习、降维、集成学习、文本挖掘等。15.2机器学习

典型的机器学习算法:决策树、随机森林算法、逻辑回归、支持向量机(SVM)、朴素贝叶斯、K-最近邻算法、K-均值算法、Adaboost算法、神经网络算法和马尔可夫算法等。

机器学习已经有了十分广泛的应用,如数据挖掘、计算机视觉、自然语言处理、生物特征识别、搜索引擎、医学诊断、检测信用卡欺诈、证券市场分析、DNA序列测序、语音和手写识别、战略游戏和机器人运用等。15.2.1Sklearn1.简介Sklearn是Scikit-learn的简称,用Python实现,它是基于NumPy、SciPy、Matplotlib等的机器学习算法库。Sklearn的内容丰富,功能强大,包含大量用于机器学习的算法、模块和数据集。(1)实现数据预处理、分类、回归、降维、模型选择等常用的机器学习算法。(2)特征提取(ExtractingFeatures)、数据处理(ProcessingData)和模型评估(EvaluatingModels)等模块。(3)内置了大量用于训练、测试和评估模型的数据集。15.2.1SklearnSklearn可以不受任何限制,遵从自由的BSD(伯克利软件发行版,一种开源协议)授权。

许多Sklearn算法都可以快速执行且可扩展,海量数据集除外。Sklearn的稳定性很好,大部分代码都可以通过Python的自动化测试。Sklearn可从站点/project/scikit-learn/#files下载。

本书案例对应下载安装文件scikit_learn-0.20.3-cp37-cp37m-win_amd64.whl。Sklearn下载和安装方法参见1.2.5节。15.2.1Sklearn2.使用Sklearn进行机器学习的主要步骤1)获取数据

获取数据通常三种方法:使用Sklearn现有数据集、创建新的数据集和获取真实数据集。(1)使用Sklearn现有数据集。比较有代表性的数据集如下。①鸢尾花数据集:通过方法load_iris()调用,常用于分类算法。②波士顿房价数据集:通过方法load_boston()调用,常用于回归算法。③手写数字数据集:通过方法load_digits()调用,常用于回归算法。④糖尿病数据集:通过方法load_diabetes()调用,常用于回归算法。15.2.1Sklearn(2)创建新的数据集。Sklearn中的样本生成器(samples_generator)包含大量创建样本数据的方法,其中比较常见的方法如下。①make_blobs():产生多类单标签数据集。②make_classification():产生多类单标签数据集。③make_regression():产生回归任务的数据集。④make_multilabel_classification():产生多类多标签随机样本集。⑤make_gaussian_quantiles():产生分组多维正态分布的数据集。(3)获取真实数据集。一些国内外机构提供了免费的真实数据集,这些真实数据集可以直接用于模型的学习、测试和评估等。15.2.1Sklearn2)数据预处理

数据预处理阶段是机器学习中不可缺少的一环,它可以使数据更加有效地被模型或者评估器识别。(1)数据归一化。(2)正则化。(3)one-hot编码。3)数据集拆分

在训练数据集时,通常会把训练数据集进一步拆分成训练集和测试集。

训练集用于建立模型,测试集用于对模型进行验证。15.2.1Sklearn4)定义模型Sklearn为所有模型提供了非常相似的接口,这样可以更加快速地熟悉所有模型的用法。Sklearn中常用的模型见表15.2(教材P294)。5)模型评估评估模型的基本思路如下。(1)准备测试样本。测试样本的特征应与训练样本的特征一致。(2)使用模型对测试样本进行计算。将计算结果与样本中的真实值进行比较,评估其准确率。15.2.1Sklearn6)保存模型

训练好模型后,可以将训练好的模型保存到本地或者放到网上。

模型可以保存为Pickle文件,或使用Sklearn自带方法joblib()对模型进行保存。7)应用模型模型保存后,可以在实际中进行使用,如对数据分类或预测等。15.2.2典型案例【例15.1】使用Sklearn中的线性回归模型训练、测试和预测数据。分析:本案例实现方法如下。(1)通过Sklearn中的datasets.make_regression()方法生成指定数量的回归数据集。(2)将生成的数据集拆分为训练数据和测试数据。(3)使用训练数据训练、保存模型。(4)使用测试数据评估模型。(5)将生成的模型保存在指定位置。(6)从指定位置读出模型并预测数据。15.2.2典型案例程序代码:importmatplotlib.pyplotaspltfromsklearn.linear_modelimportLinearRegressionfromsklearn.externalsimportjoblibfromsklearnimportdatasetsfromsklearn.model_selectionimporttrain_test_split15.2.2典型案例x,y=datasets.make_regression(n_samples=200,n_features=1,n_targets=1,noise=6)#生成数据点以散点图显示.print("1.生成数据的散点图(图15.2左),训练数据和预测数据拟合线(图15.2右).")plt.scatter(x,y)plt.xticks(fontsize=16)plt.yticks(fontsize=16)plt.xlabel('x轴-x',fontproperties='SimHei',fontsize=18)plt.ylabel('y轴-y',fontproperties='SimHei',fontsize=18)plt.show()15.2.2典型案例#2.拆分数据集,70%数据用于训练,30%数据用于测试.train_x,test_x,train_y,test_y=train_test_split(x,y,test_size=0.3,random_state=0)#3.训练模型.LinearModel=LinearRegression()LinearModel.fit(train_x,train_y)fitted_y=LinearModel.predict(train_x)#图形显示训练数据和预测数据.plt.plot(train_x,train_y,'bo')plt.plot(train_x,fitted_y,'r',linewidth=4.0)plt.xlabel('x轴-train_x',fontproperties='SimHei',fontsize=18)plt.ylabel('y轴-train_y/fitted_y',fontproperties='SimHei',fontsize=18)plt.legend(['train_y','fitted_y'],fontsize=16)plt.xticks(fontsize=16)plt.yticks(fontsize=16)plt.show()15.2.2典型案例print("2.模型评估值:%.6f."%LinearModel.score(test_x,test_y))#5.保存模型.joblib.dump(LinearModel,'TrainModel.m')#6.使用模型.LinearModelUse=joblib.load('TrainModel.m')testx=[[1.6]]print("3.%f的预测结果为:%f."%(testx[0][0],LinearModelUse.predict([[1.6]])))15.2.2典型案例运行结果:1.生成数据的散点图(图15.2左),训练数据和预测数据拟合线(图15.2右).2.模型评估值:0.991244.3.1.600000的预测结果为:112.579482.15.2.2典型案例15.3深度学习15.3.1TensorFlow15.3.2典型案例——识别模糊的手写数字图片15.3.1TensorFlow深度学习的概念源于人工神经网络的研究,由Hinton等人于2006年提出,通过组合低层特征形成更加抽象的高层表示属性类别或特征,以发现数据的分布式特征表示。

深度学习是机器学习研究中一个新的领域,其动机在于建立、模拟人脑进行分析学习的神经网络,模仿人脑的机制来解释数据,如图像、声音和文本等。

同机器学习方法一样,深度机器学习方法也有监督学习与无监督学习之分。

不同的学习框架下建立的学习模型有很大不同。

例如,卷积神经网络(ConvolutionalNeuralNetwork,CNN)是一种深度监督学习下的深度学习模型,而深度置信网(DeepBeliefNet,DBN)是一种无监督学习下的深度学习模型。15.3.1TensorFlow

在开始深度学习项目之前,选择一个合适的框架是非常重要的,一个合适的框架能起到事半功倍的作用。

当前最为流行的深度学习框架有TensorFlow、Keras、PyTorch、Caffe等,这些框架都已经开源,主要使用Python,也可以兼容R或其他语言。

深度学习框架在2018年度的综合得分排名见图15.3。

从图15.3中可以看出,TensorFlow排名第一。

在GitHub活跃度、谷歌搜索、Medium文章数、亚马逊书籍和arXiv论文这些数据源上,TensorFlow所占的比重都是最大的。TensorFlow还拥有最多的开发者用户,以及出现在最多的在线职位描述中。图15.3深度学习框架在2018年度的综合得分排名15.3.1TensorFlow1.简介TensorFlow是Google开源的第二代用于数字计算的软件库。TensorFlow可以理解为一个深度学习框架,有完整的数据流向和处理机制,封装了大量高效可用的算法及神经网络搭建方面的函数,可以在此基础上进行深度学习的开发与研究。TensorFlow的灵活架构可以在多种平台上展开计算,如台式计算机中的一个或多个CPU/GPU、服务器、移动设备等。

在GoogleBrain团队支持下,TensorFlow已经是全世界使用人数最多、社区最为庞大的一个深度学习框架,它具有Python和C++的接口,其教程非常完善,目前是深度学习框架的首选,且支持Keras。15.3.1TensorFlowTensorFlow是当今深度学习领域中最火的框架之一,具有如下特点。(1)高度的灵活性(2)良好的可移植性(3)多语言支持(4)丰富的算法库(5)完善的文档15.3.1TensorFlow2.开发环境搭建TensorFlow可从站点/project/tensorflow/#files下载。

本书案例对应安装文件:tensorflow-1.13.1-cp37-cp37m-win_amd64.whl。TensorFlow的下载和安装方法参见1.2.5节。3.工作原理TensorFlow中的计算可以表示为一个有向图(DirectedGraph)或称计算图(ComputationGraph)。

在TensorFlow中,将每个运算操作作为一个节点(Node),节点与节点之间的连接成为边(Edge),在计算图的边中流动(Flow)的数据称为张量(Tensor)。

计算图中的每个节点可以有任意多个输入和任意多个输出,每个节点描述了一种运算操作(Operation),节点可以看作运算操作的实例化(Instance)。

用户可以使用Python、C++、Java等语言设计计算图。

TensorFlow计算图必须在会话(Session)里被启动。15.3.1TensorFlow4.基本使用【例15.2】两个矩阵乘法运算。程序代码:importtensorflowastf #导入TensorFlow.a=tf.constant([[1,2]]) #定义一个1行2列的矩阵a.b=tf.constant([[2],[4]]) #定义一个2行1列的矩阵b.c=tf.matmul(a,b) #矩阵乘法运算.sess=tf.Session() #创建会话.result=sess.run(c) #启动会话.print("result=",result) #输出结果.sess.close() #关闭会话.运行结果:result=[[10]]15.3.1TensorFlow【例15.3】两个变量加法运算。程序代码:importtensorflowastf#定义变量.a=tf.Variable(3)b=tf.Variable(4)c=tf.add(a,b)#变量初始化.init_op=tf.global_variables_initializer()#创建交互式会话.sess=tf.InteractiveSession()sess.run(init_op)15.3.1TensorFlow#运行并输出变量.print('c=',sess.run(c))print('c=',sess.run(c)) #输出结果.sess.close()

#关闭会话.运行结果:c=715.3.1TensorFlow【例15.4】占位符使用示例。程序代码:importtensorflowastf#占位符.a=tf.placeholder(32)b=tf.placeholder(32)#构建计算图.c=a*10+b#创建会话.sess=tf.InteractiveSession()#方式一:通过eval()方法给a、b传值.print("c=",c.eval({a:1,b:2})) #0维张量.print("c=",c.eval({a:[1],b:[2]})) #1维张量.print("c=",c.eval({a:[[1,2],[3,4]],b:[[1,2],[3,4]]})) #2维张量.15.3.1TensorFlow#方式二:通过feed_dict()给a,b传值.print("c=",sess.run(c,feed_dict={a:1,b:2}))#0维张量.print("c=",sess.run(c,feed_dict={a:[1],b:[2]})) #1维张量.print("c=",sess.run(c,feed_dict={a:[[1,2],[3,4]],b:[[1,2],[3,4]]}))#2维张量.sess.close()#关闭会话.运行结果:c=12c=[12]c=[[1122][3344]]c=12c=[12]c=[[1122][3344]]15.3.2典型案例——识别模糊的手写数字图片MNIST是在机器学习领域中的一个经典问题,是把28像素×28像素的手写数字图像识别为相应的数字,数字的范围从0到9(见图15.4)。MNIST数据集可从站点/exdb/mnist/下载,也可以使用TensorFlow库中的模块自动下载和安装。MNIST数据集和解压、重构后的数据集见表15.3和表15.4(教材P300)15.3.2典型案例——识别模糊的手写数字图片【例15.5】使用TensorFlow对MNIST数据集中的手写数字图像进行训练、测试并识别。分析:本案例实现步骤如下。(1)导入MNIST数据集。(2)构建模型。(3)训练模型。(4)测试模型。(5)保存模型。(6)读取模型。(7)验证模型。15.3.2典型案例——识别模糊的手写数字图片程序代码:importtensorflowastfimportmatplotlib.pyplotaspltimporttime#1.下载并安装MNIST数据集.importtensorflow.examples.tutorials.mnist.input_dataasinputdatamnist=inputdata.read_data_sets("MNIST_data/",one_hot=True)15.3.2典型案例——识别模糊的手写数字图片#2.构建模型x=tf.placeholder(tf.float32,[None,784]) #图像数据.y_real=tf.placeholder("float",[None,10]) #标签真实值.#学习参数:参数矩阵W,偏置b.W=tf.Variable(tf.zeros([784,10]))b=tf.Variable(tf.zeros([10]))y_predict=tf.nn.softmax(tf.matmul(x,W)+b) #标签预测值.#反向传播结构.train_cost=-tf.reduce_sum(y_real*tf.log(y_predict)) #损失函数.#优化器.optimizer=tf.train.GradientDescentOptimizer(0.01).minimize(train_cost)#设置模型保存路径.saver=tf.train.Saver()model_path="model/mnist_model.ckpt"train_epochs=2000 batch_size=100 15.3.2典型案例——识别模糊的手写数字图片#创建字典,保存训练过程中参数信息.train_info={"epoch":[],"train_cost":[],"train_accuracy":[]}#启动会话.withtf.Session()assess:sess.run(tf.global_variables_initializer()) #初始化所有变量.#3.训练模型.start_time=time.time()print("1.训练模型")forepochinrange(1,train_epochs+1):batch_xs,batch_ys=mnist.train.next_batch(batch_size) #训练数据.opt,cost=sess.run([optimizer,train_cost],feed_dict={x:batch_xs,y_real:batch_ys})#计算识别准确率.train_cor_pred=tf.equal(tf.argmax(y_predict,1),tf.argmax(y_real,1))train_accuracy=tf.reduce_mean(tf.cast(train_cor_pred,tf.float32))train_acc=train_accuracy.eval({x:batch_xs,y_real:batch_ys})15.3.2典型案例——识别模糊的手写数字图片

#保存训练信息.train_info["epoch"].append(epoch)

train_info["train_cost"].append(cost)train_info["train_accuracy"].append(train_acc)end_time=time.time()print("模型训练时间:%.8f秒."%(end_time-start_time)) #模型训练时间.#图形显示训练过程中损失和识别准确率变化情况.print("训练过程中损失(图15.5左)和识别准确率变化情况(图15.5右):")plt.figure()plt.plot(train_info["epoch"],train_info["train_cost"],"r")plt.xlabel('x轴-轮数',fontproperties='SimHei',fontsize=18)plt.ylabel('y轴-损失',fontproperties='SimHei',fontsize=18)15.3.2典型案例——识别模糊的手写数字图片

plt.xticks(fontsize=16)plt.yticks(fontsize=16)plt.legend(['train_cost','line'],fontsize=16)plt.figure()plt.plot(train_info["epoch"],train_info["train_accuracy"],"b")plt.xlabel('x轴-轮数',fontproperties='SimHei',fontsize=18)plt.ylabel('y轴-识别准确率',fontproperties='SimHei',fontsize=18)plt.xticks(fontsize=16)plt.yticks(fontsize=16)plt.legend(['train_accuracy','line'],fontsize=16)plt.show()15.3.2典型案例——识别模糊的手写数字图片#4.测试模型.print("2.测试模型")test_cor_pred=tf.equal(tf.argmax(y_predict,1),tf.argmax(y_real,1))#计算识别准确率.test_accuracy=tf.reduce_mean(tf.cast(test_c

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论