第15章-Python與人工智能_第1頁
第15章-Python與人工智能_第2頁
第15章-Python與人工智能_第3頁
第15章-Python與人工智能_第4頁
第15章-Python與人工智能_第5頁
已閱讀5頁,還剩49頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第15章Python與人工智能王雷春湖北大學(xué)內(nèi)容15.1概述15.2機(jī)器學(xué)習(xí)15.3深度學(xué)習(xí)15.1概述15.1.1人工智能簡(jiǎn)介15.1.2Python與人工智能15.1.1人工智能簡(jiǎn)介1.什么是人工智能1939年,27歲的數(shù)學(xué)天才阿蘭·圖靈思考“如何用一臺(tái)機(jī)器打敗另一臺(tái)機(jī)器”。1956年,一批年輕的科學(xué)家討論人工智能(ArtificialIntelligence,AI)。1997年,IBM“深藍(lán)”計(jì)算機(jī)擊敗了國(guó)際象棋冠軍卡斯帕羅夫。2016年和2017年,谷歌研發(fā)的“AlphaGo”戰(zhàn)勝了世界圍棋頂級(jí)棋手李世石九段和柯潔九段。

人工智能不再停留在口頭上和實(shí)驗(yàn)室中,而是離人類越來越近,已經(jīng)進(jìn)入人類的工作和生活中,與人類深度融合。

人工智能是21世紀(jì)三大尖端技術(shù)(基因工程、納米科學(xué)、人工智能)之一。15.1.1人工智能簡(jiǎn)介人工智能的定義:人工智能是研究、開發(fā)用于模擬、延伸和擴(kuò)展人類智能的理論、方法、技術(shù)及應(yīng)用系統(tǒng)的一門新科學(xué)技術(shù)。人工智能企圖了解智能的實(shí)質(zhì),并生產(chǎn)出一種新的能以與人類智能相似的方式做出反應(yīng)的智能機(jī)器。

人工智能領(lǐng)域的研究包括機(jī)器人、語言識(shí)別、圖像識(shí)別、自然語言處理和專家系統(tǒng)等。

人工智能自誕生以來,其理論和技術(shù)日益成熟,其應(yīng)用領(lǐng)域不斷擴(kuò)大。

人工智能帶來的科技產(chǎn)品將是人類智慧的“容器”。

部分國(guó)家對(duì)人工智能進(jìn)行了戰(zhàn)略布局見表15.1(教材P290)。15.1.1人工智能簡(jiǎn)介(1)一些世界頂尖公司在人工智能的研究和應(yīng)用方面投入了巨大的人力、物力:

谷歌擁有2個(gè)世界頂尖工智能實(shí)驗(yàn)室,即GoogleX實(shí)驗(yàn)室(深度學(xué)習(xí)框架TensorFlow在這里誕生)和DeepMind實(shí)驗(yàn)室(AlphaGo是其代表作品)

微軟公司在2014年成立了艾倫人工智能研究院,致力于研究人工智能Facebook發(fā)展了兩個(gè)人工智能實(shí)驗(yàn)室(FAIR和AML)

百度在2013年1月、2017年3月分別成立深度學(xué)習(xí)研究院和深度學(xué)習(xí)技術(shù)及應(yīng)用國(guó)家工程實(shí)驗(yàn)室

阿里巴巴人工智能實(shí)驗(yàn)室于2017年7月5日首次公開亮相

騰訊在2018年3月成立了機(jī)器人實(shí)驗(yàn)室。15.1.1人工智能簡(jiǎn)介(2)國(guó)內(nèi)外知名大學(xué)成立了研究機(jī)構(gòu)或?qū)W院進(jìn)行人工智能研究和教學(xué):

麻省理工學(xué)院在1959年就成立了人工智能實(shí)驗(yàn)室,于2018年10月宣布啟用10億美元建設(shè)新的人工智能學(xué)院

斯坦福大學(xué)在1962年成立的人工智能實(shí)驗(yàn)室致力于推動(dòng)機(jī)器人教育

加州大學(xué)伯克利分校的機(jī)器人和智能機(jī)器實(shí)驗(yàn)室致力于用機(jī)器人模擬動(dòng)物的行為

清華大學(xué)在1987年成立了智能技術(shù)與系統(tǒng)國(guó)家重點(diǎn)實(shí)驗(yàn)室

