深度學(xué)習(xí)案例教程 課件 第2章 PyTorch 深度學(xué)習(xí)框架_第1頁(yè)
深度學(xué)習(xí)案例教程 課件 第2章 PyTorch 深度學(xué)習(xí)框架_第2頁(yè)
深度學(xué)習(xí)案例教程 課件 第2章 PyTorch 深度學(xué)習(xí)框架_第3頁(yè)
深度學(xué)習(xí)案例教程 課件 第2章 PyTorch 深度學(xué)習(xí)框架_第4頁(yè)
深度學(xué)習(xí)案例教程 課件 第2章 PyTorch 深度學(xué)習(xí)框架_第5頁(yè)
已閱讀5頁(yè),還剩121頁(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)介

PyTorch深度學(xué)習(xí)框架第二章01理解PyTorch框架的基本原理和核心概念02搭建PyTorch開(kāi)發(fā)環(huán)境并配置所需的軟件和庫(kù)03使用PyTorch框架創(chuàng)建和操作張量,進(jìn)行數(shù)

學(xué)運(yùn)算和數(shù)理統(tǒng)計(jì)04利用PyTorch框架構(gòu)建和訓(xùn)練簡(jiǎn)單的線性回歸模型學(xué)習(xí)目標(biāo)CONTENTS01學(xué)習(xí)和掌握深度學(xué)習(xí)框架的能力02培養(yǎng)良好的編程習(xí)慣和實(shí)踐能力03提高問(wèn)題分析和解決問(wèn)題的能力04培養(yǎng)團(tuán)隊(duì)合作和溝通能力素質(zhì)目標(biāo)CONTENTS05培養(yǎng)持續(xù)學(xué)習(xí)的意識(shí)和能力設(shè)計(jì)模型訓(xùn)練模型實(shí)踐任務(wù)準(zhǔn)備數(shù)據(jù)預(yù)測(cè)數(shù)據(jù)認(rèn)識(shí)線性回歸2.1PyTorch介紹2.1.1PyTorch概述2.1.2使用計(jì)算圖2.1PyTorch介紹1.PyTorch概述PyTorch是一個(gè)基于Torch的Python開(kāi)源機(jī)器學(xué)習(xí)庫(kù),用于自然語(yǔ)言處理等應(yīng)用程序。它主要由Facebook的人工智能研究小組開(kāi)發(fā)。PyTorch的動(dòng)態(tài)圖使得開(kāi)發(fā)者可以更加直觀地定義和調(diào)試復(fù)雜的神經(jīng)網(wǎng)絡(luò)模型,這也是PyTorch在深度學(xué)習(xí)領(lǐng)域日益流行的原因之一。2.1PyTorch介紹2.使用計(jì)算圖計(jì)算圖是一個(gè)由節(jié)點(diǎn)和邊組成的有向無(wú)環(huán)圖(DAG)。節(jié)點(diǎn)表示計(jì)算操作,邊表示數(shù)據(jù)依賴關(guān)系。計(jì)算圖可以把模型中的計(jì)算過(guò)程可視化出來(lái),讓我們更容易理解模型的計(jì)算邏輯。計(jì)算圖也可以被用來(lái)自動(dòng)計(jì)算梯度,這在訓(xùn)練深度學(xué)習(xí)模型時(shí)非常有用。2.2環(huán)境搭建2.2.1anaconda安裝2.2.2pytorch安裝2.2.3pycharm安裝2.2.1Anaconda安裝Anaconda是專注于數(shù)據(jù)分析的Python發(fā)行版本。包含了Conda、Python等一大批科學(xué)包及其依賴項(xiàng)。在安裝Anaconda時(shí)預(yù)先集成了Numpy、pandas、scikit-learn等數(shù)據(jù)分析常用包,在Anaconda中可以建立多個(gè)虛擬環(huán)境,用于隔離不同項(xiàng)目所需的不同版本的工具包,以防止版本上的沖突??傊琣naconda是一個(gè)分析利器。(1)訪問(wèn)Anaconda官網(wǎng)(),選擇適合自己的版本下載,如選擇下載Windows系統(tǒng)下的Python3.10版本,如圖所示。2.2.1Anaconda安裝(2)下載完成后,根據(jù)提示安裝Anaconda,如圖所示。2.2.1Anaconda安裝(2)下載完成后,根據(jù)提示安裝Anaconda,如圖所示。2.2.1Anaconda安裝(2)下載完成后,根據(jù)提示安裝Anaconda,如圖所示。2.2.1Anaconda安裝(2)下載完成后,根據(jù)提示安裝Anaconda,如圖所示。2.2.1Anaconda安裝(2)下載完成后,根據(jù)提示安裝Anaconda,如圖所示。2.2.1Anaconda安裝(3)安裝成功后設(shè)置系統(tǒng)環(huán)境變量的PATH值:右擊【計(jì)算機(jī)】,選擇【屬性】,進(jìn)入【高級(jí)系統(tǒng)設(shè)置】,選擇【環(huán)境變量】,雙擊【PATH】,設(shè)置Anaconda的環(huán)境變量,如圖所示2.2.1Anaconda安裝(3)安裝成功后設(shè)置系統(tǒng)環(huán)境變量的PATH值:右擊【計(jì)算機(jī)】,選擇【屬性】,進(jìn)入【高級(jí)系統(tǒng)設(shè)置】,選擇【環(huán)境變量】,雙擊【PATH】,設(shè)置Anaconda的環(huán)境變量,如圖所示2.2.1Anaconda安裝(4)完成安裝和設(shè)置后,打開(kāi)命令提示符,輸入“conda--versoin”,可以看到其版本信息和Anaconda的字樣,說(shuō)明Anaconda安裝成功,如圖所示。2.2.1Anaconda安裝Anaconda安裝成功之后,我們?cè)谙到y(tǒng)菜單中找到【anacondanavigator】進(jìn)入該界面首先是登陸界面,如圖所示。2.2.1Anaconda安裝選擇【Environments】后發(fā)現(xiàn)系統(tǒng)默認(rèn)創(chuàng)建了base環(huán)境,如圖所示。2.2.1Anaconda安裝點(diǎn)擊【Create】按鈕創(chuàng)建名為pytorch的虛擬環(huán)境,如圖所示。2.2.1Anaconda安裝如圖所示,pytorch虛擬環(huán)境創(chuàng)建完成。2.2.1Anaconda安裝2.2.2PyTorch安裝PyTorch安裝起來(lái)比較方便,根據(jù)系統(tǒng)環(huán)境選擇安裝方式,本書(shū)選用Conda方式安裝PyTorch,使用安裝好的Anaconda,能夠在同一臺(tái)機(jī)器上創(chuàng)建多個(gè)互不影響的Python環(huán)境。首先我們?nèi)yTorch的網(wǎng)站選擇合適的安裝環(huán)境,如圖所示。PyTorch官網(wǎng):2.2.2PyTorch安裝如果電腦有GPU可以查看版本后選擇CUDA,沒(méi)有就選擇CPU。復(fù)制以下命令。condainstallpytorchtorchvisiontorchaudiopytorch-cuda=11.7-cpytorch-cnvidia打開(kāi)命令行窗口,使用condaactivate環(huán)境名稱,的命令來(lái)激活環(huán)境,如圖所示我們進(jìn)入python命令環(huán)境,導(dǎo)入pytorch,輸出其版本信息進(jìn)行驗(yàn)證,如圖所示2.2.2PyTorch安裝也可以使用pip命令進(jìn)行安裝,安裝的Anaconda中包含了python環(huán)境,選擇pip安裝方式復(fù)制后面的命令,然后將下載地址改為清華大學(xué)TUNA提供的鏡像地址,下載速度會(huì)比較快。2.2.3Pycharm安裝在Python開(kāi)發(fā)領(lǐng)域中,最常用的兩種集成開(kāi)發(fā)環(huán)境是JupyterNotebook和PyCharm。2.2.3Pycharm安裝JupyterNotebookJupyterNotebook是一個(gè)交互式筆記本,支持40多種編程語(yǔ)言。其本質(zhì)是一個(gè)Web應(yīng)用程序,便于創(chuàng)建和共享文字化程序文檔,支持實(shí)時(shí)代碼、數(shù)學(xué)方程、可視化和Markdown,包含自動(dòng)補(bǔ)全、自動(dòng)縮進(jìn),支持bashshell命令等。其主要用途包括數(shù)理和轉(zhuǎn)換、數(shù)值模擬、統(tǒng)計(jì)建模、機(jī)器學(xué)習(xí)等。2.2.3Pycharm安裝PyCharmPyCharm是JetBrains公司開(kāi)發(fā)的Python集成開(kāi)發(fā)環(huán)境。PyCharm的功能十分強(qiáng)大,包括調(diào)試、項(xiàng)目管理、代碼跳轉(zhuǎn)、智能提示、自動(dòng)補(bǔ)充、單元測(cè)試、版本控制等。對(duì)編程有非常大的幫助作用,十分適合開(kāi)發(fā)較大型的項(xiàng)目,也非常適合初學(xué)者。(1)訪問(wèn)PyCharm官網(wǎng)(/pycharm/),進(jìn)入下載頁(yè)面,有兩個(gè)版本的PyCharm供下載,分別是專業(yè)版(Professional)和社區(qū)版(Community),由于專業(yè)版收費(fèi),而社區(qū)版足以滿足初學(xué)者幾乎所有的需求,可以下載社區(qū)版,如圖所示。2.2.3Pycharm安裝(2)載完成后,根據(jù)提示安裝pycharm,如圖所示。2.2.3Pycharm安裝(2)載完成后,根據(jù)提示安裝pycharm,如圖所示。2.2.3Pycharm安裝(2)載完成后,根據(jù)提示安裝pycharm,如圖所示。2.2.3Pycharm安裝(3)創(chuàng)建Python項(xiàng)目,選擇項(xiàng)目路徑和配置Python解釋器,并且將其和Anaconda關(guān)聯(lián),如圖所示。2.2.3Pycharm安裝(3)創(chuàng)建Python項(xiàng)目,選擇項(xiàng)目路徑和配置Python解釋器,并且將其和Anaconda關(guān)聯(lián),如圖所示。2.2.3Pycharm安裝(4)點(diǎn)擊【AddInterpreter】添加Anaconda中的已經(jīng)存在的運(yùn)行環(huán)境,如圖所示??梢栽谑褂靡呀?jīng)存在的環(huán)境中切換Anaconda中的base環(huán)境和pytorch環(huán)境2.2.3Pycharm安裝(5)創(chuàng)建項(xiàng)目后,會(huì)自動(dòng)進(jìn)入項(xiàng)目界面,如圖所示。2.2.3Pycharm安裝(6)在項(xiàng)目中添加Python文件,如圖所示。2.2.3Pycharm安裝(7)在main.py文件中,輸入python程序,運(yùn)行后,如圖所示??梢詮膱D中看到程序能夠使用pytorch庫(kù)2.2.3Pycharm安裝2.3PyTorch基本使用2.3.1張量2.3.2數(shù)學(xué)運(yùn)算2.3.3數(shù)理統(tǒng)計(jì)2.3.1張量PyTorch的運(yùn)算單元叫作張量(tensor)。我們可以將張量理解為一個(gè)多維數(shù)組,一階張量即為一維數(shù)組,通常叫作向量(vector);二階張量即為二維數(shù)組,通常叫作矩陣(matrix);三階張量即為三維數(shù)組;n階張量即為n維數(shù)組,如圖所示。張量的定義圖2.1832位浮點(diǎn)型torch.FloatTensor。64位整型

