【Pytorch神经网络基础理论篇】 03 数据操作 + 数据预处理
生活随笔
收集整理的這篇文章主要介紹了
【Pytorch神经网络基础理论篇】 03 数据操作 + 数据预处理
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?
1.數組樣例
?2.數據操作(代碼實現與結果截圖)
#首先導入torch,雖然被稱為pytorch,但是我們應該導入torch而不是pytorch import torch #張量表示一個數值組成的數組,這個數字可能有多個維度 #這個行向量包含從0開始的前12個整數,默認創建為浮點數。張量中的每個值都稱為張量的元素(element)。 #例如,張量x中有12個元素。除非額外指定,否則新的張量將存儲在內存中,并采用基于CPU的計算。 x=torch.arange(12)x x.shape() #shape不是函數哦 #通過張量的shape屬性來訪問張量的形狀 (沿每個軸的長度) x.shape x.numel() #x的總數 #要改變一個張量的形狀,而不改變元素的數量和元素值,我們可以調用reshape() #注意,通過改變張量的形狀,張量的大小不會改變。 x = x.reshape(3,4) x#不需要通過手動指定每個維度來改變形狀。 #如果我們的目標形狀是(高度,寬度),那么在知道寬度后,高度應當會隱式得出,我們不必自己做除法。在上面的例子中,為了獲得一個3行的矩陣,我們手動指定了它有3行和4列。幸運的是,張量在給出其他部分后可以自動計算出一個維度。 #可以通過在希望張量自動推斷的維度放置-1來調用此功能。 #即 x.reshape(-1,4) 或 x.reshape(3,-1) 等價于 x.reshape(3,4)。 #使用全0的張量 torch.zeros((2,3,4)) #使用全1的張量 torch.ones((2,3,4)) #使用包含數值的python列表給張量中的每個元素賦予確定值 torch.tensor([[2,1,4,3],[1,2,3,4],[4,3,2,1]]) #標準算數運算符可以升級為按照元素運算 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 # **運算符是求冪運算 #創建一個形狀為(3,4)的張量。其中的每個元素都從均值為0、標準差為1的標準高斯(正態)分布中隨機采樣。 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]]) #按元素的方式進行更多的計算 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按行排列 #通過邏輯運算符構建二元張量 X == Y #對于每個位置,如果X和Y在該位置相等,則新張量中相應項的值為1,這意味著邏輯語句X == Y在該位置處為真,否則該位置為0。 #對于張量中的所有元素求和會產生只有一個元素的張量 X.sum()2.1.3廣播機制
在某些情況下,即使形狀不同,我們仍然可以通過調用廣播機制(broadcasting mechanism)來執行按元素操作。這種機制的工作方式如下:首先,通過適當復制元素來擴展一個或兩個數組,以便在轉換之后,兩個張量具有相同的形狀。其次,對生成的數組執行按元素操作。
#形狀不同 張量會進行廣播機制 a = torch.arange(3).reshape((3,1)) b = torch.arange(2).reshape((1,2)) a,b #廣播機制 #由于a和b分別是 3×1 和 1×2 矩陣,如果我們讓它們相加,它們的形狀不匹配。我們將兩個矩陣廣播為一個更大的 3×2 矩陣,如下所示:矩陣a將復制列,矩陣b將復制行,然后再按元素相加。 a + b #[-1]選擇最后一個元素,[1:3]選擇第二個和第三個元素 X[-1],X[1:9] #1到9 但是最多有2行所以就顯示了第1行和第2行 #通過指定索引來將元素寫入矩陣 X[1,2]=9 X #為多個元素賦相同的值 X[0:2,:] =12 #將0至2行,全部賦值為12 X #運行一些操作可能會為新結果分配內存 before = id(Y) Y = X + Y id(Y) == before #執行原地操作 內存沒有變化 Z = torch.zeros_like(Y) print('id(Z)',id(Z)) Z[:] = X + Y print('id(Z)',id(Z)) #如果后續計算中沒有重復使用x,我們可以使用x[:]=X+Y 或者 x+=y來減少操作的內存開銷 before = id(X) X += Y #+=的本質是調用append() id(X) == before A = X.numpy() #轉化為numpy張量 B = torch.tensor(A) type(A),type(B) a = torch.tensor([3.5])#將大小為1的張量轉化為python的標量 a,a.item(),float(a),int(a)3.csv的讀取(代碼實現與結果截圖)
我們將簡要介紹使用pandas預處理原始數據并將原始數據轉換為張量格式的步驟。我們將在后面的章節中介紹更多的數據預處理技術。
import os #創建一個人工數據集并且存儲在csv(逗號分割值)的文件中 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 #從創建的csv文件中加載原始數據集 data = pd.read_csv(data_file) print(data) data #注意,“NaN”項代表缺失值。為了處理缺失的數據,典型的方法包括插值和刪除,其中插值用替代值代替缺失值。而刪除則忽略缺失值。在這里,我們將考慮插值。#通過位置索引iloc,我們將data分成inputs和outputs,其中前者為data的前兩列,而后者為data的最后一列。對于inputs中缺少的數值,我們用同一列的均值替換“NaN”項。 inputs,outputs = data.iloc[:,0:2],data.iloc[:,2] inputs = inputs.fillna(inputs.mean()) #在缺失數據處 添加平均值 print(inputs)?
#對于inputs中的類別值或離散值,我們將NaN視為一個類別 inputs = pd.get_dummies(inputs,dummy_na=True) #按類分 print(inputs)?
import torch X, y = torch.tensor(inputs.values),torch.tensor(outputs.values) X, y3.QA
1. b=a.reshape 并沒有申請新的內存空間
?
2.學習一下numpy
3.快速區分維度:a.shape
4.視頻筆記截圖
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
總結
以上是生活随笔為你收集整理的【Pytorch神经网络基础理论篇】 03 数据操作 + 数据预处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IDEA实时编译配置流程
- 下一篇: 【Pytorch神经网络实战案例】22