中國(guó)科學(xué)院大學(xué)在2017年5月宣布成立人工智能技術(shù)學(xué)院

中國(guó)科學(xué)技術(shù)大學(xué)建立了兩個(gè)人工智能方向的國(guó)家工程實(shí)驗(yàn)室。15.1.1人工智能簡(jiǎn)介(3)人工智能與科學(xué)技術(shù)及工業(yè)等相結(jié)合已經(jīng)產(chǎn)生了多方面的應(yīng)用:

人臉識(shí)別(如face++)

購(gòu)物推薦(如淘寶App)

語音識(shí)別(如訊飛輸入法)

圖像識(shí)別(如微信小程序)

新聞資訊推薦(如今日頭條)

無人駕駛AlphaGo圍棋

蘋果公司個(gè)人助理Siri(能夠幫助客戶發(fā)送短信等)

亞馬遜推出的Alexa(可以幫助用戶在網(wǎng)上搜尋信息)15.1.1人工智能簡(jiǎn)介

人工智能、機(jī)器學(xué)習(xí)(MachineLearning,ML)和深度學(xué)習(xí)(DeepLearning,DL)三者之間的關(guān)系見右圖)。

人工智能包含范圍最大,最早被提出;機(jī)器學(xué)習(xí)在20世紀(jì)80年代才逐漸被提出和研究;深度學(xué)習(xí)則在近幾年才被廣泛研究并迅速成為研究熱點(diǎn)。人工智能是研究用計(jì)算機(jī)模擬人的某些思維過程和智能行為(如學(xué)習(xí)、推理、思考、規(guī)劃等)的學(xué)科。

人工智能涉及計(jì)算機(jī)科學(xué)、心理學(xué)、哲學(xué)、語言學(xué)等幾乎所有自然科學(xué)和社會(huì)科學(xué),其范圍已遠(yuǎn)遠(yuǎn)超出了計(jì)算機(jī)科學(xué)的范疇。15.1.2Python與人工智能2.Python與人工智能人工智能的程序開發(fā)語言目前主要有Prolog、LISP、C/C++、Java和Python。Python擁有在人工智能學(xué)習(xí)和處理過程中所需要的各種庫(kù)。(1)數(shù)據(jù)獲取庫(kù),如數(shù)據(jù)獲取庫(kù)Requests、Scrapy和數(shù)據(jù)解析庫(kù)BeautifulSoup等。(2)數(shù)據(jù)分析、處理庫(kù),如NumPy(數(shù)組和矩陣運(yùn)算等)庫(kù)、Pandas(數(shù)據(jù)分析)庫(kù)、SciPy(工程和科學(xué)計(jì)算)庫(kù)和MatPlotlib(數(shù)據(jù)可視化)庫(kù)等。(3)人工智能庫(kù),如自然語言處理庫(kù)NLTK、機(jī)器學(xué)習(xí)庫(kù)Sklearn和深度學(xué)習(xí)庫(kù)TensorFlow、Keras、PyTorch等。

另外,Python的開源、與平臺(tái)無關(guān)、包裝能力、可組合性、可嵌入性都非常有利于人工智能的學(xué)習(xí)和研究。15.2機(jī)器學(xué)習(xí)15.2.1Sklearn15.2.2典型案例——使用線性回歸模型訓(xùn)練、測(cè)試和預(yù)測(cè)數(shù)據(jù)15.2機(jī)器學(xué)習(xí)

機(jī)器學(xué)習(xí)是一門研究機(jī)器獲取新知識(shí)和新技能,并識(shí)別現(xiàn)有知識(shí)的科學(xué)。

機(jī)器學(xué)習(xí)領(lǐng)域的主要研究對(duì)象是人工智能,特別是如何在經(jīng)驗(yàn)學(xué)習(xí)中改善具體算法的性能。

通過機(jī)器學(xué)習(xí),可以發(fā)現(xiàn)喜歡的新音樂;快速找出想網(wǎng)購(gòu)的鞋子;通過命令控制手機(jī);讓恒溫器自動(dòng)調(diào)節(jié)溫度;比人類更準(zhǔn)確地識(shí)別出潦草的手寫郵箱地址;更安全地防止信用卡詐騙;從網(wǎng)頁尋找頭條新聞等。機(jī)器學(xué)習(xí)算法和軟件逐漸成為許多產(chǎn)業(yè)的核心工具。

