日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

【AI白身境】学AI必备的python基础​​​​​​​

發布時間:2025/3/20 python 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【AI白身境】学AI必备的python基础​​​​​​​ 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章首發于微信公眾號《有三AI》

【AI白身境】學AI必備的python基礎

今天是新專欄《AI白身境》的第三篇,所謂白身,就是什么都不會,還沒有進入角色。

上一篇給大家介紹了如何正確使用Linux,如何利用shell,vim,git這三大神器。相信大家也掌握的差不多了,今天就和大家分享下對于python,我們應該如何掌握,如何正確把它和深度學習完美的結合起來。

作者?|?湯興旺?言有三

編輯?|?湯興旺?言有三

?

01?基礎操作

人生苦短,必須學好python!python現在火的程度已經不需要我多言了,它為什么為火,我認為有兩個原因,第一是人工智能這個大背景,第二是它真的太容易學了,沒有任何一門語言比它好上手,接下來我將和大家分享下python的基礎操作。另外請注意,我的所有操作都是基于python3!

1.1?python核心內容之函數

如果你想要學好python,務必學好function,不然就相當于沒學過python。

1.1.1?函數定義

在python函數定義時有五個要點,分別是def、函數名、函數體、參數、返回值、以及兩個英文版符號:小括號(括號內為參數)和冒號。下面對這5點分別解釋下:

def:函數關鍵字。必須要有,系統看到它,就知道下面是個函數了。

函數名:函數的名稱。就是給函數起了個名字,當你調用函數時,用函數名就可以直接調用了。

函數體:函數中進行的具體操作。就是你這個函數想要實現的功能。

參數:提供給函數體。

返回值:當函數執行完畢后,可以給調用者返回想要的數據。

下面通過一個具體的實例來說明下:

def?get_image(picture_path):

?????img?=?cv2.imread("picture_path")

?????return??img

上面實例中,get_image是這個函數的函數名,這個函數的參數是picture_path,就是圖片的路徑,這個參數會傳到函數體中。如果你的圖片路徑是d://01.jpg,這時候函數體就會變成img?=?cv2.imread("d://01.jpg"),最后返回圖片。

1.1.2?函數參數

相信你已經知道函數應該如何定義了,接下來再說說函數中最難理解也是最重要的一點,那就是函數參數。

首先我們說說位置參數。

def?sum(x):

????z?=?x+x

????return?z

>>>sum(10)

20

這里的x可以認為是一個位置參數,顧名思義,x先占一個位置,當給予它一個值時,它會傳到函數體中,注意像這種位置參數,務必要給予一個值,不然程序會報錯。

接下來說說默認參數。

def?sum(x,y=12):

????z?=?x+y

????return?z

>>>sum(10)

22

>>>sum(10,13)

23

這個實例中,y?=?12就是個默認參數,當該參數沒有傳入相應的值時,該參數就使用默認值。但有點需要注意:默認參數必須在位置參數后面,否則會報錯。

哈哈,報錯了,千萬不要放這樣的錯誤喲,想避免這樣的錯誤很簡單,就從你定義的順序從前往后寫就行。

然后再說說可變參數

在使用python函數時,有時候我們不知道我們需要傳入多少個參數,于是就有了可變參數的這個概念。為了更好的理解這個概念,先拋出一個問題:計算a+b+c+d+...的和,因為不知道有幾個數字,所以是個可變的問題。那么如何用python函數來解決這個問題呢,如下:

def?sum(*numbers):

????sum?=?0

????for?n?in?numbers:

????????sum?=sum?+n*n

????return?sum?

>>>sum(10,2,12,3,4)

我們在參數前面加了一個*號。這樣這個參數就變成了可變參數。在調用該函數時,可以傳入任意個參數,包括0個參數。

最后說一下關鍵字參數

什么是關鍵字參數,對于這個概念我們先看下面的代碼:

def?penson(name,age,**kw):

????print('name:',name,'age:',age,'other:',kw)

>>>person('zhang?san',24,city='changchun')

name:zhang?san?age:24?other:{'city':'changchun'}

通過上面的例子你應該明白了關鍵字參數是什么了吧,實際上就是你傳入的參數比你之前定義的參數會多,注意位置參數必須要給它傳值。

這就是python函數的一些基本的方法,更復雜的函數實際上也就是上面的組合而已,只要多加練習,一定能夠很好的掌握它。

1.2?python?縮進規則

你可能已經注意到上面我寫python函數時用到了許多縮進,你可能也會問自己為什么要采用縮進,應該如何縮進這些問題,下面請看我一一道來。

1.2.1?python縮進的由來

