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

下載本文檔

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

文檔簡介

第02Python無論是在機器學習還是深度學習中,Python已經(jīng)成為主導性的編程語言。而且,現(xiàn)在許多主流的深度學習框架,例如PyTorch、TensorFlow也都是基于Python。這門課主要是圍繞“理論+實戰(zhàn)”同時進行的,所以本文,我將重點介紹深度學習中Python的必備知識點。Python是一種面向?qū)ο蟮慕忉屝陀嬎銠C程序設(shè)計語言,由荷蘭人GuidovanRossum于1989年發(fā)明,第一個公開版于1991年。Python具有豐富和強大的庫。它常被昵稱為膠水語言,能夠把用其他語言制作的各種模塊(尤其 為什么人工智能、深度學習會選擇Python呢?一方面是因為Python作為一門解釋型語言,入門簡單、容易上手。另一方面是因為Python的開發(fā)效率高,Python有很多庫很方便做人工智能,比如Numpy、Scipy做數(shù)值計算的,Sklearn做機器學習的,Matplotlib將數(shù)據(jù)可視化的,等等。總的來說,Python既容易上手,又是功能強大的編程語言。按照《Python學習手冊》作者的說法,Python可以從支持航空航天器系統(tǒng)的開發(fā)到小游戲開發(fā)的幾乎所有的其實,人工智能的算法的底層還是由C/C++編寫的,因為是計算密集型,需要非常精的優(yōu)化,還需要GPU、硬件之類的接口,這些都只有C/C++能做到。Python實際上是實現(xiàn)API調(diào)用的功能,例如所有的深度學習框架PyTorch、TensorFlow等,底層都是由C/C++編寫的。由于Python是頂層高級語言,它的缺點就是運行速度慢,但是這絲毫不影響Python的普及。如今,在GPU加速的前提下,Python的運行速度已經(jīng)很快了。在眾多因素影響下,Python成為了人工智能的最主要的編程語言。下面這來自TIOBE編程社區(qū)Top10編程語言TIOBE指數(shù)走勢(2002-如今,Python已經(jīng)僅次于Java、C、C++之后,第四,且呈逐年上升的趨勢。而在人工智能領(lǐng)域,Python是當之無愧的第一。Python目前有兩個版本:2和3。人工智能領(lǐng)域主要使用Python3,建議安裝Python3版python--FunctionPython中的函數(shù)以關(guān)鍵字def來定義,例如:defifx>return'positive'elifx<0:returnreturnforxin[-1,0,1]:#Prints"negative","zero",上面呢,就是定義一個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中類的繼承也非常簡單,最基本的繼承方式就是定義類的時候把父類往括號里一放就class"""ClassKnowinheritencedfromGreeter"""defmeet(self):print('Nicetomeetk=Know('Will')#ConstructaninstanceoftheGreater#Callaninstancemethod;printso,#Callaninstancemethod;prints"Nicetomeet深度學習神經(jīng)網(wǎng)絡模型包含了大量的矩陣相乘運算,如果使用for循環(huán),運算速度會大大降低。Python中可以使用dot函數(shù)進行向量化矩陣運算,來提高網(wǎng)絡運算效率。我們用一個例子來比較說明for循環(huán)和矩陣運算各自的時間差異性。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>>>>顯然,兩個矩陣相乘,使用or循環(huán)需要大約00ms,而使用向量化矩陣運算僅僅需要大約1ms,效率得到了極大的提升。值得一提的是,神經(jīng)網(wǎng)絡模型有的矩陣維度非常大,這時候,使用矩陣直接相乘會更大程度地提高速度。所以,在構(gòu)建神經(jīng)網(wǎng)絡模型時,我們應該盡量使用矩陣相乘運算,減少for循環(huán)的使用。順便提一下,為了加快深度學習神經(jīng)網(wǎng)絡運算速度,可以使用比CPU運算能力更強大的GPU。事實上,GPU和CPU都有并行指令(ParallelizationInstructions),稱為SingleInstructionMultipleData(SIMD)。SIMD是單指令多數(shù)據(jù)流,能夠多個操作數(shù),并把它們打包在大型寄存器的一組指令集。SIMD向量化矩陣運算更快的原因。相比而言,GPU的SIMD要比CPU更強大。Python中的廣播(Broadcasting)機制非常強大,在神經(jīng)網(wǎng)絡模型矩陣運算中非常有用。廣讓所有輸入數(shù)組都向其中shape最長的數(shù)組看齊,shape中不足的部分都通過面加1輸出數(shù)組的shape是輸入數(shù)組shape如果輸入數(shù)組的某個軸和輸出數(shù)組的對應軸的長度相同或者其長度為1時,這個數(shù)組能夠當輸入數(shù)組的某個軸的長度為1如果覺得上面幾條機制比較晦澀難懂,沒關(guān)系。簡而言之,就是Python白了。是不是覺得廣播機制很方便?這也正是Python強大的地方,能夠幫我們省很多事。值得一提的是,在Python程序中為了保證矩陣運算正確,可以使用reshape函數(shù)設(shè)定矩陣a=上面這條語句生成的向量維度既不是(6,1),也不是(1,6),而是(6,)。它既不是列向量也不是行向量,而是rank1aray。rank1array的特點是它的轉(zhuǎn)置還是它本身。這種定義實際應用中可能會帶來一些問題,如果我們想要定義行向量或者列向量的話,最好這樣寫:a=a=另外,我們還可以使用assert語句對向量或者數(shù)組維度進行判斷。如果與給定的維度不同,則程序在此處停止運行。assertassert(a==MatplotlibPythonmatplotlib.pyplotplotMatplotlib2Dimportnumpyasimportmatplotlib.pyplotas#Computethexandycoordinatesx=np.arange(0,4*np.pi,0.1)y=np.sin(x)#Plotthepointsusingplt.plot(x,#Youmustcallplt.show()tomakegraphics我們也可以在一片中同時畫多個曲線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)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論