那么,機(jī)器學(xué)習(xí)是如何進(jìn)行學(xué)習(xí)的呢?普遍認(rèn)為,機(jī)器學(xué)習(xí)的基礎(chǔ)是歸納(Generalize),就是從已知案例數(shù)據(jù)中找出未知的規(guī)律。

機(jī)器學(xué)習(xí)的過程與推理過程是緊密相連的,學(xué)習(xí)中所用的推理越多,系統(tǒng)的能力就越強(qiáng)。15.2機(jī)器學(xué)習(xí)機(jī)器學(xué)習(xí)通常按學(xué)習(xí)和模型類型分類。(1)按學(xué)習(xí)方式分類:

監(jiān)督學(xué)習(xí)(SupervisedLearning)

無監(jiān)督學(xué)習(xí)(UnsupervisedLearning)

半監(jiān)督學(xué)習(xí)(Semi-supervisedLearning)

強(qiáng)化學(xué)習(xí)(ReinforcementLearning)(2)按模型類型分類:回歸、基于距離方法、正則化方法、樹方法、貝葉斯方法、聚類、神經(jīng)網(wǎng)絡(luò)、深度學(xué)習(xí)、降維、集成學(xué)習(xí)、文本挖掘等。15.2機(jī)器學(xué)習(xí)

典型的機(jī)器學(xué)習(xí)算法:決策樹、隨機(jī)森林算法、邏輯回歸、支持向量機(jī)(SVM)、樸素貝葉斯、K-最近鄰算法、K-均值算法、Adaboost算法、神經(jīng)網(wǎng)絡(luò)算法和馬爾可夫算法等。

機(jī)器學(xué)習(xí)已經(jīng)有了十分廣泛的應(yīng)用,如數(shù)據(jù)挖掘、計(jì)算機(jī)視覺、自然語言處理、生物特征識(shí)別、搜索引擎、醫(yī)學(xué)診斷、檢測(cè)信用卡欺詐、證券市場(chǎng)分析、DNA序列測(cè)序、語音和手寫識(shí)別、戰(zhàn)略游戲和機(jī)器人運(yùn)用等。15.2.1Sklearn1.簡(jiǎn)介Sklearn是Scikit-learn的簡(jiǎn)稱,用Python實(shí)現(xiàn),它是基于NumPy、SciPy、Matplotlib等的機(jī)器學(xué)習(xí)算法庫(kù)。Sklearn的內(nèi)容豐富,功能強(qiáng)大,包含大量用于機(jī)器學(xué)習(xí)的算法、模塊和數(shù)據(jù)集。(1)實(shí)現(xiàn)數(shù)據(jù)預(yù)處理、分類、回歸、降維、模型選擇等常用的機(jī)器學(xué)習(xí)算法。(2)特征提取(ExtractingFeatures)、數(shù)據(jù)處理(ProcessingData)和模型評(píng)估(EvaluatingModels)等模塊。(3)內(nèi)置了大量用于訓(xùn)練、測(cè)試和評(píng)估模型的數(shù)據(jù)集。15.2.1SklearnSklearn可以不受任何限制,遵從自由的BSD(伯克利軟件發(fā)行版,一種開源協(xié)議)授權(quán)。

許多Sklearn算法都可以快速執(zhí)行且可擴(kuò)展,海量數(shù)據(jù)集除外。Sklearn的穩(wěn)定性很好,大部分代碼都可以通過Python的自動(dòng)化測(cè)試。Sklearn可從站點(diǎn)/project/scikit-learn/#files下載。

本書案例對(duì)應(yīng)下載安裝文件scikit_learn-0.20.3-cp37-cp37m-win_amd64.whl。Sklearn下載和安裝方法參見1.2.5節(jié)。15.2.1Sklearn2.使用Sklearn進(jìn)行機(jī)器學(xué)習(xí)的主要步驟1)獲取數(shù)據(jù)

