本章節主要講述如何利用python和pytorch來讀取csv文件;
主要重點在於以下幾個:
1.如何讀取csv文件;
2.關於切片問題;
3.如何從單值target來構建one-hot target;
4.關於高級索引的問題;
5.各種均值和方差函數的使用;
一、CSV文件讀取:
關於csv文件讀取,可以直接采用numpy或者python中的csv文件包進行讀取;
值得注意的是loadtxt函數中的四個參數:
1.指定文件路徑;
2.指定文件讀取的值類型;
3.指定數據分隔符(也就是每一行每一項的分隔符);
4.指定從第幾行開始讀取;
二、關於切片問題:
切片問題還是老生常談,對於本例子中給出的數據,最后一列是標簽,所以必須要對data和target進行分開提取;
其中使用.long()函數來進行轉換,把標簽從浮點轉化為整形數據;
三、one-hot標簽的問題:
對於不少集合中,多以連續數值標簽作為類別,例如0-9代表不同的十類,但是對於類別標簽,也往往需要轉換為one-hot編碼;
對於target,是tensor(4898,1)形式的張量,由於是十類,所以one-hot標簽應該為(4898,10)形式;
而后使用scatter_在target_onehot上直接進行更改;
其中值得注意的是其三個參數:
1.指出修改的是哪一個維度(由於本例子是二維數組,修改的是列,所以應該是1而非0);
2.注意一下unsqueeze()函數;
unsqueeze函數:
旨在進行維度擴充,如下所示:
相當於新增維度,直接總1維向量變為2維向量,盡管二維中只有一個元素;
3.指出填充的數字,one-hot直接填充1即可;
所以總而言之,是scatter_目的就是在某一維度,根據對應維度的索引,填入對應的值;
當時有疑惑為什么要用unsqueeze來填充維度,本質是因為one-hot是填充列元素,也是第二維,所以需要坐標指示,而利用unsqueeze可以直接選取第二維中的值作為填充的索引,直接填入即可;
所以,要填充幾維,就要擴充到幾維,對應的維度內的值即為填充索引;
四、高級索引問題:
從來沒見過的操作;
torch.le返回一個bool列表,對target內指定的值進行判斷,符合為true,不符合為false;
高級索引可以直接根據想同維度的bool值來進行選取,如果是true選取對應維度數據,false則跳過,這也是自己沒見過的騷操作;
五、各種方差均值函數的運用:
主要采用torch.mean()或者torch.var()來進行,注意使用dim的時候:
dim=0,按照列求均值;
dim=1,按照行求均值;
返回的維度和行或者列維度相同;