我們在大學時可能都學過c語言,在c中主要通過{}來區分代碼快,但我們初學者往往忘記打{},而且花括號多了,我們就暈了。而python就不會出現這種問題,python中的縮進可以理解為c中的{}。我們來看下下面這個例子:

def?SayHello():

????print("hello?world")

????SayHello()

你會發現此時不能輸出任何結果,我們再看下面一段代碼

def?SayHello():

????print("hello?world")

SayHello()

這樣就成功了,為什么會這樣呢,下面我介紹一種畫框法。如下圖所示相同顏色框在一起說明它們是屬于同一代碼塊。

這段代碼只是定義了一個函數并未執行它,正確的寫法如下:

以后大家可以用這種畫框法確定縮進是否正確。

?

02?矩陣庫——NumPy

NumPy(Numerical?Python)?是?Python語言的一個擴展程序庫,支持高維數組與矩陣運算,提供了大量的數學函數庫。

對于深度學習來說,高維數組我們用的很多,因此要想學好深度學習,必須對NumPy了如指掌。

2.1?ndarray對象??????????????????????????

在NumPy中我們用ndarray表示數組,可以說它是整個庫的核心。下面我們將從以下幾個方面來理解ndarray。

2.2?創建數組

要想對數組進行運算操作,我們必須先創建個數組。方法如下:

import?numpy?as?np#導入numpy這個包

a0?=?np.array([1,2,3,4])#采用列表方式

a1?=?np.array((1,2,3,4))#采用元組方式

對于多維數組的創建(注意中括號),如下:

import?numpy?as?np

a?=?np.array([[1,2,3],[2,3,4],[4,5,6]])

上面我們創建的數組里面的元素都是我們指定的,那么如何自動生成數組?又如何隨機的生成一個數組呢?我們首先看第一個方法arange(),如下:

import?numpy?as?np

a?=?np.arange(0,1,0.1)

在上面這個數組中,arange()的第一個值代表開始值,第二個值代表終值(不包括這個值),最后一個值代表步長(間隔),如arange(1,10,1)代表一個從0-9,步長為1的數組。這就是arange(),經常用的到!我們再看第二個方法linspace(),如下:

import?numpy?as?np

a?=?np.linspace(0,10,10)

對于linspace(),它的前兩個值和arange()一樣,代表開始值和終值,但有個區別是linspace()默認包括終值,如果你不想包括終值,加上endpoint?=?False即可,對于第三個值它是指元素的個數,這個和arange不一樣,一定不要混淆。

最后我們再說下如何創建一個隨機數組。

在NumPy中有一龐大的函數庫,對于隨機數我們可以采用numpy.random模塊,該模塊中有大量和隨機數相關的函數。一些函數如下:

我們可以利用這些函數來創建你想要的隨機數,一些實例如下:

import?numpy?as?np

a?=?np.random.rand(2,2)

b?=?np.random.randn(2,2)

c?=?np.random.randint(0,9,(2,2))

創建隨機數是不是很簡單,其實對于數組的創建還有許多方法,如下面所示:

np.zeros()?:生成元素全是0的數組

np.ones():生成元素全是1的數組

np.zeros_like(a):生成形狀和a一樣且元素全是0的數組

np.ones_like(a):生成形狀和a一樣且元素全是1的數組

...

相信通過上面的介紹你已經掌握了如何創建一個數組了,很好!那么我們再思考一個問題,若碰到一個元素很多的數組,但卻不知道它的形狀等參數,這時該怎么辦呢?對于這個問題我們可以通過下面的一些方法來解決。

獲取數組a的shape:a.shape

獲取數組a的元素類型:a.dtype

獲取數組a的維度:a.ndim

....

2.3?存取數組

當一個數組創建好后,我們有時候可能需要對一個數組中的一些具體元素進行運算,或者更改數組中一些元素的值。進行這些操作的前提是先能存取數組,為了解決這個問題,這里我們主要介紹切片法和整數列表來存取數組元素,這種方法其實也是最常見的。

import?numpy?as?np

a?=?np.array([4,2,3,5,9,0,,6,8,7])

>>>[4,2,3,5,9,0,6,8,7]

對于上面這個數組,如果我想要得到5這個元素該怎么辦呢?很簡單,在ndarray中第一個元素的位置是0,本例中5在第四個位置,所以a[3]?=?5。

我們還可以用切片獲取數組的一部分,如a[3:5]表示獲取第四個位置和第五個位置的元素,a[3:5]=[5,9];a[::-1]表示從最后一個元素到第一個元素,該方法省略了開始下標和結束下標,這時候開始下標就是對應第一個元素,結束下標就對應著最后一個數,-1表示步長為1,負號從后往前數。