獲取數(shù)據(jù)通常三種方法:使用Sklearn現(xiàn)有數(shù)據(jù)集、創(chuàng)建新的數(shù)據(jù)集和獲取真實(shí)數(shù)據(jù)集。(1)使用Sklearn現(xiàn)有數(shù)據(jù)集。比較有代表性的數(shù)據(jù)集如下。①鳶尾花數(shù)據(jù)集:通過方法load_iris()調(diào)用,常用于分類算法。②波士頓房?jī)r(jià)數(shù)據(jù)集:通過方法load_boston()調(diào)用,常用于回歸算法。③手寫數(shù)字?jǐn)?shù)據(jù)集:通過方法load_digits()調(diào)用,常用于回歸算法。④糖尿病數(shù)據(jù)集:通過方法load_diabetes()調(diào)用,常用于回歸算法。15.2.1Sklearn(2)創(chuàng)建新的數(shù)據(jù)集。Sklearn中的樣本生成器(samples_generator)包含大量創(chuàng)建樣本數(shù)據(jù)的方法,其中比較常見的方法如下。①make_blobs():產(chǎn)生多類單標(biāo)簽數(shù)據(jù)集。②make_classification():產(chǎn)生多類單標(biāo)簽數(shù)據(jù)集。③make_regression():產(chǎn)生回歸任務(wù)的數(shù)據(jù)集。④make_multilabel_classification():產(chǎn)生多類多標(biāo)簽隨機(jī)樣本集。⑤make_gaussian_quantiles():產(chǎn)生分組多維正態(tài)分布的數(shù)據(jù)集。(3)獲取真實(shí)數(shù)據(jù)集。一些國(guó)內(nèi)外機(jī)構(gòu)提供了免費(fèi)的真實(shí)數(shù)據(jù)集,這些真實(shí)數(shù)據(jù)集可以直接用于模型的學(xué)習(xí)、測(cè)試和評(píng)估等。15.2.1Sklearn2)數(shù)據(jù)預(yù)處理

數(shù)據(jù)預(yù)處理階段是機(jī)器學(xué)習(xí)中不可缺少的一環(huán),它可以使數(shù)據(jù)更加有效地被模型或者評(píng)估器識(shí)別。(1)數(shù)據(jù)歸一化。(2)正則化。(3)one-hot編碼。3)數(shù)據(jù)集拆分

在訓(xùn)練數(shù)據(jù)集時(shí),通常會(huì)把訓(xùn)練數(shù)據(jù)集進(jìn)一步拆分成訓(xùn)練集和測(cè)試集。

訓(xùn)練集用于建立模型,測(cè)試集用于對(duì)模型進(jìn)行驗(yàn)證。15.2.1Sklearn4)定義模型Sklearn為所有模型提供了非常相似的接口,這樣可以更加快速地熟悉所有模型的用法。Sklearn中常用的模型見表15.2(教材P294)。5)模型評(píng)估評(píng)估模型的基本思路如下。(1)準(zhǔn)備測(cè)試樣本。測(cè)試樣本的特征應(yīng)與訓(xùn)練樣本的特征一致。(2)使用模型對(duì)測(cè)試樣本進(jìn)行計(jì)算。將計(jì)算結(jié)果與樣本中的真實(shí)值進(jìn)行比較,評(píng)估其準(zhǔn)確率。15.2.1Sklearn6)保存模型

訓(xùn)練好模型后,可以將訓(xùn)練好的模型保存到本地或者放到網(wǎng)上。

