講義課件教案_第1頁(yè)
講義課件教案_第2頁(yè)
講義課件教案_第3頁(yè)
已閱讀5頁(yè),還剩4頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第02Python無(wú)論是在機(jī)器學(xué)習(xí)還是深度學(xué)習(xí)中,Python已經(jīng)成為主導(dǎo)性的編程語(yǔ)言。而且,現(xiàn)在許多主流的深度學(xué)習(xí)框架,例如PyTorch、TensorFlow也都是基于Python。這門(mén)課主要是圍繞“理論+實(shí)戰(zhàn)”同時(shí)進(jìn)行的,所以本文,我將重點(diǎn)介紹深度學(xué)習(xí)中Python的必備知識(shí)點(diǎn)。Python是一種面向?qū)ο蟮慕忉屝陀?jì)算機(jī)程序設(shè)計(jì)語(yǔ)言,由荷蘭人GuidovanRossum于1989年發(fā)明,第一個(gè)公開(kāi)版于1991年。Python具有豐富和強(qiáng)大的庫(kù)。它常被昵稱為膠水語(yǔ)言,能夠把用其他語(yǔ)言制作的各種模塊(尤其 為什么人工智能、深度學(xué)習(xí)會(huì)選擇Python呢?一方面是因?yàn)镻ython作為一門(mén)解釋型語(yǔ)言,入門(mén)簡(jiǎn)單、容易上手。另一方面是因?yàn)镻ython的開(kāi)發(fā)效率高,Python有很多庫(kù)很方便做人工智能,比如Numpy、Scipy做數(shù)值計(jì)算的,Sklearn做機(jī)器學(xué)習(xí)的,Matplotlib將數(shù)據(jù)可視化的,等等??偟膩?lái)說(shuō),Python既容易上手,又是功能強(qiáng)大的編程語(yǔ)言。按照《Python學(xué)習(xí)手冊(cè)》作者的說(shuō)法,Python可以從支持航空航天器系統(tǒng)的開(kāi)發(fā)到小游戲開(kāi)發(fā)的幾乎所有的其實(shí),人工智能的算法的底層還是由C/C++編寫(xiě)的,因?yàn)槭怯?jì)算密集型,需要非常精的優(yōu)化,還需要GPU、硬件之類的接口,這些都只有C/C++能做到。Python實(shí)際上是實(shí)現(xiàn)API調(diào)用的功能,例如所有的深度學(xué)習(xí)框架PyTorch、TensorFlow等,底層都是由C/C++編寫(xiě)的。由于Python是頂層高級(jí)語(yǔ)言,它的缺點(diǎn)就是運(yùn)行速度慢,但是這絲毫不影響Python的普及。如今,在GPU加速的前提下,Python的運(yùn)行速度已經(jīng)很快了。在眾多因素影響下,Python成為了人工智能的最主要的編程語(yǔ)言。下面這來(lái)自TIOBE編程社區(qū)Top10編程語(yǔ)言TIOBE指數(shù)走勢(shì)(2002-如今,Python已經(jīng)僅次于Java、C、C++之后,第四,且呈逐年上升的趨勢(shì)。而在人工智能領(lǐng)域,Python是當(dāng)之無(wú)愧的第一。Python目前有兩個(gè)版本:2和3。人工智能領(lǐng)域主要使用Python3,建議安裝Python3版python--FunctionPython中的函數(shù)以關(guān)鍵字def來(lái)定義,例如:defifx>return'positive'elifx<0:returnreturnforxin[-1,0,1]:#Prints"negative","zero",上面呢,就是定義一個(gè)sign函數(shù),根據(jù)輸入x與0的大小關(guān)系,返回positive、或zerodefgreet(name,ifO,%s!'%o,%s'%greet('Will')#Printsgreet('Tony',o,#PrintsO,Pythonclass#definit(self,=#Createaninstance#Instancedefgreet(self,ifO,%s!'%o,%s'%g=Greeter('Will')#ConstructaninstanceoftheGreeter#Callaninstancemethod;prints#Callaninstancemethod;printso,O,initselfselfnamePython中類的繼承也非常簡(jiǎn)單,最基本的繼承方式就是定義類的時(shí)候把父類往括號(hào)里一放就class"""ClassKnowinheritencedfromGreeter"""defmeet(self):print('Nicetomeetk=Know('Will')#ConstructaninstanceoftheGreater#Callaninstancemethod;printso,#Callaninstancemethod;prints"Nicetomeet深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)模型包含了大量的矩陣相乘運(yùn)算,如果使用for循環(huán),運(yùn)算速度會(huì)大大降低。Python中可以使用dot函數(shù)進(jìn)行向量化矩陣運(yùn)算,來(lái)提高網(wǎng)絡(luò)運(yùn)算效率。我們用一個(gè)例子來(lái)比較說(shuō)明for循環(huán)和矩陣運(yùn)算各自的時(shí)間差異性。importnumpyasimporta=b=tic=foriinc+=a[i]*b[i]toc=time.time()print("forloop:"+str(1000*(toc-tic))+c=tic=c=np.dot(a,b)toc=time.time()print("Vectorized:"+str(1000*(toc-tic))+>>>>for>>>>顯然,兩個(gè)矩陣相乘,使用or循環(huán)需要大約00ms,而使用向量化矩陣運(yùn)算僅僅需要大約1ms,效率得到了極大的提升。值得一提的是,神經(jīng)網(wǎng)絡(luò)模型有的矩陣維度非常大,這時(shí)候,使用矩陣直接相乘會(huì)更大程度地提高速度。所以,在構(gòu)建神經(jīng)網(wǎng)絡(luò)模型時(shí),我們應(yīng)該盡量使用矩陣相乘運(yùn)算,減少for循環(huán)的使用。順便提一下,為了加快深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)運(yùn)算速度,可以使用比CPU運(yùn)算能力更強(qiáng)大的GPU。事實(shí)上,GPU和CPU都有并行指令(ParallelizationInstructions),稱為SingleInstructionMultipleData(SIMD)。SIMD是單指令多數(shù)據(jù)流,能夠多個(gè)操作數(shù),并把它們打包在大型寄存器的一組指令集。SIMD向量化矩陣運(yùn)算更快的原因。相比而言,GPU的SIMD要比CPU更強(qiáng)大。Python中的廣播(Broadcasting)機(jī)制非常強(qiáng)大,在神經(jīng)網(wǎng)絡(luò)模型矩陣運(yùn)算中非常有用。廣讓所有輸入數(shù)組都向其中shape最長(zhǎng)的數(shù)組看齊,shape中不足的部分都通過(guò)面加1輸出數(shù)組的shape是輸入數(shù)組shape如果輸入數(shù)組的某個(gè)軸和輸出數(shù)組的對(duì)應(yīng)軸的長(zhǎng)度相同或者其長(zhǎng)度為1時(shí),這個(gè)數(shù)組能夠當(dāng)輸入數(shù)組的某個(gè)軸的長(zhǎng)度為1如果覺(jué)得上面幾條機(jī)制比較晦澀難懂,沒(méi)關(guān)系。簡(jiǎn)而言之,就是Python白了。是不是覺(jué)得廣播機(jī)制很方便?這也正是Python強(qiáng)大的地方,能夠幫我們省很多事。值得一提的是,在Python程序中為了保證矩陣運(yùn)算正確,可以使用reshape函數(shù)設(shè)定矩陣a=上面這條語(yǔ)句生成的向量維度既不是(6,1),也不是(1,6),而是(6,)。它既不是列向量也不是行向量,而是rank1aray。rank1array的特點(diǎn)是它的轉(zhuǎn)置還是它本身。這種定義實(shí)際應(yīng)用中可能會(huì)帶來(lái)一些問(wèn)題,如果我們想要定義行向量或者列向量的話,最好這樣寫(xiě):a=a=另外,我們還可以使用assert語(yǔ)句對(duì)向量或者數(shù)組維度進(jìn)行判斷。如果與給定的維度不同,則程序在此處停止運(yùn)行。assertassert(a==MatplotlibPythonmatplotlib.pyplotplotMatplotlib2Dimportnumpyasimportmatplotlib.pyplotas#Computethexandycoordinatesx=np.arange(0,4*np.pi,0.1)y=np.sin(x)#Plotthepointsusingplt.plot(x,#Youmustcallplt.show()tomakegraphics我們也可以在一片中同時(shí)畫(huà)多個(gè)曲線importnumpyasimportmatplotlib.pyplotas#Computethexandycoordinatesx=np.arange(0,4*np.pi,0.1)y_sin=np.sin(x)y_cos=#Plotthepointsusingmatplotlibplt.plot(x,y_sin)plt.plot(x,y_cos)plt.xlabel('xaxislabel')plt.ylabel('yaxislabel')plt.title('SineandCosine')plt.legend(['Sine','Cosine'])最后介紹一下如何顯示importnumpyasfromscipy.miscimportimread,imresizeimportmatplotlib.pyplotaspltimg=imread('./dog.jpg')img_tinted=img*[0.9,0.9,0.8]#Showtheoriginalimageplt.subplot(2,1,1)#Showthe

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論