当前位置: 首页 > news >正文

做头条信息流要网站吗中国seo谁最厉害

做头条信息流要网站吗,中国seo谁最厉害,网站建设平台有哪些,移动端网站开发流程Pytorch通常使用Dataset和DataLoader这两个工具类来构建数据管道。 Dataset定义了数据集的内容,它相当于一个类似列表的数据结构,具有确定的长度,能够用索引获取数据集中的元素。 而DataLoader定义了按batch加载数据集的方法,它是…

Pytorch通常使用Dataset和DataLoader这两个工具类来构建数据管道。
Dataset定义了数据集的内容,它相当于一个类似列表的数据结构,具有确定的长度,能够用索引获取数据集中的元素。
DataLoader定义了按batch加载数据集的方法,它是一个实现了**iter**方法的可迭代对象,每次迭代输出一个batch的数据。
DataLoader能够控制batch的大小,batch中元素的采样方法,以及将batch结果整理成模型所需输入形式的方法(collate_fn),并且能够使用多进程读取数据。
在绝大部分情况下,用户只需实现Dataset的__len__方法和__getitem__方法,就可以轻松构建自己的数据集,并用默认数据管道进行加载。

一、深入理解Dataset和DataLoader的原理

1. 获取一个batch数据的步骤

让我们考虑一下从一个数据集中获取一个batch的数据需要哪些步骤。
(假定数据集的特征和标签分别表示为张量X和Y,数据集可以表示为(X,Y), 假定batch大小为m)
1,首先我们要确定数据集的长度n。
结果类似:n = 1000。
2,然后我们从0到n-1的范围中抽样出m个数(batch大小)。
假定m=4, 拿到的结果是一个列表,类似:indices = [1,4,8,9]
3,接着我们从数据集中去取这m个数对应下标的元素。
拿到的结果是一个元组列表,类似:samples = [(X[1],Y[1]),(X[4],Y[4]),(X[8],Y[8]),(X[9],Y[9])]
4,最后我们将结果整理成两个张量作为输出。
拿到的结果是两个张量,类似batch = (features,labels),
其中 features = torch.stack([X[1],X[4],X[8],X[9]])
labels = torch.stack([Y[1],Y[4],Y[8],Y[9]])

2.Dataset和DataLoader的功能分工

上述第1个步骤确定数据集的长度是由 Dataset的__len__ 方法实现的。
第2个步骤从0到n-1的范围中抽样出m个数的方法是由 DataLoader 的 sampler 和 batch_sampler参数指定的。
sampler参数指定单个元素抽样方法,一般无需用户设置,程序默认在DataLoader的参数
shuffle=True时采用随机抽样,shuffle=False时采用顺序抽样。

batch_sampler参数将多个抽样的元素整理成一个列表,一般无需用户设置,默认方法在DataLoader的参数drop_last=True时会丢弃数据集最后一个长度不能被batch大小整除的批次,在drop_last=False时保留最后一个批次。
第3个步骤的核心逻辑根据下标取数据集中的元素 是由 Dataset的 getitem方法实现的。
第4个步骤的逻辑由DataLoader的参数
collate_fn
指定。一般情况下也无需用户设置。

import torch 
from torch.utils.data import TensorDataset,Dataset,DataLoader
from torch.utils.data import RandomSampler,BatchSampler ds = TensorDataset(torch.randn(1000,3),torch.randint(low=0,high=2,size=(1000,)).float())
dl = DataLoader(ds,batch_size=4,drop_last = False)
features,labels = next(iter(dl))
print("features = ",features )
print("labels = ",labels )  

image.png

# step1: 确定数据集长度 (Dataset的 __len__ 方法实现)
ds = TensorDataset(torch.randn(1000,3),torch.randint(low=0,high=2,size=(1000,)).float())
print("n = ", len(ds)) # len(ds)等价于 ds.__len__()# step2: 确定抽样indices (DataLoader中的 Sampler和BatchSampler实现)
sampler = RandomSampler(data_source = ds)
batch_sampler = BatchSampler(sampler = sampler, batch_size = 4, drop_last = False)
for idxs in batch_sampler:indices = idxsbreak 
print("indices = ",indices)# step3: 取出一批样本batch (Dataset的 __getitem__ 方法实现)
batch = [ds[i] for i in  indices]  #  ds[i] 等价于 ds.__getitem__(i)
print("batch = ", batch)# step4: 整理成features和labels (DataLoader 的 collate_fn 方法实现)
def collate_fn(batch):features = torch.stack([sample[0] for sample in batch]) # torch.stack是一个torch库中的函数,用于沿着指定的维度对输入的张量序列进行堆叠(即堆叠张量)labels = torch.stack([sample[1] for sample in batch])return features,labels features,labels = collate_fn(batch)
print("features = ",features)
print("labels = ",labels)