模型可以保存為Pickle文件,或使用Sklearn自帶方法joblib()對(duì)模型進(jìn)行保存。7)應(yīng)用模型模型保存后,可以在實(shí)際中進(jìn)行使用,如對(duì)數(shù)據(jù)分類或預(yù)測(cè)等。15.2.2典型案例【例15.1】使用Sklearn中的線性回歸模型訓(xùn)練、測(cè)試和預(yù)測(cè)數(shù)據(jù)。分析:本案例實(shí)現(xiàn)方法如下。(1)通過Sklearn中的datasets.make_regression()方法生成指定數(shù)量的回歸數(shù)據(jù)集。(2)將生成的數(shù)據(jù)集拆分為訓(xùn)練數(shù)據(jù)和測(cè)試數(shù)據(jù)。(3)使用訓(xùn)練數(shù)據(jù)訓(xùn)練、保存模型。(4)使用測(cè)試數(shù)據(jù)評(píng)估模型。(5)將生成的模型保存在指定位置。(6)從指定位置讀出模型并預(yù)測(cè)數(shù)據(jù)。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)#生成數(shù)據(jù)點(diǎn)以散點(diǎn)圖顯示.print("1.生成數(shù)據(jù)的散點(diǎn)圖(圖15.2左),訓(xùn)練數(shù)據(jù)和預(yù)測(cè)數(shù)據(jù)擬合線(圖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.拆分?jǐn)?shù)據(jù)集,70%數(shù)據(jù)用于訓(xùn)練,30%數(shù)據(jù)用于測(cè)試.train_x,test_x,train_y,test_y=train_test_split(x,y,test_size=0.3,random_state=0)#3.訓(xùn)練模型.LinearModel=LinearRegression()LinearModel.fit(train_x,train_y)fitted_y=LinearModel.predict(train_x)#圖形顯示訓(xùn)練數(shù)據(jù)和預(yù)測(cè)數(shù)據(jù).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.模型評(píng)估值:%.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的預(yù)測(cè)結(jié)果為:%f."%(testx[0][0],LinearModelUse.predict([[1.6]])))15.2.2典型案例運(yùn)行結(jié)果:1.生成數(shù)據(jù)的散點(diǎn)圖(圖15.2左),訓(xùn)練數(shù)據(jù)和預(yù)測(cè)數(shù)據(jù)擬合線(圖15.2右).2.模型評(píng)估值:0.991244.3.1.600000的預(yù)測(cè)結(jié)果為:112.579482.15.2.2典型案例15.3深度學(xué)習(xí)15.3.1TensorFlow15.3.2典型案例——識(shí)別模糊的手寫數(shù)字圖片15.3.1TensorFlow深度學(xué)習(xí)的概念源于人工神經(jīng)網(wǎng)絡(luò)的研究,由Hinton等人于2006年提出,通過組合低層特征形成更加抽象的高層表示屬性類別或特征,以發(fā)現(xiàn)數(shù)據(jù)的分布式特征表示。

深度學(xué)習(xí)是機(jī)器學(xué)習(xí)研究中一個(gè)新的領(lǐng)域,其動(dòng)機(jī)在于建立、模擬人腦進(jìn)行分析學(xué)習(xí)的神經(jīng)網(wǎng)絡(luò),模仿人腦的機(jī)制來解釋數(shù)據(jù),如圖像、聲音和文本等。

同機(jī)器學(xué)習(xí)方法一樣,深度機(jī)器學(xué)習(xí)方法也有監(jiān)督學(xué)習(xí)與無監(jiān)督學(xué)習(xí)之分。

不同的學(xué)習(xí)框架下建立的學(xué)習(xí)模型有很大不同。

例如,卷積神經(jīng)網(wǎng)絡(luò)(ConvolutionalNeuralNetwork,CNN)是一種深度監(jiān)督學(xué)習(xí)下的深度學(xué)習(xí)模型,而深度置信網(wǎng)(DeepBeliefNet,DBN)是一種無監(jiān)督學(xué)習(xí)下的深度學(xué)習(xí)模型。15.3.1TensorFlow

在開始深度學(xué)習(xí)項(xiàng)目之前,選擇一個(gè)合適的框架是非常重要的,一個(gè)合適的框架能起到事半功倍的作用。

當(dāng)前最為流行的深度學(xué)習(xí)框架有TensorFlow、Keras、PyTorch、Caffe等,這些框架都已經(jīng)開源,主要使用Python,也可以兼容R或其他語言。

深度學(xué)習(xí)框架在2018年度的綜合得分排名見圖15.3。

從圖15.3中可以看出,TensorFlow排名第一。

在GitHub活躍度、谷歌搜索、Medium文章數(shù)、亞馬遜書籍和arXiv論文這些數(shù)據(jù)源上,TensorFlow所占的比重都是最大的。TensorFlow還擁有最多的開發(fā)者用戶,以及出現(xiàn)在最多的在線職位描述中。圖15.3深度學(xué)習(xí)框架在2018年度的綜合得分排名15.3.1TensorFlow1.簡(jiǎn)介TensorFlow是Google開源的第二代用于數(shù)字計(jì)算的軟件庫(kù)。TensorFlow可以理解為一個(gè)深度學(xué)習(xí)框架,有完整的數(shù)據(jù)流向和處理機(jī)制,封裝了大量高效可用的算法及神經(jīng)網(wǎng)絡(luò)搭建方面的函數(shù),可以在此基礎(chǔ)上進(jìn)行深度學(xué)習(xí)的開發(fā)與研究。TensorFlow的靈活架構(gòu)可以在多種平臺(tái)上展開計(jì)算,如臺(tái)式計(jì)算機(jī)中的一個(gè)或多個(gè)CPU/GPU、服務(wù)器、移動(dòng)設(shè)備等。