torch.LongTensor。32位整型torch.IntTensor。Tensor的基本數(shù)據(jù)類型16位整型torch.ShortTensor。64位浮點(diǎn)型torch.DoubleTensor。1.初始化張量(1)通過(guò)基礎(chǔ)構(gòu)造函數(shù)創(chuàng)建張量(2)通過(guò)數(shù)據(jù)創(chuàng)建張量(3)根據(jù)另一個(gè)張量創(chuàng)建(4)使用隨機(jī)或恒定值創(chuàng)建1.初始化張量(1)通過(guò)基礎(chǔ)構(gòu)造函數(shù)創(chuàng)建張量例如:構(gòu)造一個(gè)3×4的張量,代碼如下:importtorchtensor=torch.Tensor(3,4)print(tensor)運(yùn)行結(jié)果如下:tensor([[0.0000e+00,0.0000e+00,0.0000e+00,0.0000e+00],[-1.7160e+18,0.0000e+00,0.0000e+00,0.0000e+00],[0.0000e+00,0.0000e+00,0.0000e+00,0.0000e+00]])1.初始化張量(2)通過(guò)數(shù)據(jù)創(chuàng)建張量張量可以直接從數(shù)據(jù)中創(chuàng)建,其數(shù)據(jù)類型是自動(dòng)推斷的,代碼如下:importtorchdata=[[3,4],[5,6]]t_data=torch.tensor(data)print(f"TensorfromData:\n{t_data}\n")程序運(yùn)行結(jié)果如下:TensorfromData:tensor([[3,4],[5,6]])1.初始化張量(3)根據(jù)另一個(gè)張量創(chuàng)建新張量保留參數(shù)張量的屬性(形狀、數(shù)據(jù)類型),除非顯式覆蓋。data=[[3,4],[5,6]]t_data=torch.tensor(data)t_ones=torch.ones_like(t_data)#保留原有張量的形狀和數(shù)據(jù)類型print(f"t_onesTensor:\n{t_ones}\n")t_rand=torch.rand_like(t_data,dtype=torch.float)#顯式更改張量的數(shù)據(jù)類型print(f"t_randTensor:\n{t_rand}\n")程序運(yùn)行結(jié)果如下:t_onesTensor:tensor([[1,1],[1,1]])t_randTensor:tensor([[0.2152,0.6244],[0.1523,0.7312]])1.初始化張量(4)使用隨機(jī)或恒定值創(chuàng)建使用隨機(jī)或恒定值創(chuàng)建張量,其中參數(shù)shape是張量維度的元組,它決定了輸出張量的形狀。代碼如下:shape=(2,3,)#創(chuàng)建2行3列的張量rand_tensor=torch.rand(shape)ones_tensor=torch.ones(shape)zeros_tensor=torch.zeros(shape)#輸出各個(gè)張量的值print(f"rand_tensor:\n{rand_tensor}\n")print(f"ones_tensor:\n{ones_tensor}\n")print(f"zeros_tensor:\n{zeros_tensor}")程序運(yùn)行代碼如下:rand_tensor:tensor([[0.1750,0.1384,0.7738],[0.8761,0.5739,0.1595]])ones_tensor:tensor([[1.,1.,1.],[1.,1.,1.]])zeros_tensor:tensor([[0.,0.,0.],[0.,0.,0.]])2.張量相關(guān)的屬性張量屬性包括形狀、數(shù)據(jù)類型和存儲(chǔ)設(shè)備等,下面我們通過(guò)程序輸出相關(guān)的屬性,代碼如下:importtorchtensor=torch.rand(2,4)print(f"Shapeoftensor:{tensor.shape}")print(f"Datatypeoftensor:{tensor.dtype}")print(f"Devicetensorisstoredon:{tensor.device}")程序運(yùn)行代碼如下:Shapeoftensor:torch.Size([2,4])Datatypeoftensor:torch.float32Devicetensorisstoredon:cpu3.張量的操作(1)將張量移動(dòng)到GPU上(2)索引和切片操作(3)連接張量3.張量的操作(1)將張量移動(dòng)到GPU上,代碼如下:tensor=torch.rand(2,4)print(f"Shapeoftensor:{tensor.shape}")print(f"Datatypeoftensor:{tensor.dtype}")print(f"Devicetensorisstoredon:{tensor.device}")#將張量移動(dòng)到GPU上iftorch.cuda.is_available():tensor=tensor.to("cuda")#輸出張量所在存儲(chǔ)設(shè)備print(f"Devicetensorisstoredon:{tensor.device}")程序運(yùn)行代碼如下:Shapeoftensor:torch.Size([2,4])DShapeoftensor:torch.Size([2,4])Datatypeoftensor:torch.float32Devicetensorisstoredon:cpuDevicetensorisstoredon:cuda:03.張量的操作(2)索引和切片操作張量的索引和切片類似numpy的索引和切片,代碼如下:#索引和切片data=[[1,2,3],[4,5,6],[7,8,9]]t_data=torch.tensor(data)print(f"張量數(shù)據(jù)為:\n{t_data}\n")print(f"第一行:{t_data[0]}")print(f"第一列:{t_data[:,0]}")print(f"最后一列:{t_data[...,-1]}")t_data[:,1]=0#將第二列的數(shù)據(jù)賦值為0print(t_data)程序運(yùn)行代碼如下:張量數(shù)據(jù)為:tensor([[1,2,3],[4,5,6],[7,8,9]])第一行:tensor([1,2,3])第一列:tensor([1,4,7])最后一列:tensor([3,6,9])tensor([[1,0,3],[4,0,6],[7,0,9]])3.張量的操作(3)連接張量在程序中可以用torch.cat或torch.stack來(lái)拼接張量,代碼如下:。data=[[1,2,3],[4,5,6],[7,8,9]]t_data=torch.tensor(data)t1=torch.cat([t_data,t_data,t_data],dim=1)#在第1個(gè)維度拼接,即水平方向print(t1)程序輸出結(jié)果如下:tensor([[1,2,3,1,2,3,1,2,3],[4,5,6,4,5,6,4,5,6],[7,8,9,7,8,9,7,8,9]])4.張量與Numpy在CPU上的張量和NumPy數(shù)組共享它們的內(nèi)存位置,改變一個(gè)會(huì)導(dǎo)致另一個(gè)數(shù)據(jù)也變化。張量轉(zhuǎn)換為NumPy數(shù)組的代碼如下:importtorchimportnumpyasnptensor=torch.ones(2,3)print(f"tensor的值為:{tensor}")num=tensor.numpy()print(f"num的值為:{num}")程序運(yùn)行結(jié)果如下:tensor的值為:tensor([[1.,1.,1.],[1.,1.,1.]])num的值為:[[1.1.1.][1.1.1.]]4.張量與Numpy改變張量的值,numpy數(shù)組的值也隨之更改,代碼如下:importtorchimportnumpyasnptensor=torch.ones(2,3)print(f"tensor的值為:{tensor}")num=tensor.numpy()print(f"num的值為:{num}")#改變第二行的值tensor[1,:]=3print(f"修改后tensor的值為:{tensor}")print(f"修改后num的值為:{num}")程序運(yùn)行結(jié)果如下:tensor的值為:tensor([[1.,1.,1.],[1.,1.,1.]])num的值為:[[1.1.1.][1.1.1.]]修改后tensor的值為:tensor([[1.,1.,1.],[3.,3.,3.]])修改后num的值為:[[1.1.1.][3.3.3.]]4.張量與Numpy將NumPy數(shù)組num轉(zhuǎn)換為張量,代碼如下:tensor1=torch.from_numpy(num)print(f"tensor1的值:{tensor1}")改變numpy數(shù)組的值,張量的值也會(huì)發(fā)生改變,代碼如下:tensor1=torch.from_numpy(num)print(f"tensor1的值:{tensor1}")np.add(num,3,out=num)print(f"修改后num的值:{num}")print(f"修改后tensor1的值:tensor1")程序運(yùn)行結(jié)果如下:tensor1的值:tensor([[1.,1.,1.],[3.,3.,3.]])修改后num的值:[[4.4.4.][6.6.6.]]修改后tensor1的值:tensor([[4.,4.,4.],[6.,6.,6.]])5.單元素張量只有一個(gè)值的張量,可以通過(guò)item屬性轉(zhuǎn)換為數(shù)值,接著上面的操作添加如下代碼:agg=tensor1.sum()agg_item=agg.item()print(agg_item,type(agg_item))程序運(yùn)行結(jié)果為:30.0<class'float'>2.3.1

