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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

【Pytorch神经网络基础理论篇】 03 数据操作 + 数据预处理

發(fā)布時(shí)間:2024/7/5 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Pytorch神经网络基础理论篇】 03 数据操作 + 数据预处理 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?

1.數(shù)組樣例

?2.數(shù)據(jù)操作(代碼實(shí)現(xiàn)與結(jié)果截圖)

#首先導(dǎo)入torch,雖然被稱為pytorch,但是我們應(yīng)該導(dǎo)入torch而不是pytorch import torch #張量表示一個(gè)數(shù)值組成的數(shù)組,這個(gè)數(shù)字可能有多個(gè)維度 #這個(gè)行向量包含從0開(kāi)始的前12個(gè)整數(shù),默認(rèn)創(chuàng)建為浮點(diǎn)數(shù)。張量中的每個(gè)值都稱為張量的元素(element)。 #例如,張量x中有12個(gè)元素。除非額外指定,否則新的張量將存儲(chǔ)在內(nèi)存中,并采用基于CPU的計(jì)算。 x=torch.arange(12)x

x.shape() #shape不是函數(shù)哦

#通過(guò)張量的shape屬性來(lái)訪問(wèn)張量的形狀 (沿每個(gè)軸的長(zhǎng)度) x.shape

x.numel() #x的總數(shù)

#要改變一個(gè)張量的形狀,而不改變?cè)氐臄?shù)量和元素值,我們可以調(diào)用reshape() #注意,通過(guò)改變張量的形狀,張量的大小不會(huì)改變。 x = x.reshape(3,4) x#不需要通過(guò)手動(dòng)指定每個(gè)維度來(lái)改變形狀。 #如果我們的目標(biāo)形狀是(高度,寬度),那么在知道寬度后,高度應(yīng)當(dāng)會(huì)隱式得出,我們不必自己做除法。在上面的例子中,為了獲得一個(gè)3行的矩陣,我們手動(dòng)指定了它有3行和4列。幸運(yùn)的是,張量在給出其他部分后可以自動(dòng)計(jì)算出一個(gè)維度。 #可以通過(guò)在希望張量自動(dòng)推斷的維度放置-1來(lái)調(diào)用此功能。 #即 x.reshape(-1,4) 或 x.reshape(3,-1) 等價(jià)于 x.reshape(3,4)。

#使用全0的張量 torch.zeros((2,3,4))

#使用全1的張量 torch.ones((2,3,4))

#使用包含數(shù)值的python列表給張量中的每個(gè)元素賦予確定值 torch.tensor([[2,1,4,3],[1,2,3,4],[4,3,2,1]])

#標(biāo)準(zhǔn)算數(shù)運(yùn)算符可以升級(jí)為按照元素運(yùn)算 x = torch.tensor([1.0,2,4,8]) y = torch.tensor([2,2,2,2]) x + y,x - y,x * y,x / y, x**y # **運(yùn)算符是求冪運(yùn)算

#創(chuàng)建一個(gè)形狀為(3,4)的張量。其中的每個(gè)元素都從均值為0、標(biāo)準(zhǔn)差為1的標(biāo)準(zhǔn)高斯(正態(tài))分布中隨機(jī)采樣。 torch.randn(3, 4) tensor([[-0.9464, 0.7712, -0.0070, 1.0236],[-2.1246, -0.7854, -1.9674, -0.1727],[ 0.0397, -0.0477, -0.0160, -0.0113]]) #按元素的方式進(jìn)行更多的計(jì)算 torch.exp(x)

X = torch.arange(12, dtype=torch.float32).reshape((3,4)) Y = torch.tensor([[2.0,1,4,3],[1,2,3,4],[4,3,2,1]]) torch.cat((X,Y),dim=0), torch.cat((X,Y),dim=1) #dim=0按列排列 #dim=1按行排列

#通過(guò)邏輯運(yùn)算符構(gòu)建二元張量 X == Y #對(duì)于每個(gè)位置,如果X和Y在該位置相等,則新張量中相應(yīng)項(xiàng)的值為1,這意味著邏輯語(yǔ)句X == Y在該位置處為真,否則該位置為0。

#對(duì)于張量中的所有元素求和會(huì)產(chǎn)生只有一個(gè)元素的張量 X.sum()

2.1.3廣播機(jī)制

在某些情況下,即使形狀不同,我們?nèi)匀豢梢酝ㄟ^(guò)調(diào)用廣播機(jī)制(broadcasting mechanism)來(lái)執(zhí)行按元素操作。這種機(jī)制的工作方式如下:首先,通過(guò)適當(dāng)復(fù)制元素來(lái)擴(kuò)展一個(gè)或兩個(gè)數(shù)組,以便在轉(zhuǎn)換之后,兩個(gè)張量具有相同的形狀。其次,對(duì)生成的數(shù)組執(zhí)行按元素操作。

