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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

評論

0/150

提交評論