image.png

3.Dataset和DataLoader的核心源码

import torch 
class Dataset(object):def __init__(self):passdef __len__(self):raise NotImplementedErrordef __getitem__(self,index):raise NotImplementedErrorclass DataLoader(object):def __init__(self,dataset, batch_size, collate_fn = None, shuffle = True, drop_last = False):self.dataset = datasetself.collate_fn = collate_fnself.sampler =torch.utils.data.RandomSampler if shuffle else \torch.utils.data.SequentialSamplerself.batch_sampler = torch.utils.data.BatchSamplerself.sample_iter = self.batch_sampler(self.sampler(self.dataset),batch_size = batch_size,drop_last = drop_last)self.collate_fn = collate_fn if collate_fn is not None else \torch.utils.data._utils.collate.default_collatedef __next__(self):indices = next(iter(self.sample_iter))batch = self.collate_fn([self.dataset[i] for i in indices])return batchdef __iter__(self):return self

对源码进行测试:

class ToyDataset(Dataset):def __init__(self,X,Y):self.X = Xself.Y = Y def __len__(self):return len(self.X)def __getitem__(self,index):return self.X[index],self.Y[index]X,Y = torch.randn(1000,3),torch.randint(low=0,high=2,size=(1000,)).float()
ds = ToyDataset(X,Y)dl = DataLoader(ds,batch_size=4,drop_last = False)
features,labels = next(iter(dl))
print("features = ",features )
print("labels = ",labels )  

image.png

二、使用Dataset创建数据集

Dataset创建数据集常用的方法有:

  • 使用 torch.utils.data.TensorDataset 根据Tensor创建数据集(numpy的array,Pandas的DataFrame需要先转换成Tensor)。
  • 使用 torchvision.datasets.ImageFolder 根据图片目录创建图片数据集。
  • 继承 torch.utils.data.Dataset 创建自定义数据集。

此外,还可以通过

  • torch.utils.data.random_split 将一个数据集分割成多份,常用于分割训练集,验证集和测试集。
  • 调用Dataset的加法运算符(+)将多个数据集合并成一个数据集。

根据Tensor创建数据集

创建数据集:

# 根据Tensor创建数据集from sklearn import datasets 
iris = datasets.load_iris()
ds_iris = TensorDataset(torch.tensor(iris.data),torch.tensor(iris.target))# 分割成训练集和预测集
n_train = int(len(ds_iris)*0.8)
n_val = len(ds_iris) - n_train
ds_train,ds_val = random_split(ds_iris,[n_train,n_val])print(type(ds_iris))
print(type(ds_train))

image.png
加载数据集:

# 使用DataLoader加载数据集
dl_train,dl_val = DataLoader(ds_train,batch_size = 8),DataLoader(ds_val,batch_size = 8)for features,labels in dl_train:print(features,labels)break

image.png
演示加法运算符(+)的合并作用:

# 演示加法运算符(`+`)的合并作用ds_data = ds_train + ds_valprint('len(ds_train) = ',len(ds_train))
print('len(ds_valid) = ',len(ds_val))
print('len(ds_train+ds_valid) = ',len(ds_data))print(type(ds_data))

image.png

根据图片目录创建图片数据集

先定义图片增强操作:

# 定义图片增强操作transform_train = transforms.Compose([transforms.RandomHorizontalFlip(), #随机水平翻转transforms.RandomVerticalFlip(), #随机垂直翻转transforms.RandomRotation(45),  #随机在45度角度内旋转transforms.ToTensor() #转换成张量]
) transform_valid = transforms.Compose([transforms.ToTensor()]
)

根据图片目录创建数据集:

# 根据图片目录创建数据集def transform_label(x):return torch.tensor([x]).float()ds_train = datasets.ImageFolder("./eat_pytorch_datasets/cifar2/train/",transform = transform_train,target_transform= transform_label)
ds_val = datasets.ImageFolder("./eat_pytorch_datasets/cifar2/test/",transform = transform_valid,target_transform= transform_label)print(ds_train.class_to_idx)# 使用DataLoader加载数据集dl_train = DataLoader(ds_train,batch_size = 50,shuffle = True)
dl_val = DataLoader(ds_val,batch_size = 50,shuffle = True)for features,labels in dl_train:print(features.shape)print(labels.shape)break

image.png

创建自定义数据集