張量(1)初始化張量(2)張量的相關(guān)屬性(3)張量的操作(4)張量與numpy(5)單元素張量2.3.2數(shù)學(xué)運(yùn)算(1)矩陣相加(2)矩陣相乘(3)矩陣對(duì)應(yīng)元素相乘(4)絕對(duì)值函數(shù)(5)就地操作(1)矩陣相加在PyTorch中可以通過(guò)“+”和“torch.add(參數(shù))”方法實(shí)現(xiàn)矩陣相加操作,代碼如下:importtorcht1=torch.ones(2,3)t2=torch.ones(2,3)t3=t1+t2;print(t3)t4=torch.add(t1,t2)print(t4)程序運(yùn)行結(jié)果如下:tensor([[2.,2.,2.],[2.,2.,2.]])tensor([[2.,2.,2.],[2.,2.,2.]])2.3.2數(shù)學(xué)運(yùn)算(2)矩陣相乘矩陣相乘可以使用@,或者matmul方法,示例代碼如下:importtorchtensor=torch.ones(3,3)#矩陣相乘,y1、y2和y3的值相同y1=tensor@tensor.Ty2=tensor.matmul(tensor.T)y3=torch.rand_like(tensor)torch.matmul(tensor,tensor.T,out=y3)print(y1)print(y2)print(y3)程序運(yùn)行結(jié)果如下:tensor([[3.,3.,3.],[3.,3.,3.],[3.,3.,3.]])tensor([[3.,3.,3.],[3.,3.,3.],[3.,3.,3.]])tensor([[3.,3.,3.],[3.,3.,3.],[3.,3.,3.]])2.3.2數(shù)學(xué)運(yùn)算(3)矩陣對(duì)應(yīng)元素相乘矩陣中相對(duì)應(yīng)位置上的元素相乘可以使用“*”或mul方法來(lái)實(shí)現(xiàn),代碼如下:z1=y1*y2z2=y2.mul(y1)print(z1)print(z2)程序運(yùn)行結(jié)果如下:tensor([[9.,9.,9.],[9.,9.,9.],[9.,9.,9.]])tensor([[9.,9.,9.],[9.,9.,9.],[9.,9.,9.]])2.3.2數(shù)學(xué)運(yùn)算(4)絕對(duì)值函數(shù)計(jì)算輸入張量中每個(gè)元素的絕對(duì)值可以采用torch.abs(input,out=None),代碼如下:t1=torch.abs(torch.FloatTensor([-8,-2,-4]))print(t1)程序運(yùn)行結(jié)果如下:tensor([8.,2.,4.])2.3.2數(shù)學(xué)運(yùn)算(5)就地操作將結(jié)果存儲(chǔ)到操作數(shù)中的操作稱為就地操作。它們由_后綴表示。例如:x.copy_(y),x.t_(),會(huì)變x的值。t1=torch.abs(torch.FloatTensor([-8,-2,-4]))print(t1)t1.add_(4)print(t1)程序運(yùn)行結(jié)果如下:tensor([8.,2.,4.])tensor([12.,6.,8.])2.3.2數(shù)學(xué)運(yùn)算1.統(tǒng)計(jì)函數(shù)2.分布函數(shù)3.隨機(jī)函數(shù)2.3.3數(shù)理統(tǒng)計(jì)(1)最小值(2)最大值(3)中位數(shù)(4)平均值(5)標(biāo)準(zhǔn)差(6)方差(7)眾數(shù)(8)分位數(shù)(9)累計(jì)求積1.統(tǒng)計(jì)函數(shù)(1)最小值:min()/amin()/argmin()/minimum()min返回最小值和對(duì)應(yīng)的索引,amin返回最小值,argmin返回索引。函數(shù)如下:torch.min(input,dim,keepdim=False,*,out=None)torch.amin(input,dim,keepdim=False,*,out=None)torch.argmin(input,dim=None,keepdim=False)1.統(tǒng)計(jì)函數(shù)示例代碼如下:importtorchx=torch.tensor([[6,3,9],[4,5,6]])#返回每行中的最小值和索引values,index=torch.min(x,dim=1)print(values,index)#返回每行中的最小值values=torch.amin(x,dim=1)print(values)#返回每行中最小值的索引index=torch.argmin(x,dim=1)print(index)程序運(yùn)行結(jié)果如下:tensor([3,4])tensor([1,0])tensor([3,4])tensor([1,0])1.統(tǒng)計(jì)函數(shù)1.統(tǒng)計(jì)函數(shù)比較兩個(gè)張量,并返回對(duì)應(yīng)位置的最小值,使用minimum()函數(shù),示例代碼如下:importtorcha=torch.tensor((6,3,9))b=torch.tensor((4,5,6))c=torch.minimum(a,b)print(c)程序運(yùn)行結(jié)果如下:tensor([4,3,6])1.統(tǒng)計(jì)函數(shù)(2)最大值:max()/amax()/argmax()/maximum()max返回最大值和對(duì)應(yīng)的索引,amax返回最大值,argmax返回索引.函數(shù)定義如下:torch.max(input,dim,keepdim=False,*,out=None)torch.amax(input,dim,keepdim=False,*,out=None)torch.argmax(input,dim=None,keepdim=False)1.統(tǒng)計(jì)函數(shù)示例代碼如下:x=torch.tensor([[6,3,9],[4,5,6]])#返回每行中的最大值和索引values,index=torch.max(x,dim=1)print(values,index)#返回每行中的最大值values=torch.amax(x,dim=1)print(values)#返回每行中最大值的索引index=torch.argmax(x,dim=1)print(index)運(yùn)行結(jié)果如下:tensor([9,6])tensor([2,2])tensor([9,6])tensor([2,2])1.統(tǒng)計(jì)函數(shù)比較兩個(gè)張量,返回對(duì)應(yīng)位置上的最大值使用maximum()函數(shù),代碼如下:a=torch.tensor((6,3,9))b=torch.tensor((4,5,6))c=torch.maximum(a,b)print(c)運(yùn)行結(jié)果如下:tensor([6,5,9])1.統(tǒng)計(jì)函數(shù)該函數(shù)支持廣播機(jī)制,可返回兩個(gè)不同形狀的張量中相同位置的最大值,代碼如下:importtorchx1=torch.tensor([[1,2,4],[10,11,12]])x2=torch.tensor([[4,5,6]])y=torch.maximum(x1,x2)print(y)運(yùn)行結(jié)果如下:tensor([[4,5,6],[10,11,12]])1.統(tǒng)計(jì)函數(shù)(3)中位數(shù):median()/nanmedian()median()函數(shù)用于返回所有元素的中位數(shù)函數(shù)定義如下:torch.median(input,dim=-1,keepdim=False,*,out=None)1.統(tǒng)計(jì)函數(shù)示例代碼如下:importtorchx=torch.tensor([[1.0,2.0,3.0]])y=torch.median(x)print(y)#tensor(2.)1.統(tǒng)計(jì)函數(shù)如果共有偶數(shù)個(gè)元素,則會(huì)有兩個(gè)中位數(shù),返回較小的那一個(gè)。importtorchx=torch.tensor([[1.0,2.0,3.0,4.0]])y=torch.median(x)print(y)#tensor(2.)1.統(tǒng)計(jì)函數(shù)返回指定維度的元素的中位數(shù)。importtorchx=torch.tensor([[1,-3,5],[7,0,2]])y=torch.median(x,1)print(y[0])#tensor([1,2])中位數(shù)print(y[1])#tensor([0,2])對(duì)應(yīng)的索引1.統(tǒng)計(jì)函數(shù)如果元素中有nan,則返回nan。importtorchx=torch.tensor([1.0,torch.nan,2.0])y=torch.median(x)print(y)#tensor(nan)1.統(tǒng)計(jì)函數(shù)如果張量中有nan元素,則忽略,采用nanmedian()函數(shù),代碼如下:importtorchx=torch.tensor([1.0,torch.nan,2.0])y=torch.nanmedian(x)print(y)#tensor(1.)1.統(tǒng)計(jì)函數(shù)(4)平均值mean()/nanmean()計(jì)算所有元素或指定維度的元素的均值采用mean()函數(shù)其定義如下:torch.mean(input,dim,keepdim=False,*,dtype=None,out=None)1.統(tǒng)計(jì)函數(shù)示例代碼如下:importtorchx=torch.tensor([[1.0,2.0],[3.0,2.0]])y=torch.mean(x)#y=x.mean()print(y)#tensor(2.)importtorchx=torch.tensor([[1.0,2.0],[3.0,2.0]])y=torch.mean(x,axis=1)#y=x.mean(dim=1)print(y)#tensor([1.5000,2.5000])1.統(tǒng)計(jì)函數(shù)如果值中有nan,則均值返回nan,代碼如下。importtorchx=torch.tensor([[torch.nan,2.0],[3.0,2.0]])y=torch.mean(x)print(y)#tensor(nan)1.統(tǒng)計(jì)函數(shù)計(jì)算指定維度的非nan元素的均值,可以采用nanmean()函數(shù),代碼如下:importtorchx=torch.tensor([[torch.nan,2.0],[3.0,2.0]])y=torch.nanmean(x,dim=1)#y=x.nanmean(dim=1)print(y)#tensor([2.0000,2.5000])1.統(tǒng)計(jì)函數(shù)(5)求和