上面說的都是一維數組的存取,我們再來說一下二維數組。其實二維數組和一維數組數組類似,只是二維數組有2個軸,所以下標自然需要2個值來表示。請看下面的實例:

在二維數組中豎軸表示第0軸,橫軸表示第1軸,讀取元素時我們通過逗號把0軸和1軸隔開,這樣就可以通過一維數組的方法來讀取,最后兩者的交集就是我們需要讀取的元素。

我們再看下三維數組,這也是最復雜的,在深度學習特征數據處理時用的是最多的。我們先創建一個3行5列3通道的數組,看看效果。

再來分析下這個生成的數組。我們知道這個三維數組有下圖所示的三塊,而第幾塊又代表通道的第幾行數據,圖中圈的那個塊就是通道的第2行數據,另外在每一個塊里面每行數據代表通道的第幾列數據。圖中圈的那個塊5有行數據,則代表著這個通道有5列數據。

其次在這個三維數組中,有下面圖示的這樣三列,一列代表一個通道。另外要注意所有的數據位置的下標都是從0開始。

下面我要把圖示的元素改成8該怎么辦呢?如下:

通過上面的例子你是否理解了三維數組應該怎樣存取數據了呢?理解了的話就打開vim多寫寫基本就能深刻的掌握了。

2.4?NumPy常見函數使用

現在我們已經學會了創建數組和數組的存取,那么我們該如何對數組進行函數運算呢,這也是NumPy的核心內容。

2.4.1?數組維度變換

我們首先說一下如何對數組的形狀進行整理,即將一個任意形狀的矩陣轉化我們想要轉化的任意形狀,當然要想完成這個操作,元素個數必須要滿足。請看下面實例:

import?numpy?as?np

a?=?np.arange(0,10,1)

b?=?a.reshape(2,5)

print(a)

print(b)

上面的實例通過reshape()函數把一個1維數組,變成了一個2行5列的一個數組。reshape()里面的參數就是你想要轉換成的數組的形狀。再看一個實例對reshape()熟練下,如下:

import?numpy?as?np

a?=?np.arange(0,10,1)

b?=?a.reshape(2,-1)

c?=?a.reshape(-1,5)

print(a)

print(b)

print(c)

b和c的結果是一樣的,而且和上一個實例的結果也一樣,這是為什么呢?其實這里面的-1代表自動生成的意思,意思就是對于b我已經指定了數組的行是2行,那么系統就會自動生成一個5列,因為是10個數,必須是5列,所以b和c仍然是2行5列的數組,這就是數組形狀變換。

說完數組形狀變換我們再看下如何對數組進行維度交換。請看下面實例:

import?numpy?as?np

a?=?np.arange(10).reshape(2,5)

b?=?a.swapaxes(0,1)

print(a)

print(b)

通過上面實例我們看出通過swapaxes()將一個數組的第0軸和第1軸進行了交換,由2行5列變成了5列2行。這是二維數組的維度交換,我們再看一個三維數組的例子,如下:

import?numpy?as?np

a?=?np.arange(24).reshape(2,3,4)

b?=?a.swapaxes(0,1)

print(a)

print(b)

這個實例我將三維數組的第0軸和第1軸進行了交換,第0軸就是我在上面2.3存取數組這一節中說的塊,第1軸就是塊中的行,下面我將我對三維數組維度交換的理解和大家分享下。

如下,我們首先將第一塊第一行的[0,1,2,3]的位置記為(1,1),第一塊第二行的[4,5,6,7]的位置記為(1,2),第二塊第三行的[20,21,22,23]記為(2,3),其它幾個位置坐標類推。現在我們需要將第0軸和第1軸交換,所以第一塊第一行的[0,1,2,3]的位置變為(1,1),就是第一塊第一行;第一塊第二行的[4,5,6,7]的位置變為為(2,1),就是第二塊第一行;第二塊第三行的[20,21,22,23]變為(3,2),就是第三塊第二行。通過這樣的理解你對上面實例輸出的結果明白了嗎?明白的話,請繼續往下學如何對數組進行降維。

對于數組降維,我們繼續通過實例來分析,如下:

import?numpy?as?np

a?=?np.arange(10).reshape(2,5)

b?=np.flatten()

c?=?a.reshape(-1)

d?=?a.ravel()

print(a)

print(b)

print(c)

print(d)

可以看出我們通過reshape(-1)、flatten()和ravel()函數將多維很容易就變成了1維數組。

2.4.2?堆疊數組