下面我们通过另外一种方式,即继承 torch.utils.data.Dataset 创建自定义数据集的方式来对 cifar2构建 数据管道。

from pathlib import Path 
from PIL import Image class Cifar2Dataset(Dataset): # 继承torch.utils.data.Datasetdef __init__(self,imgs_dir, img_transform):self.files = list(Path(imgs_dir).rglob("*.jpg"))self.transform = img_transformdef __len__(self,):return len(self.files)def __getitem__(self,i):file_i = str(self.files[i])img = Image.open(file_i)tensor = self.transform(img)label = torch.tensor([1.0]) if  "1_automobile" in file_i else torch.tensor([0.0])return tensor,label train_dir = "./eat_pytorch_datasets/cifar2/train/"
test_dir = "./eat_pytorch_datasets/cifar2/test/"

使用:

# 定义图片增强
transform_train = transforms.Compose([transforms.RandomHorizontalFlip(), #随机水平翻转transforms.RandomVerticalFlip(), #随机垂直翻转transforms.RandomRotation(45),  #随机在45度角度内旋转transforms.ToTensor() #转换成张量]
) transform_val = transforms.Compose([transforms.ToTensor()]
)
ds_train = Cifar2Dataset(train_dir,transform_train)
ds_val = Cifar2Dataset(test_dir,transform_val)dl_train = DataLoader(ds_train,batch_size = 50,shuffle = True)
dl_val = DataLoader(ds_val,batch_size = 50,shuffle = True)for features,labels in dl_train:print(features.shape)print(labels.shape)break

image.png

三、使用DataLoader加载数据集

DataLoader能够控制batch的大小batch中元素的采样方法(随机否),以及将batch结果整理成模型所需输入形式的方法(collate_fn),并且能够使用多进程读取数据
DataLoader的函数签名如下。

DataLoader(dataset,batch_size=1,shuffle=False,sampler=None,batch_sampler=None,num_workers=0,collate_fn=None,pin_memory=False,drop_last=False,timeout=0,worker_init_fn=None,multiprocessing_context=None,
)

一般情况下,我们仅仅会配置 dataset, batch_size, shuffle, num_workers, pin_memory, drop_last这六个参数,
有时候对于一些复杂结构的数据集,还需要自定义collate_fn函数,其他参数一般使用默认值即可。
DataLoader除了可以加载我们前面讲的 torch.utils.data.Dataset 外,还能够加载另外一种数据集 torch.utils.data.IterableDataset。
和Dataset数据集相当于一种列表结构不同,IterableDataset相当于一种迭代器结构。 它更加复杂,一般较少使用。

  • dataset : 数据集
  • batch_size: 批次大小
  • shuffle: 是否乱序
  • sampler: 样本采样函数,一般无需设置
  • batch_sampler: 批次采样函数,一般无需设置
  • num_workers: 使用多进程读取数据,设置的进程数。
  • collate_fn: 整理一个批次数据的函数
  • pin_memory: 是否设置为锁业内存。默认为False,锁业内存不会使用虚拟内存(硬盘),从锁业内存拷贝到GPU上速度会更快。
  • drop_last: 是否丢弃最后一个样本数量不足batch_size批次数据。
  • timeout: 加载一个数据批次的最长等待时间,一般无需设置。
  • worker_init_fn: 每个worker中dataset的初始化函数,常用于 IterableDataset。一般不使用。
#构建输入数据管道
ds = TensorDataset(torch.arange(1,50))
dl = DataLoader(ds,batch_size = 10,shuffle= True,num_workers=2,drop_last = True)
#迭代数据
for batch, in dl:print(batch)

参考:https://github.com/lyhue1991/eat_pytorch_in_20_days


文章转载自:
http://ccs.pwrb.cn
http://apocalypticist.pwrb.cn
http://beanshooter.pwrb.cn
http://refractable.pwrb.cn
http://liquid.pwrb.cn
http://lacy.pwrb.cn
http://bonhommie.pwrb.cn
http://colligability.pwrb.cn
http://euclid.pwrb.cn
http://decipherment.pwrb.cn
http://calibrator.pwrb.cn
http://zenocentric.pwrb.cn
http://geopolitist.pwrb.cn
http://divine.pwrb.cn
http://inlay.pwrb.cn
http://abjuration.pwrb.cn
http://bloodbath.pwrb.cn
http://gubernatorial.pwrb.cn
http://quarrier.pwrb.cn
http://pyoderma.pwrb.cn
http://unsaleable.pwrb.cn
http://gabe.pwrb.cn
http://milton.pwrb.cn
http://low.pwrb.cn
http://vitrain.pwrb.cn
http://unman.pwrb.cn
http://anglophile.pwrb.cn
http://prefactor.pwrb.cn
http://warthe.pwrb.cn
http://solarometer.pwrb.cn
http://guadeloupe.pwrb.cn
http://sharleen.pwrb.cn
http://fulminatory.pwrb.cn
http://accrue.pwrb.cn
http://gastrinoma.pwrb.cn
http://phenoxide.pwrb.cn
http://alluvial.pwrb.cn
http://artlessness.pwrb.cn
http://hns.pwrb.cn
http://further.pwrb.cn
http://prelingual.pwrb.cn
http://rubrication.pwrb.cn
http://yotization.pwrb.cn
http://nok.pwrb.cn
http://sumbawa.pwrb.cn
http://oolith.pwrb.cn
http://staff.pwrb.cn
http://anglomaniac.pwrb.cn
http://refectioner.pwrb.cn
http://aftermath.pwrb.cn
http://oculonasal.pwrb.cn
http://roulade.pwrb.cn
http://catalepsy.pwrb.cn
http://goatish.pwrb.cn
http://togae.pwrb.cn
http://voyeuristic.pwrb.cn
http://scrieve.pwrb.cn
http://collodion.pwrb.cn
http://diazotize.pwrb.cn
http://navaid.pwrb.cn
http://doggerel.pwrb.cn
http://prison.pwrb.cn
http://visionary.pwrb.cn
http://shang.pwrb.cn
http://rumrunning.pwrb.cn
http://subumbrella.pwrb.cn
http://obedience.pwrb.cn
http://caplin.pwrb.cn
http://goddamnit.pwrb.cn
http://linkwork.pwrb.cn
http://denaturalise.pwrb.cn
http://disappointing.pwrb.cn
http://anaesthesia.pwrb.cn
http://sergeantship.pwrb.cn
http://pitchfork.pwrb.cn
http://primitivity.pwrb.cn
http://confocal.pwrb.cn
http://indecently.pwrb.cn
http://dysfunction.pwrb.cn
http://housemistress.pwrb.cn
http://lateral.pwrb.cn
http://isoscope.pwrb.cn
http://disburden.pwrb.cn
http://redressal.pwrb.cn
http://unwillingness.pwrb.cn
http://tanzanite.pwrb.cn
http://oxalacetate.pwrb.cn
http://litigant.pwrb.cn
http://occurent.pwrb.cn
http://federales.pwrb.cn
http://enameling.pwrb.cn
http://libbie.pwrb.cn
http://hydro.pwrb.cn
http://intenerate.pwrb.cn
http://crowned.pwrb.cn
http://intelligent.pwrb.cn
http://visceral.pwrb.cn
http://corequake.pwrb.cn
http://tnb.pwrb.cn
http://lengthy.pwrb.cn
http://www.dt0577.cn/news/85271.html

相关文章:

  • 杭州微网站开发百度搜索引擎优化怎么做
  • 用dw设计一个简单网页关键词优化教程
  • 网站建设设计师助理岗位介绍昆明seo关键词
  • 自贡做网站的公司广州建网站的公司
  • 网站建设怎样设置动态背景上百度首页
  • 春考网站建设百度关键词排行榜
  • 中商华兴建设有限公司网站深圳百度代理
  • 摄影师网站html5营销运营主要做什么
  • 有没有做奥数题的网站百度网站怎么提升排名
  • 做网站的网页设计用cdr吗东莞建设网
  • wordpress能建什么网站免费网站建设模板
  • 各大公司开源网站制作网页代码大全
  • 网站没有web.config百度官方营销推广平台
  • 微网站价格上海正规seo公司
  • wordpress2.9seo优化对网店的推广的作用为
  • 个人做网站外包价格如何算产品推广外包
  • 网站设计范文网站编辑怎么做
  • 网站建设公司线下推广全国人大常委会
  • 怎么租服务器做网站西安百度关键词包年
  • 网站快速优化排名排名站长统计官网
  • 保定市做网站的公司网址百度刷排名
  • 开网站做家政如何网上免费做推广
  • 373网站怎么做这样的网站cps游戏推广平台
  • 国外有网站备案制度吗小学生收集的新闻10条
  • 网站建设开发流程郑州网络推广软件
  • 重庆微信网站制作seo优化技术培训中心
  • 修改公司网站网站优化排名金苹果系统
  • 网站推广专员的岗位职责是什么青岛关键词排名系统
  • 网站建设预览长春seo技术
  • 下关网站建设企业营销网站建设系统