在GoogleBrain團(tuán)隊(duì)支持下,TensorFlow已經(jīng)是全世界使用人數(shù)最多、社區(qū)最為龐大的一個(gè)深度學(xué)習(xí)框架,它具有Python和C++的接口,其教程非常完善,目前是深度學(xué)習(xí)框架的首選,且支持Keras。15.3.1TensorFlowTensorFlow是當(dāng)今深度學(xué)習(xí)領(lǐng)域中最火的框架之一,具有如下特點(diǎn)。(1)高度的靈活性(2)良好的可移植性(3)多語言支持(4)豐富的算法庫(kù)(5)完善的文檔15.3.1TensorFlow2.開發(fā)環(huán)境搭建TensorFlow可從站點(diǎn)/project/tensorflow/#files下載。

本書案例對(duì)應(yīng)安裝文件:tensorflow-1.13.1-cp37-cp37m-win_amd64.whl。TensorFlow的下載和安裝方法參見1.2.5節(jié)。3.工作原理TensorFlow中的計(jì)算可以表示為一個(gè)有向圖(DirectedGraph)或稱計(jì)算圖(ComputationGraph)。

在TensorFlow中,將每個(gè)運(yùn)算操作作為一個(gè)節(jié)點(diǎn)(Node),節(jié)點(diǎn)與節(jié)點(diǎn)之間的連接成為邊(Edge),在計(jì)算圖的邊中流動(dòng)(Flow)的數(shù)據(jù)稱為張量(Tensor)。

計(jì)算圖中的每個(gè)節(jié)點(diǎn)可以有任意多個(gè)輸入和任意多個(gè)輸出,每個(gè)節(jié)點(diǎn)描述了一種運(yùn)算操作(Operation),節(jié)點(diǎn)可以看作運(yùn)算操作的實(shí)例化(Instance)。

用戶可以使用Python、C++、Java等語言設(shè)計(jì)計(jì)算圖。

TensorFlow計(jì)算圖必須在會(huì)話(Session)里被啟動(dòng)。15.3.1TensorFlow4.基本使用【例15.2】?jī)蓚€(gè)矩陣乘法運(yùn)算。程序代碼:importtensorflowastf #導(dǎo)入TensorFlow.a=tf.constant([[1,2]]) #定義一個(gè)1行2列的矩陣a.b=tf.constant([[2],[4]]) #定義一個(gè)2行1列的矩陣b.c=tf.matmul(a,b) #矩陣乘法運(yùn)算.sess=tf.Session() #創(chuàng)建會(huì)話.result=sess.run(c) #啟動(dòng)會(huì)話.print("result=",result) #輸出結(jié)果.sess.close() #關(guān)閉會(huì)話.運(yùn)行結(jié)果:result=[[10]]15.3.1TensorFlow【例15.3】?jī)蓚€(gè)變量加法運(yùn)算。程序代碼:importtensorflowastf#定義變量.a=tf.Variable(3)b=tf.Variable(4)c=tf.add(a,b)#變量初始化.init_op=tf.global_variables_initializer()#創(chuàng)建交互式會(huì)話.sess=tf.InteractiveSession()sess.run(init_op)15.3.1TensorFlow#運(yùn)行并輸出變量.print('c=',sess.run(c))print('c=',sess.run(c)) #輸出結(jié)果.sess.close()