我們再說一下數組的堆疊,這個也是經常會用的。數組的堆疊通常有水平疊加和垂直疊加,分別用到hstack()和vstack()函數,請看下面的實例:

import?numpy?as?np

a?=?np.array([1,2,3,4])

b?=?np.array([5,6,7,8])

c?=?np.hstack((a,b))

d?=?np.vstack((a,b))

print(c)

print(d)

通過這個例子我們也看出通過hstack()和vstack()將數組a和b堆疊成了一個數組。

上面就是我對NumPy在深度學習中最常見的幾點的介紹,其實還有許多,平時多多積累就行。

?

03?數據可視化——matplotlib

說完python我們再說說深度學習中用的比較多的matplotlib。matplotlib是python中最常用的可視化工具之一,用處非常大。

3.1?使用pyplot模塊繪圖

我們先通過matplotlib和NumPy繪制一個圖像。

import?matplotlib.pyplot?as?plt

import?numpy?as?np?

x=?np.linspace(0,10,100)?

y=np.sin(x)?

plt.figure(figsize=(8,4))??

plt.plot(x,y)??

plt.show()???

在這個實例中,我們首先通過import?matplotlib的繪圖塊pyplot,并重新命名為plt。然后用figure調出一個畫布,figsize參數指定畫布的寬度和高度,單位是英寸(1英寸為25.4毫米)。創建好畫布后,我們就可以用plot()在畫布上畫圖了,plot()的前兩個參數分別代表X,Y軸數據的對象。另外plot()參數還可以指定曲線的標簽,顏色,線寬等。

其實我們還能對坐標軸通過下面的方法進行一些參數的設置:

xlabel,ylabel:分別設置X,Y軸的標題文字

title:設置標題

xlim,ylim:分別設置X,Y軸的顯示范圍

legend:顯示圖例

請看下面一個標準的圖形:

接下來我們再看看如何畫直方圖,直方圖在圖像處理中經常會用到。

在用plt.hist()畫直方圖時,第一個參數是繪圖數據,這是必須要有的;另外bins代表直方圖的長條形數目,默認為10;normed表示是否將得到的直方圖向量歸一化,默認為0,代表不歸一;facecolor代表長條形的顏色;edgecolor代表長條行邊框的顏色;alpha代表透明度。

3.2?matlibplot讀取圖像

matplotlib的imread和imshow()提供了圖像的讀取和顯示功能,另外imread()從圖像文件中讀入數據得到的是一個圖像的NumPy數組。

現在我們用matlibplot讀取上面這一張可愛的貓圖,方法如下:

import?matplotlib.pyplot?as?plt

img?=?plt.imread("02.jpg")

plt.imshow(img)

plt.show()

可以看出,很容易就能讀取一張圖片。我們可以通過下面一些方法查看這張圖片的屬性。

print(img.shape)

print(img.dtype)

我們再看看matplotlib讀取的圖像是不是NumPy數組,如下:

可以明顯看到這是ndarray格式,總共三個通道,分別代表RGB。

3.3?matplotlib工具欄

從上面的例子中就可以看到,當顯示一張圖片時,菜單欄自動生成了一些按鈕,這些按鈕都有各自的功能。

3.3.1?前進后退按鈕

這三個按鈕就像是我們使用的瀏覽器中的主頁和前進后退按鈕一樣,一開始這三個圖是沒有什么用的,因為它本來就處于主頁,既不能前進也不能后退,當你使用平移和縮放功能后,每一次操作就相當于在瀏覽器中點開了一個網頁一樣,這時候你就可以使用前進后退和回到最開始狀態的按鈕了。

3.3.2?平移縮放按鈕

這個按鈕也比較簡單,按住鼠標左鍵在圖片區域左右移動可以實現圖像的左右平移,上下移動就可以使圖像上下平移,按住X或者Y鍵移動即只能在X或者Y方向上平移。同理按住鼠標右鍵就是縮放。如果按住Ctrl鍵再進行上述操作,則是XY軸成比例平移或縮放。

3.3.3?縮放到指定矩形按鈕

按住鼠標左鍵或者右鍵,選定一個矩形區域,即可將圖形放大或者縮小到制定的矩形區域中。

在放大局部細節圖時經常使用。

?

3.3.4?設置子圖參數按鈕

點擊該按鈕可以設置子繪圖區域的長度和寬度,還可以設置各個子圖之間的距離。

3.3.5?保存按鈕

該按鈕可以將圖像保存為png、pdf等格式。

matplotlib的一些基礎知識就介紹到這里,大家一定要多加實踐,這樣才能更好的掌握。

?

04?必備的python庫