#形狀不同 張量會(huì)進(jìn)行廣播機(jī)制 a = torch.arange(3).reshape((3,1)) b = torch.arange(2).reshape((1,2)) a,b #廣播機(jī)制

#由于a和b分別是 3×1 和 1×2 矩陣,如果我們讓它們相加,它們的形狀不匹配。我們將兩個(gè)矩陣廣播為一個(gè)更大的 3×2 矩陣,如下所示:矩陣a將復(fù)制列,矩陣b將復(fù)制行,然后再按元素相加。 a + b

#[-1]選擇最后一個(gè)元素,[1:3]選擇第二個(gè)和第三個(gè)元素 X[-1],X[1:9] #1到9 但是最多有2行所以就顯示了第1行和第2行

#通過(guò)指定索引來(lái)將元素寫入矩陣 X[1,2]=9 X

#為多個(gè)元素賦相同的值 X[0:2,:] =12 #將0至2行,全部賦值為12 X

#運(yùn)行一些操作可能會(huì)為新結(jié)果分配內(nèi)存 before = id(Y) Y = X + Y id(Y) == before

#執(zhí)行原地操作 內(nèi)存沒(méi)有變化 Z = torch.zeros_like(Y) print('id(Z)',id(Z)) Z[:] = X + Y print('id(Z)',id(Z))

#如果后續(xù)計(jì)算中沒(méi)有重復(fù)使用x,我們可以使用x[:]=X+Y 或者 x+=y來(lái)減少操作的內(nèi)存開(kāi)銷 before = id(X) X += Y #+=的本質(zhì)是調(diào)用append() id(X) == before

A = X.numpy() #轉(zhuǎn)化為numpy張量 B = torch.tensor(A) type(A),type(B)

a = torch.tensor([3.5])#將大小為1的張量轉(zhuǎn)化為python的標(biāo)量 a,a.item(),float(a),int(a)

3.csv的讀取(代碼實(shí)現(xiàn)與結(jié)果截圖)

我們將簡(jiǎn)要介紹使用pandas預(yù)處理原始數(shù)據(jù)并將原始數(shù)據(jù)轉(zhuǎn)換為張量格式的步驟。我們將在后面的章節(jié)中介紹更多的數(shù)據(jù)預(yù)處理技術(shù)。

import os #創(chuàng)建一個(gè)人工數(shù)據(jù)集并且存儲(chǔ)在csv(逗號(hào)分割值)的文件中 os.makedirs(os.path.join('..','data'),exist_ok=True) data_file = os.path.join('..','data','house_tiny.csv') with open(data_file,'w') as f:f.write('NumRooms,Alley,Price\n') # 列名f.write('NA,Pave,127500\n') # 第1行的值f.write('2,NA,106000\n') # 第2行的值f.write('4,NA,178100\n') # 第3行的值f.write('NA,NA,140000\n') # 第4行的值

import pandas as pd #從創(chuàng)建的csv文件中加載原始數(shù)據(jù)集 data = pd.read_csv(data_file) print(data)

data

#注意,“NaN”項(xiàng)代表缺失值。為了處理缺失的數(shù)據(jù),典型的方法包括插值和刪除,其中插值用替代值代替缺失值。而刪除則忽略缺失值。在這里,我們將考慮插值。#通過(guò)位置索引iloc,我們將data分成inputs和outputs,其中前者為data的前兩列,而后者為data的最后一列。對(duì)于inputs中缺少的數(shù)值,我們用同一列的均值替換“NaN”項(xiàng)。 inputs,outputs = data.iloc[:,0:2],data.iloc[:,2] inputs = inputs.fillna(inputs.mean()) #在缺失數(shù)據(jù)處 添加平均值 print(inputs)

?

#對(duì)于inputs中的類別值或離散值,我們將NaN視為一個(gè)類別 inputs = pd.get_dummies(inputs,dummy_na=True) #按類分 print(inputs)

?

import torch X, y = torch.tensor(inputs.values),torch.tensor(outputs.values) X, y

3.QA

1. b=a.reshape 并沒(méi)有申請(qǐng)新的內(nèi)存空間
?

2.學(xué)習(xí)一下numpy

3.快速區(qū)分維度:a.shape


4.視頻筆記截圖

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

總結(jié)

以上是生活随笔為你收集整理的【Pytorch神经网络基础理论篇】 03 数据操作 + 数据预处理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。