sum()/nansum()/cumsum()計(jì)算指定維度的元素的和,采用sum()函數(shù)其定義如下:torch.sum(input,dim,keepdim=False,*,dtype=None)示例代碼如下:importtorchx=torch.tensor([[1,2],[3.,4.]])y=torch.sum(x,axis=0)print(y)#tensor([4.,6.])1.統(tǒng)計(jì)函數(shù)計(jì)算指定維度的非nan元素的和,采用nansum()函數(shù)示例代碼如下:importtorchx=torch.tensor([[1,2],[3.,float("nan")]])y=torch.nansum(x)print(y)#tensor(6.)1.統(tǒng)計(jì)函數(shù)在指定的維度累計(jì)求和需要指定dim參數(shù),示例代碼如下:importtorchx=torch.tensor([[1,2],[3.,float("nan")]])y=torch.nansum(x,dim=1)print(y)#tensor([3.,3.])1.統(tǒng)計(jì)函數(shù)累計(jì)求和采用cumsum函數(shù),cumsum函數(shù)示例代碼如下:importtorchx=torch.tensor([[1,2],[3.,4.]])y=torch.cumsum(x,axis=0)print(y)#tensor([[1.,2.],[4.,6.]])1.統(tǒng)計(jì)函數(shù)(6)標(biāo)準(zhǔn)差:std()定義如下:torch.std(input,dim,unbiased,keepdim=False,*,out=None)示例代碼如下:importtorchx=torch.tensor([[1,2],[3.,4.]])y=torch.std(x,dim=0)print(y)#tensor([1.4142,1.4142])1.統(tǒng)計(jì)函數(shù)(7)方差:var()定義如下:torch.var(input,dim,unbiased,keepdim=False,*,out=None)示例代碼如下:importtorchx=torch.tensor([[1,2],[3.,4.]])y=torch.var(x,dim=0)print(y)#tensor([2.,2.])1.統(tǒng)計(jì)函數(shù)(8)眾數(shù):mode()torch.mode(input,dim)返回的是指定維度的眾數(shù)的還有該眾數(shù)的索引;示例代碼如下:importtorchx=torch.tensor([1,2,2,3,3,3])values,index=torch.mode(x)print(values)#tensor(3)眾數(shù)print(index)#tensor(5)最后一次出現(xiàn)的位置1.統(tǒng)計(jì)函數(shù)(9)分位數(shù)quantile()/unquantile()定義如下:torch.quantile(input,q,dim=None,keepdim=False,*,out=None)示例代碼如下:importtorchx=torch.tensor([1.,2.,3.,4.,5.])q=torch.tensor([0.25,0.5,0.75])y=torch.quantile(x,q,dim=0,keepdim=True)print(y)#tensor([[2.],[3.],[4.]])1.統(tǒng)計(jì)函數(shù)使用nanquantile()函數(shù)忽略掉nan值,去求分位數(shù),示例代碼如下:importtorchx=torch.tensor([1.,2.,3.,4.,5.,float('nan')])q=torch.tensor([0.25,0.5,0.75])y=torch.quantile(x,q,dim=0,keepdim=True)print(y)#tensor([[2.],[3.],[4.]])1.統(tǒng)計(jì)函數(shù)(10)累計(jì)求積:prod()定義如下:d(input,dim,keepdim=False,*,dtype=None)示例代碼如下:importtorchx=torch.tensor([1.,2.,3.])y=d(x)print(y)#tensor(6.)#計(jì)數(shù):count_nonzero()#torch.count_nonzero(input,dim=None)importtorchx=torch.tensor([[1,2,0],[3.,4.,0]])y=torch.count_nonzero(x,dim=0)print(y)#tensor([2,2,0])2.分布函數(shù)(1)正態(tài)分布函數(shù)(2)伯努利分布函數(shù)(3)泊松分布函數(shù)(4)多元正態(tài)分布函數(shù)2.分布函數(shù)(1)正態(tài)分布:normal()正態(tài)分布函數(shù)mormal()的定義如下:torch.normal(mean,std,*,generator=None,out=None)該函數(shù)返回一個(gè)張量,包含從給定參數(shù)means,std的離散正態(tài)分布中抽取隨機(jī)數(shù)。使用該函數(shù)的示例代碼如下:importtorchx=torch.normal(mean=torch.arange(1.,6.),std=torch.arange(1,0,-0.2))print(x)#tensor([1.7975,1.8425,3.0575,3.3935,5.3791])2.分布函數(shù)共享均值的代碼如下:importtorchx=torch.normal(mean=1.,std=torch.arange(1,0,-0.2))print(x)#tensor([1.9187,1.1210,0.3641,0.9876,1.2493])共享標(biāo)準(zhǔn)差的代碼如下:importtorchx=torch.normal(mean=torch.arange(1,0,-0.2),std=1.)print(x)#tensor([0.5276,1.8708,-1.4019,-0.7807,1.0124])2.分布函數(shù)(2)伯努利分布:bernoulli()伯努利分布函數(shù)bernoulli()的定義如下:torch.bernoulli(input,*,generator=None,out=None)根據(jù)隨機(jī)矩陣,值為(0,1),產(chǎn)生隨機(jī)數(shù)0或1。importtorchx=torch.empty(3,3).uniform_(0,1)y=torch.bernoulli(x)print(x)print(y)運(yùn)行結(jié)果:tensor([[0.8473,0.8749,0.6483],[0.2148,0.9493,0.0121],[0.1809,0.1877,0.2927]])tensor([[1.,1.,1.],[0.,1.,0.],[1.,1.,1.]])2.分布函數(shù)對(duì)于1值輸入,伯努利返回的也是1值。importtorchx=torch.ones(2,2)y=torch.bernoulli(x)print(x)print(y)運(yùn)行結(jié)果:tensor([[1.,1.],[1.,1.]])tensor([[1.,1.],[1.,1.]])2.分布函數(shù)對(duì)于0值輸入,伯努利返回的也是0值。importtorchx=torch.zeros(2,2)y=torch.bernoulli(x)print(x)print(y)運(yùn)行結(jié)果:tensor([[0.,0.],[0.,0.]])tensor([[0.,0.],[0.,0.]])2.分布函數(shù)(3)泊松分布:poisson()泊松分布函數(shù)的定義如下:torch.poisson(input,generator=None)使用泊松分布的示例代碼如下:importtorchx=torch.rand(2,2)*5y=torch.poisson(x)print(x)#tensor([[2.0526,3.9384],[1.0724,2.4068]])2.分布函數(shù)(4)多元正態(tài)分布:multinomial()多元正態(tài)分布函數(shù)的定義與說(shuō)明如下:torch.multinomial(input,num_samples,replacement=False,*,generator=None,out=None)參數(shù)說(shuō)明如下:input:輸入的張量num_samples:每行的取值次數(shù),該值不能大于每一行的元素?cái)?shù),否則會(huì)報(bào)錯(cuò)。replacement:布爾值表示取樣時(shí)有無(wú)放回,True是有放回,F(xiàn)alse無(wú)放回。2.分布函數(shù)對(duì)于無(wú)放回抽樣的示例代碼如下:importtorchweights=torch.tensor([10,20,30],dtype=torch.float)x=torch.multinomial(weights,3)print(x)#tensor([1,2,0])2.分布函數(shù)對(duì)于有放回抽樣的示例代碼如下:importtorchweights=torch.tensor([10,20,30],dtype=torch.float)x=torch.multinomial(weights,4,replacement=True)print(x)#tensor([0,1,1,2])2.分布函數(shù)對(duì)于多維張量的抽樣代碼如下:importtorchweights=torch.tensor([[10,20,30],[50,60,70]],dtype=torch.float)x=torch.multinomial(weights,2)print(x)#tensor([[1,2],[2,0]])3.隨機(jī)函數(shù)(1)隨機(jī)種子函數(shù)(2)返回隨機(jī)數(shù)種子函數(shù)3.隨機(jī)函數(shù)(1)隨機(jī)種子:seed()/manual_seed()/使用seed()的代碼如下:torch.seed()#13778702264380944972在需要生成隨機(jī)數(shù)的實(shí)驗(yàn)中,確保每次運(yùn)行.py文件時(shí),使用manual_seed(seed)生成的隨機(jī)數(shù)都是固定的,這樣每次實(shí)驗(yàn)結(jié)果顯示也就一致了,其函數(shù)定義如下:torch.manual_seed(seed)使用該函數(shù)生成隨機(jī)數(shù),示例代碼如下:importtorchtorch.manual_seed(1)x=torch.rand(1,2)print(x)#tensor([[0.7576,0.2793]])3.隨機(jī)函數(shù)(2)返回隨機(jī)數(shù)種子:initial_seed()示例代碼如下:importtorchtorch.manual_seed(3)x=torch.initial_seed()print(x)#32.3PyTorch基本使用2.3PyTorch基本使用2.3.1張量(1)初始化張量(2)張量的相關(guān)屬性(3)張量的操作(4)張量與numpy(5)單元素張量2.3.2數(shù)學(xué)運(yùn)算(1)矩陣相加(2)矩陣相乘(3)矩陣對(duì)應(yīng)元素相乘(4)絕對(duì)值函數(shù)(5)就地操作2.3.3數(shù)理統(tǒng)計(jì)1.統(tǒng)計(jì)函數(shù)(1)最小值(2)最大值(3)中位數(shù)(4)平均值(5)標(biāo)準(zhǔn)差(6)方差(7)眾數(shù)(8)分位數(shù)(9)

溫馨提示

  • 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)論