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

下載本文檔

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

文檔簡介

第02Python無論是在機(jī)器學(xué)習(xí)還是深度學(xué)習(xí)中,Python已經(jīng)成為主導(dǎo)性的編程語言。而且,現(xiàn)在許多主流的深度學(xué)習(xí)框架,例如PyTorch、TensorFlow也都是基于Python。這門課主要是圍繞“理論+實(shí)戰(zhàn)”同時(shí)進(jìn)行的,所以本文,我將重點(diǎn)介紹深度學(xué)習(xí)中Python的必備知識點(diǎn)。Python是一種面向?qū)ο蟮慕忉屝陀?jì)算機(jī)程序設(shè)計(jì)語言,由荷蘭人GuidovanRossum于1989年發(fā)明,第一個(gè)公開版于1991年。Python具有豐富和強(qiáng)大的庫。它常被昵稱為膠水語言,能夠把用其他語言制作的各種模塊(尤其 為什么人工智能、深度學(xué)習(xí)會選擇Python呢?一方面是因?yàn)镻ython作為一門解釋型語言,入門簡單、容易上手。另一方面是因?yàn)镻ython的開發(fā)效率高,Python有很多庫很方便做人工智能,比如Numpy、Scipy做數(shù)值計(jì)算的,Sklearn做機(jī)器學(xué)習(xí)的,Matplotlib將數(shù)據(jù)可視化的,等等??偟膩碚f,Python既容易上手,又是功能強(qiáng)大的編程語言。按照《Python學(xué)習(xí)手冊》作者的說法,Python可以從支持航空航天器系統(tǒng)的開發(fā)到小游戲開發(fā)的幾乎所有的其實(shí),人工智能的算法的底層還是由C/C++編寫的,因?yàn)槭怯?jì)算密集型,需要非常精的優(yōu)化,還需要GPU、硬件之類的接口,這些都只有C/C++能做到。Python實(shí)際上是實(shí)現(xiàn)API調(diào)用的功能,例如所有的深度學(xué)習(xí)框架PyTorch、TensorFlow等,底層都是由C/C++編寫的。由于Python是頂層高級語言,它的缺點(diǎn)就是運(yùn)行速度慢,但是這絲毫不影響Python的普及。如今,在GPU加速的前提下,Python的運(yùn)行速度已經(jīng)很快了。在眾多因素影響下,Python成為了人工智能的最主要的編程語言。下面這來自TIOBE編程社區(qū)Top10編程語言TIOBE指數(shù)走勢(2002-如今,Python已經(jīng)僅次于Java、C、C++之后,第四,且呈逐年上升的趨勢。而在人工智能領(lǐng)域,Python是當(dāng)之無愧的第一。Python目前有兩個(gè)版本:2和3。人工智能領(lǐng)域主要使用Python3,建議安裝Python3版python--FunctionPython中的函數(shù)以關(guān)鍵字def來定義,例如: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中類的繼承也非常簡單,最基本的繼承方式就是定義類的時(shí)候把父類往括號里一放就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)算速度會大大降低。Python中可以使用dot函數(shù)進(jìn)行向量化矩陣運(yùn)算,來提高網(wǎng)絡(luò)運(yùn)算效率。我們用一個(gè)例子來比較說明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í)候,使用矩陣直接相乘會更大程度地提高速度。所以,在構(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最長的數(shù)組看齊,shape中不足的部分都通過面加1輸出數(shù)組的shape是輸入數(shù)組shape如果輸入數(shù)組的某個(gè)軸和輸出數(shù)組的對應(yīng)軸的長度相同或者其長度為1時(shí),這個(gè)數(shù)組能夠當(dāng)輸入數(shù)組的某個(gè)軸的長度為1如果覺得上面幾條機(jī)制比較晦澀難懂,沒關(guān)系。簡而言之,就是Python白了。是不是覺得廣播機(jī)制很方便?這也正是Python強(qiáng)大的地方,能夠幫我們省很多事。值得一提的是,在Python程序中為了保證矩陣運(yùn)算正確,可以使用reshape函數(shù)設(shè)定矩陣a=上面這條語句生成的向量維度既不是(6,1),也不是(1,6),而是(6,)。它既不是列向量也不是行向量,而是rank1aray。rank1array的特點(diǎn)是它的轉(zhuǎn)置還是它本身。這種定義實(shí)際應(yīng)用中可能會帶來一些問題,如果我們想要定義行向量或者列向量的話,最好這樣寫:a=a=另外,我們還可以使用assert語句對向量或者數(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í)畫多個(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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論