要想深度學習學的好,必須非常好的掌握python各種庫,這是進行深度學習的基礎。下面我和大家分享下一些常用的庫,其實上面我已經介紹了兩個了那就是NumPy和matplotlib,還有一些其他的庫,請繼續往下看。

4.1?科學計算與數據處理庫

說到科學計算和數據處理,我們可能馬上就會想到NumPy但其實還有兩個其他的庫,那就是SciPy和Pandas。

Scipy在Numpy的基礎上增加了眾多的數學計算、科學計算及工程計算中常用的模塊,例如線性代數、圖像處理等。在Scipy中的ndimage子模塊就是致力于進行圖像處理的。

Pandas是基于NumPy開發,提供了眾多更高級的數據處理工能。Pandas中包含許多用于分組,過濾和組合數據的內置方法,以及時間序列功能。

有機會我們再說說這兩個庫。

4.2?深度學習框架

目前深度學習框架已經呈百家爭鳴之態勢,有Caffe、TensorFlow、Pytorch、Keras等等,對于我們來說,不可能都能掌握,但市面上主流的框架我們還是必須要熟練的掌握。

這些深度學習框架,我們在公眾號的往期文章已經說過大半,大家可以自行翻閱。

4.3?服務端Flask

Flask是一個微型的服務端框架,它旨在保持核心的簡單,但同時又易于擴展。默認情況下,Flask不包含數據庫抽象層、表單驗證,或是其他任何已有多種庫可以勝任的功能。然而,Flask?支持用擴展來給應用添加這些功能。眾多的擴展提供了數據庫集成、表單驗證、上傳處理、各種各樣的開放認證技術等功能。Flask?的這些特性,使得它在?Web?開發方面變得非常流行。

4.4?前端urilib等

urllib是Python自帶的標準庫,無需安裝,直接可以用。提供了如下功能:網頁請求、響應獲取、代理和cookie設置、異常處理和URL解析,主要用于前端爬蟲,對于獲取和整理數據是必備的。

前后端的這些框架,我們在公眾號的往期文章都已經說過,大家可以自行翻閱。

?

總結

AI白身境第三講結束了,但學習的路永無止境,python、NumPy、matplotlib、深度學習框架的知識還有很多,需要我們不斷的學習。期待我們的下期吧。

下期預告:下一期我們會講圖像基礎,如果你有建議,歡迎留言,我們會及時采納的。

?

轉載文章請后臺聯系

侵權必究

AI白身境系列完整閱讀:

第一期:【AI白身境】深度學習從棄用windows開始

第二期:【AI白身境】Linux干活三板斧,shell、vim和git

第三期:【AI白身境】學AI必備的python基礎

第四期:【AI白身境】深度學習必備圖像基礎

第五期:【AI白身境】搞計算機視覺必備的OpenCV入門基礎

第六期:【AI白身境】只會用Python?g++,CMake和Makefile了解一下

第七期:【AI白身境】學深度學習你不得不知的爬蟲基礎

第八期:?【AI白身境】深度學習中的數據可視化

第九期:【AI白身境】入行AI需要什么數學基礎:左手矩陣論,右手微積分

第十期:【AI白身境】一文覽盡計算機視覺研究方向

第十一期:【AI白身境】AI+,都加在哪些應用領域了

第十二期:【AI白身境】究竟誰是paper之王,全球前10的計算機科學家

AI初識境系列完整閱讀

第一期:【AI初識境】從3次人工智能潮起潮落說起

第二期:【AI初識境】從頭理解神經網絡-內行與外行的分水嶺

第三期:【AI初識境】近20年深度學習在圖像領域的重要進展節點

第四期:【AI初識境】激活函數:從人工設計到自動搜索

第五期:【AI初識境】什么是深度學習成功的開始?參數初始化

第六期:【AI初識境】深度學習模型中的Normalization,你懂了多少?

第七期:【AI初識境】為了圍剿SGD大家這些年想過的那十幾招

第八期:【AI初識境】被Hinton,DeepMind和斯坦福嫌棄的池化,到底是什么?

第九期:【AI初識境】如何增加深度學習模型的泛化能力

第十期:【AI初識境】深度學習模型評估,從圖像分類到生成模型

第十一期:【AI初識境】深度學習中常用的損失函數有哪些?

第十二期:【AI初識境】給深度學習新手開始項目時的10條建議

感謝各位看官的耐心閱讀,不足之處希望多多指教。后續內容將會不定期奉上,歡迎大家關注有三公眾號 有三AI

?

總結

以上是生活随笔為你收集整理的【AI白身境】学AI必备的python基础​​​​​​​的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。