#關(guān)閉會(huì)話.運(yùn)行結(jié)果:c=715.3.1TensorFlow【例15.4】占位符使用示例。程序代碼:importtensorflowastf#占位符.a=tf.placeholder(32)b=tf.placeholder(32)#構(gòu)建計(jì)算圖.c=a*10+b#創(chuàng)建會(huì)話.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()#關(guān)閉會(huì)話.運(yùn)行結(jié)果:c=12c=[12]c=[[1122][3344]]c=12c=[12]c=[[1122][3344]]15.3.2典型案例——識(shí)別模糊的手寫數(shù)字圖片MNIST是在機(jī)器學(xué)習(xí)領(lǐng)域中的一個(gè)經(jīng)典問題,是把28像素×28像素的手寫數(shù)字圖像識(shí)別為相應(yīng)的數(shù)字,數(shù)字的范圍從0到9(見圖15.4)。MNIST數(shù)據(jù)集可從站點(diǎn)/exdb/mnist/下載,也可以使用TensorFlow庫(kù)中的模塊自動(dòng)下載和安裝。MNIST數(shù)據(jù)集和解壓、重構(gòu)后的數(shù)據(jù)集見表15.3和表15.4(教材P300)15.3.2典型案例——識(shí)別模糊的手寫數(shù)字圖片【例15.5】使用TensorFlow對(duì)MNIST數(shù)據(jù)集中的手寫數(shù)字圖像進(jìn)行訓(xùn)練、測(cè)試并識(shí)別。分析:本案例實(shí)現(xiàn)步驟如下。(1)導(dǎo)入MNIST數(shù)據(jù)集。(2)構(gòu)建模型。(3)訓(xùn)練模型。(4)測(cè)試模型。(5)保存模型。(6)讀取模型。(7)驗(yàn)證模型。15.3.2典型案例——識(shí)別模糊的手寫數(shù)字圖片程序代碼:importtensorflowastfimportmatplotlib.pyplotaspltimporttime#1.下載并安裝MNIST數(shù)據(jù)集.importtensorflow.examples.tutorials.mnist.input_dataasinputdatamnist=inputdata.read_data_sets("MNIST_data/",one_hot=True)15.3.2典型案例——識(shí)別模糊的手寫數(shù)字圖片#2.構(gòu)建模型x=tf.placeholder(tf.float32,[None,784]) #圖像數(shù)據(jù).y_real=tf.placeholder("float",[None,10]) #標(biāo)簽真實(shí)值.#學(xué)習(xí)參數(shù):參數(shù)矩陣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) #標(biāo)簽預(yù)測(cè)值.#反向傳播結(jié)構(gòu).train_cost=-tf.reduce_sum(y_real*tf.log(y_predict)) #損失函數(shù).#優(yōu)化器.optimizer=tf.train.GradientDescentOptimizer(0.01).minimize(train_cost)#設(shè)置模型保存路徑.saver=tf.train.Saver()model_path="model/mnist_model.ckpt"train_epochs=2000 batch_size=100 15.3.2典型案例——識(shí)別模糊的手寫數(shù)字圖片#創(chuàng)建字典,保存訓(xùn)練過程中參數(shù)信息.train_info={"epoch":[],"train_cost":[],"train_accuracy":[]}#啟動(dòng)會(huì)話.withtf.Session()assess:sess.run(tf.global_variables_initializer()) #初始化所有變量.#3.訓(xùn)練模型.start_time=time.time()print("1.訓(xùn)練模型")forepochinrange(1,train_epochs+1):batch_xs,batch_ys=mnist.train.next_batch(batch_size) #訓(xùn)練數(shù)據(jù).opt,cost=sess.run([optimizer,train_cost],feed_dict={x:batch_xs,y_real:batch_ys})#計(jì)算識(shí)別準(zhǔn)確率.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典型案例——識(shí)別模糊的手寫數(shù)字圖片

#保存訓(xùn)練信息.train_info["epoch"].append(epoch)

train_info["train_cost"].append(cost)train_info["train_accuracy"].append(train_acc)end_time=time.time()print("模型訓(xùn)練時(shí)間:%.8f秒."%(end_time-start_time)) #模型訓(xùn)練時(shí)間.#圖形顯示訓(xùn)練過程中損失和識(shí)別準(zhǔn)確率變化情況.print("訓(xùn)練過程中損失(圖15.5左)和識(shí)別準(zhǔn)確率變化情況(圖15.5右):")plt.figure()plt.plot(train_info["epoch"],train_info["train_cost"],"r")plt.xlabel('x軸-輪數(shù)',fontproperties='SimHei',fontsize=18)plt.ylabel('y軸-損失',fontproperties='SimHei',fontsize=18)15.3.2典型案例——識(shí)別模糊的手寫數(shù)字圖片

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軸-輪數(shù)',fontproperties='SimHei',fontsize=18)plt.ylabel('y軸-識(shí)別準(zhǔn)確率',fontproperties='SimHei',fontsize=18)plt.xticks(fontsize=16)plt.yticks(fontsize=16)plt.legend(['train_accuracy','line'],fontsize=16)plt.show()15.3.2典型案例——識(shí)別模糊的手寫數(shù)字圖片#4.測(cè)試模型.print("2.測(cè)試模型")test_cor_pred=tf.equal(tf.argmax(y_predict,1),tf.argmax(y_real,1))#計(jì)算識(shí)別準(zhǔn)確率.test_accuracy=tf.reduce_mean(tf.cast(test_c

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論