pytorch 提供了一種資料處理的方式,能夠生成mini-batch的資料,在訓練和測試的時候進行多執行緒處理,加快準備資料的速度。這個函式工具是
torch.utils.data import dataset, dataloader
其中dataset是我們定義自己的多執行緒資料處理框架的父類,我們定義的框架要繼承這個類
下面簡單定義資料準備的框架吧!!!
from torch.utils.data import dataset,dataloader
class
mydataset
(dataset):
def__init__
(self, filepath, transform=none,keys = none, target_transform=none):
pass
''' 首先說明一下以上的初始化引數,filepath是資料集的路徑,transform是對源資料(features)的一些變化,target_transform是對目標資料(labels)的一些變換,keys是鍵,因為我的資料是這樣的,整體是字典格式的,每個鍵對應的值又是ndarray資料,所以我通過鍵來索引對應的值
'''def__getitem__
(self,index):
pass
def__len__
(self):
pass
接下來結合資料來解釋以下**:
class
mydataset
(dataset):
def__init__
(self, filepath, transform=none,keys = none, target_transform=none):
with open(filepath,'rb') as f:
self.data = pickle.load(f)
self.keys = keys
self.input_seq = self.data[self.keys[0]] ### 輸入序列
self.output_seq = self.data[self.keys[1]] #### 輸出序列
self.transform = transform #### 對輸入序列進行變換
self.target_transform = target_transform ###### 對輸出序列進行變換
def__getitem__
(self, index):
input_seq,output_seq = self.input_seq[index],self.output_seq[index] ## 按照索引迭代讀取內容
if self.transform is
notnone:
input_seq = self.transform(input_seq)
output_seq = self.transform(output_seq)
return input_seq,output_seq ### 直接輸出輸入序列和輸出序列
def__len__
(self):
return self.data[self.keys[0]].shape[0] ### 返回的是樣本集的大小,樣本的個數
train_data = mydataset(filepath = 'train30.pickle',keys = ['aa','bb'])
test_data = mydataset(filepath = 'test30.pickle',keys = ['aa','bb'])
train_loader = dataloader(dataset = train_data,batch_size = 32,shuffle = false)
test_loader = dataloader(dataset = test_data,batch_size = 32,shuffle = false)
可以通過呼叫train_loader和 test_loader 來調取mini-batch的資料,batch_size在train_loader和test_loader中值都已經設好了,通過以下**批量調取:
from torch.autograd import variable
for i,(input_seq,out_seq) in enumerate(train_loader):
input_seq = variable(input_seq.cuda())
output_seq = variable(output_seq.cuda())
自定義資料屬性
設定自定義屬性 第一種方式 元素物件.屬性名 屬性值,原理 向物件對應的堆記憶體中新增了乙個屬性 var btnlist document.queryselectorall button for var i 0 i 第二種方式 基於h5的新語法,為元素新增屬性,以data 開,可以通過dataset...
自定義 如何自定義協議
何為自定義協議,其實是相對標準協議來說的,這裡主要針對的是應用層協議 常見的標準的應用層協議如http ftp smtp等,如果我們在網路通訊的過程中不去使用這些標準協議,那就需要自定義協議,比如我們常用的rpc框架 dubbo,thrift 分布式快取 redis,memcached 等都是自定義...
自定義控制項 自定義鐘錶
private context mcontext 畫筆 private paint mpaint 控制項的寬 private int mwidth x方向的圓心座標 private int center 鐘錶的半徑 private int mradio 圓環的寬 private int stroke...