赞
踩
简单来说,TensorDataset
与DataLoader
这两个类的作用, 就是将数据读入并做整合,以便交给模型处理。就像石油加工厂一样,你不关心石油是如何采集与加工的,你关心的是自己去哪加油,油价是多少,对于一个模型而言,DataLoader就是这样的一个予取予求的数据服务商。
参考文章或视频链接 |
---|
[1] How to use TensorDataset, Dataloader (pytorch) |
# coding:utf-8 # @Time: 2024/1/23 上午9:57 # @Author: 键盘国治理专家 # @File: __init__.py.py # @Description: import numpy as np import torch from torch.utils.data import TensorDataset from torch.utils.data import DataLoader def test_TensorDataset(): input = np.random.rand(4, 2) # Input data correct = np.random.rand(4, 1) # Correct answer data input = torch.FloatTensor(input) # Change to an array that can be handled by pytorch correct = torch.FloatTensor(correct) # Same as above print(input) print(correct) dataset = TensorDataset(input, correct) # set the data,注意,是TensorDataset而不是Dataset,Dataset是个abstract class不能实例化 print(dataset) # 打印地址 print(vars(dataset)) # vars prints the contents of the object return dataset def test_DataLoader(dataset): train_load = DataLoader(dataset, batch_size=3, shuffle=False) # Data shuffle with shuffle=True for x, t in train_load: print('x-->', x) print('t-->', t) if __name__ == '__main__': dataset = test_TensorDataset() print("========================================================================================") test_DataLoader(dataset)
一般说来,大部分Kaggle比赛的数据都是以.csv
为格式的,而Pytorch处理的是tensor
张量,所以我们要了解如何将.csv
文件的数据变成tensor
张量数据。
""" 步骤如下 (1) xx.csv --> 经由pandas 变成 numpy 数组 (2) numpy 变成 tensor 张量 (3) tensor张量经过TensorDataset的组合 (4) dataset再经过DataLoader的处理,进而保证数据可用,以上为清洗过程 .csv --> numpy --> tensor --> dataset --> dataloader 四个过程,五个数据中转形式。 """ # coding:utf-8 # @Time: 2024/1/23 下午1:01 # @Author: 键盘国治理专家 # @File: csv2tensor.py # @Description: import numpy import pandas as pd import numpy as np import torch import torch.nn as nn from torch.utils.data import TensorDataset from torch.utils.data import DataLoader def csv2numpy(csv_path): data = pd.read_csv(csv_path, dtype=np.float64) # numpy_data = data.iloc[:, data.columns != "xx"] # 另一种用法,data.columns != "xx" 可以过滤掉你不想读入的字段 numpy_data = data.iloc[:].values return numpy_data def numpy2tensor(numpy_data): tensor_data = torch.from_numpy(numpy_data) return tensor_data def tensor2DataLoader(tensor_data): # 一步到位,直接变成DataLoader。最简单的实现方式,这个func还有改进空间,DataSet可以接收多个tensor数据 dataset = torch.utils.data.TensorDataset(tensor_data) data_loader = torch.utils.data.DataLoader(dataset, shuffle=False) return data_loader # 你甚至可以直接将.csv处理成DataLoader了,把这几个过程简单组合下形成一个新函数 def csv2DataLoader(csv_path): numpy_data = csv2numpy(csv_path) tensor_data = numpy2tensor(numpy_data) data_loader = tensor2DataLoader(tensor_data) return data_loader if __name__ == '__main__': numpy_data = csv2numpy("./test.csv") # print(type(numpy_data)) # print(numpy_data.shape) # print(numpy_data) tensor_data = numpy2tensor(numpy_data) # print(type(tensor_data)) # print(tensor_data.shape) # print(tensor_data) data_loader = tensor2DataLoader(tensor_data) # print(type(data_loader)) # print(data_loader) # print(data_loader.dataset) # # 用遍历的方式才能输出data_loader里的数据 # for data_item in data_loader: # print('data_item-->', data_item) # # 把数据的索引也一起输出 # for i, data_item in enumerate(data_loader): # print('i', i) # print('data_item-->', data_item)
本篇工作虽然简单,但确是进阶的一个不大不小的绊脚石,功夫虽小,也不能不练。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。