一文总结深度学习框架-Pytorch

1 Pytorch简介

Pytorch是Facebook人工智能研究院基于Torch开发的一个开源的Python机器学习库,它提供了两项强大的功能:1、强大的GPU加速的张量计算(NumPy)。2、自动求导系统的深度神经网络。

Tensorflow是纯符号式编程,运行效率高,但实现复杂;Pytorch是命令式编程,实现方便,但运行效率低。

[TOC]

2 Pytorch总览

image.png

3 Pytorch详解

3.1 torch

image.png
  • 张量
函数 函数功能
torch.is_tensor(obj) 判断obj是否为tensor数据类型
torch.is_storage(obj) 判断obj是否为storage类型
torch.set_default_tensor_type(type) 设置默认的tensor数据类型
torch.set_printoptions(precision=None,threshold=None,linewidth=None,profile=None) 设置打印格式
  • 创建操作
函数 函数功能
torch.eye(n,m=None,out=None) 创建主对角矩阵
torch.from_numpy(ndarray) 将numpy.ndarray转换为Tensor
torch.linspace(start,end,steps=100,out=None) 创建含steps个元素的一维张量
torch.logspace(start,end,steps=100,out=None) 创建位于10start-10end内的一维张量
torch.zeros(*sizes,out=None) 创建全0张量
torch.ones(*sizes,out=None) 创建全1张量
torch.rand(*sizes,out=None) 创建位于0-1的均匀分布的张量
torch.randn(*sizes,out=None) 从标准正态分布中抽取数据创建张量
torch.arange(start,end,step=1,out=None) 创建一维张量
  • 索引、切片、连接、换位
函数 函数功能
torch.cat(inputs,dimension=0) 在给定维度上对inputs进行拼接
torch.chunk(tensor,chunks,dim=0) 在给定维度上对tensor进行分块
torch.split(tensor,split_size,dim=0) 在给定维度上对tensor进行分块
torch.squeeze(input,dim=None,out=None) 去除输入张量形状中的1并返回
torch.stack(sequence,dim=0) 沿着新维度对输入张量序列进行拼接
torch.t(input,out=None) 对input矩阵进行装置
torch.transpose(input,dim0,dim1,out=None) 交换input的dim0与dim1
torch.unbind(tensor,dim=0) 移除指定维度,并返回一个包含了沿着指定维度切片后的各个切片
torch.sequence(input,dim,out=None) 返回一个新张量,对输入的位置插入维度1
  • 随机抽样
函数 函数功能
torch.normal(means,std,out=None) 返回一个张量,包含从给定参数means,std离散分布中抽取随机数
  • 序列化
函数 函数功能
torch.save(obj,f,pickle_moudle=<module 'pickle' from '/home/pickle.py'>,pickle_protoco1=2) 保存一个对象到一个硬盘文件上
torch.load(f,map_location=None,pickle_module=<module 'pickle' from '/home/pickle.py'>) 从磁盘文件中读取一个通过torch.save()保存的对象
  • 并行化
函数 函数功能
torch.get_num_threads() 获取用于并行化CPU操作的OpenMP线程数
torch.set_num_threads(int) 设定用于并行化CPU操作的OpenMP线程数
  • 数学操作
函数 函数功能
torch.div(input,value,out=None) 将input逐元素除以标量value
torch.exp(tensor,out=None) 计算input每个元素的指数
torch.abs(input,out=None) 计算input每个元素的绝对值
torch.sin(input,out=None) 计算每个元素的正弦值
torch.cos(input,out=None) 计算每个元素的余弦值
torch.atan(input,out=None) 计算input每个元素的反正切
torch.asin(input,out=None) 计算每个元素的反正弦
torch.acos(input,out=None) 计算每个元素的反余弦
torch.cosh(input,out=None) 计算input每个元素的双曲余弦
torch.add(input,value,out=None) 对input逐元素加上标量value
torch.addcdiv(tensor,value,tensor1,tensor2,out=None) 用tensor2对tensor1逐元素相除,乘以value并加到tensor
torch.addcmul(tensor,value,tensor1,tensor2,out=None) 用tensor2对tensor1逐元素相乘,乘以value,然后加到tensor
torch.floor(input,out=None) 对input每个元素向下取整
torch.ceil(input,out=None) 对input每个元素向上取整
torch.clamp(input,min,max,out=None) 将input每个元素夹紧至【min,max】内
torch.fmod(input,divisor,out=None) 计算input每个元素的除法余数
torch.frac(tensor,out=None) 返回每个元素的分数部分
torch.log(input,out=None) 计算log的自然对数
torch.mul(input,value,out=None) 将input逐元素乘以标量value
torch.net(input,out=None) 将input逐元素取负
torch.pow(input,exponent,out=None) 将input逐元素求exponent次幂
torch.reciprocal(input,out=None) 计算input每个元素的倒数
torch.remainder(input,divisor,out=None) 计算input每个元素的除法余数
torch.round(input,out=None) 计算input每个元素四舍五入后的值
torch.rsqrt(input,out=None) 计算input每个元素的平方根倒数
torch.sigmoid(input,out=None) 计算input每个元素的sigmoid值
torch.sign(input,out=None) 返回input每个元素的符号
torch.sqrt(input,out=None) 计算input每个元素的平方根
torch.trunc(input,out=None) 将input每个元素的小数部分截断
torch.cumprod(input,dim,out=None) 沿着dim维度计算input累积积
torch.cumsum(input,dim,out=None) 沿dim维度计算input累计和
torch.dist(input,other,p=2,out=None) 返回(input-other)的p范数
torch.mean(input) 计算input所有元素的均值
torch.mean(input,dim,out=None) 计算input指定维度所有元素的均值
torch.median(input,dim=-1,values=None,indices=None) 返回input给定维度所有元素的中位数,同时返回一个包含中位数的索引的LongTensor
torch.mode(input,dim,values=None,indices=None) 返回给定维度所有元素的众数,同时返回一个包含众数索引的LongTensor
torch.norm(input,p,dim,out=None) 返回input的p范数
torch.prod(input,dim) 返回input所有元素的积
torch.std(input,dim) 返回input所有元素的标准差
torch.sum(input,dim) 返回input所有元素的和
torch.var(input,dim) 返回input在给定维度上每个元素的方差
  • 比较操作
函数 函数功能
torch.eq(input,other,out=None) 比较input每个元素是否与other相等
torch.equal(tensor1,tensor2) 比较tensor1与tensor2是否完全相等
torch.ge(input,other,out=None) 逐元素比较input和other
torch.gt(input,other,out=None) 逐元素比较input和other
torch.kthvalue(input,k,dim=None,out=None) 取输入张量input指定维度上第K个最小值
torch.le(input,other,out=None) 逐元素比较input和other
torch.lt(input,other,out=None) 逐元素比较input和other
torch.max(input,dim) 返回input给定维度上的最大值
torch.min(input,dim) 返回input给定维度上的最小值
torch.ne(input,other) 逐元素比较input和other
torch.sort(input,dim=None,descending=False,out=None) 对输入张量input沿着指定维度按升序排序
torch.topk(input,k,dim=None,largest=True,out=None) 沿指定维度返回input中K个最大值
  • 其他操作
函数 函数功能
torch.cross(input,other,dim,out=None) 沿着指定维度计算input与other的向量积
torch.dot(tensor1,tensor2) 计算两个张量的内积
torch.eig(a,eigenvectors=False,out=None) 计算方阵a的特征值和特征向量
torch.inverse(input,out=None) 对方阵input取逆
torch.mm(mat1,mat2,out=None) 计算mat1与mat2的乘积
torch.mv(mat,vec,out=None) 计算矩阵与向量vec的乘积
torch.abs_(input) torch.abs(input)的in-place运算形式

3.2 torch.nn

image.png
  • 参数设置
函数 函数功能
torch.nn.Parameter(data,requires_grad) 将不可训练的data转换为可训练的类型parameter,并将这个parameter绑定到module内
  • torch.nn.Module基类
函数 函数功能
add_module(name,module) 将一个child module添加到当前module,可通过name属性获取module
cuda(device_id=None) 将所有模型参数复制到GPU
cpu(device_id=None) 将所有模型参数复制到CPU
double() 将parameters和buffers的数据类型转换为double
float() 将parameters和buffers的数据类型转换为float
half() 将parameters和buffers的数据类型转换为half
eval() 将模型设置成evaluation模式
forward(*input) 定义了每次执行的计算步骤,在所有子类中都需要重写这个函数
modules() 返回一个包含当前模型所有模块的迭代器
named_modules() 返回包含网络中所有模块的迭代器
children() 返回当前模型子模块的迭代器
named_children() 返回包含模型当前模块的迭代器
load_state_dict(state_dict) 加载模型参数,将state_dict中的parameters和buffers复制到module和他的后代中
parametes(memo=None) 返回一个包含模型所有参数的迭代器
register_backward_hook(hook) 在module上注册一个backward hook,hook(module,grad_input,grad_output)
register_forward_hook(hook) 在module上注册一个forward hook,hook(module,input,output)
register_buffer(name,tensor) 给module添加一个永久buffer
register_parameter(name,param) 向module添加parameter
state_dict() 返回一个保存着module所有状态的字典
train(mode=True) 将module设置为training mode
zero_grad() 将module中所有模型参数的梯度设置为0
torch.nn.Sequential(*args) 一个时序容器,modules会以它们传入的顺序被添加到容器中,也可以传入一个orderedDict
torch.nn.ModuleList(modules=None) 将submodules保存在一个list中
append(module) 等价与list中的append
extend(modules) 等价于list中的extend
torch.nn.ParameterList(parameters=None) 将submodules保存在一个list中
  • 卷积层

torch.nn.Conv1d(in_channels,out_channels,kernel_size,stride=1,padding=0,dilation=1,groups=1,bias=True)


torch.nn.Conv2d(in_channels,out_channels,kernel_size,stride=1,padding=0,dilation=1,groups=1,bias=True)


torch.nn.Conv3d(in_channels,out_channels,kernel_size,stride=1,padding=0,dilation=1,groups=1,bias=True)


参数 参数意义
in_channels 输入信号的信道
out_channels 卷积产生的通道
kernel_size(int or tuple) 卷积核尺寸
stride(int,tuple,optional) 卷积步长
padding(int or tuple,optional) 输入的每一条边补充0的层数
dilation(int or tuple,optional) 卷积核元素之间的间距
groups(int,optional) 从输入通道到输出通道的阻塞连接数
bias(bool,optional) 是否添加偏置

torch.nn.ConvTranspose1d(in_channels,out_channels,kernel_size,stride=1,padding=0,outpu_padding=0,groups=1,bias=True)


torch.nn.ConvTranspose2d(in_channels,out_channels,kernel_size,stride=1,padding=0,outpu_padding=0,groups=1,bias=True)


torch.nn.ConvTranspose3d(in_channels,out_channels,kernel_size,stride=1,padding=0,outpu_padding=0,groups=1,bias=True)

参数 参数意义
in_channels(int) 输入信号的通道
out_channels(int) 卷积产生的通道
kernel_size(int or tuple) 卷积核尺寸
stride(int,tuple,optional) 卷积步长
padding(int or tuple,optional) 输入的每一条边补充0的层数
output_padding(int or tuple,optional) 输出的每一条边补充0的层数
dilation(int or tuple,optional) 卷积核元素之间的间距
groups(int,optional) 从输入通道到输出通道的阻塞连接数
bias(bool,optional) 是否添加偏置

torch.nn.MaxPool1d(kernel_size,stride=None,padding=0,dilation=1,return_indices=False,ceil_mode=False)


torch.nn.MaxPool2d(kernel_size,stride=None,padding=0,dilation=1,return_indices=False,ceil_mode=False)


torch.nn.MaxPool3d(kernel_size,stride=None,padding=0,dilation=1,return_indices=None,ceil_mode=False)


参数 参数意义
kernel_size(int or tuple) max pooling的窗口大小
stride(int,tuple,optional) max pooling的窗口移动步长
padding(int or tuple,optional) 输入的每一条边补充0的层数
dilation(int or tuple,optional) 控制窗口中元素的字符
return_indices 为True时,会返回输出最大值的序号
ceil_mode 为True时,计算输出信号的大小时使用向上取整

torch.nn.AvgPool1d(kernel_size,stride=None,padding=0,ceil_mode=False,count_include_pad=True)


torch.nn.AvgPool2d(kernel_size,stride=None,padding=0,ceil_mode=False,count_include_pad=True)


torch.nn.AvgPool3d(kernel_size,stride=None,padding=0,ceil_mode=False,count_include_pad=True)


参数 参数意义
kernel_size(int or tuple) 池化层窗口大小
stride(int,tuple,optional) 池化层窗口移动步长
padding(int or tuple,optional) 输入的每一条边补充0的层数
ceil_mode 为True时,计算输出信号大小的时候,会使用向上取整
count_include_pad 为True时,计算平均池化时,将包括padding填充的0

torch.nn.AdaptiveMaxPool1d(output_size,return_indices=False)


torch.nn.AdaptiveMaxPool2d(output_size,return_indices=False)


torch.nn.AdaptiveMaxPool3d(output_size,return_indices=False)


参数 参数意义
output_size 输出信号的尺寸
return_indices 为True时,会返回输出的索引,对nn.MaxUnpool有用

torch.nn.AdaptiveAvgPool1d(output_size)


torch.nn.AdaptiveAvgPool2d(output_size)


参数 参数意义
output_size 输出信号的尺寸

torch.nn.MaxUnpool1d(kernel_size,stride=None,padding=0)


torch.nn.MaxUnpool2d(kernel_size,stride=None,padding=0)


torch.nn.MaxUnpool3d(kernel_size,stride=None,padding=0)


参数 参数意义
kernel_size(int or tuple) maxunpooling的窗口的大小
stride(int,tuple,optional) maxunpooling的窗口移动的步长
padding(int or tuple,optional) 输入的每一条边补充0的层数

torch.nn.FractionalMaxPool2d(kernel_size,output_size=None,output_ratio=None,return_indices=False,_random_samples=None)


参数 参数意义
kernel_size(int or tuple) 池化层窗口大小
output_size 输出图像的大小
output_ratio 将输入图像大小的百分比指定为输出图像的大小

torch.nn.LPPool2d(norm_Type,kernel_size,stride=None,ceil_mode=False)


参数 参数意义
kernel_size(int or tuple) 池化层窗口大小
  • 非线性激活函数
函数 函数功能
torch.nn.ReLU()
torch.nn.ELU(alpha=1.0,inplace=Flase)
torch.nn.PReLU(num_parameters=1,init=0.25)
torch.nn.LeakyReLU(negative_slope=0.01,inplace=False)
torch.nn.Threshold(threshold,value,inplace=False)
torch.nn.Hardtanh(min_value=-1,max_value=1,inplace=False)
torch.nn.Sigmoid()
torch.nn.Tanh()
torch.nn.LogSigmoid()
torch.nn.Softplus(beta=1,threshold=20)
torch.nn.Softshrink(lambda=0.5)
torch.nn.Softsign()
torch.nn.Softmin()
torch.nn.Softmax()
torch.nn.LogSoftmax()
  • 正则化

torch.nn.BatchNorm1d(num_features,eps=1e-05,momentum=0.1,affine=True)


torch.nn.BatchNorm2d(num_features,eps=1e-05,momentum=0.1,affine=True)


torch.nn.BatchNorm3d(num_features,eps=1e-05,momentum=0.1,affine=True)


参数 参数意义
num_features 来自期望输入的特征数,该期望输入的大小为batch_size*num_features
eps 为保证数值稳定性,给分布加上的值
momentum 动态均值和动态方差所使用的动量
affine 为True时,给该层添加学习的仿射变换参数
  • 循环层

torch.nn.RNN(input_size,hidden_size,num_layers=1,nonlinearity=tanh,bias=True,batch_first=False,dropout=0,bidirectional=False)


torch.nn.LSTM(input_size,hidden_size,num_layers=1,nonlinearity=tanh,bias=True,batch_first=False,dropout=0,bidirectional=False)


torch.nn.GRU(input_size,hidden_size,num_layers=1,nonlinearity=tanh,bias=True,batch_size=False,dropout=0,bidirectional=False)


参数 参数意义
input_size 输入特征的维度
hidden_size 隐藏层神经元个数
num_layers 网络的层数
nonlinearity 激活函数
bias 是否使用偏置
batch_first 输入数据的形式
dropout 是否使用dropout
bidirectional 是否使用双向RNN

torch.nn.RNNCell(input_size,hidden_size,bias=True,nonlinearity='tanh')


torch.nn.LSTMCell(input_size,hidden_size,bias=True,nonlinearity='tanh')


torch.GRUCell(input_size,hidden_size,bias=True,nonlinearity='tanh')


参数 参数意义
input_size 输入特征的维度
hidden_size 隐藏层神经元个数
nonlinearity 激活函数
bias 是否使用偏置
  • 线性层

torch.nn.Linear(in_features,out_features,bias=True)


参数 参数意义
in_features 每个输入样本的大小
out_features 每个输出样本的大小
bias 为False时,不学习偏置
  • 裁剪层

torch.nn.Dropout(p,inplace=False)


torch.nn.Dropout2d(p,inplace=False)


torch.nn.Dropout3d(p,inplace=False)


参数 参数意义
p 将元素置0的概率
inplace 为True时,会原地执行操作
  • 稀疏层

torch.nn.Embedding(num_embeddings,embedding_dim,padding_idx=None,max_norm=None,norm_type=2,scale_grad_by_freq=False,sparse=False)


参数 参数意义
num_embeddings(int) 嵌入字典的大小
embedding_dim(int) 每个嵌入向量的大小
padding_idx(int,optional) 如果提供的话,输出遇到此下标时用零填充
max_norm(float,optional) 如果提供的话,会重新归一化词嵌入,使它们的范数小于提供的值
norm_type(float,optional) 对于max_norm选项计算P范数时的p
scale_grad_by_freq(bollean,optional) 如果提供的话,会根据字典中单词频率缩放梯度
  • 距离函数

torch.nn.PairwiseDistance(p=2,eps=1e-06)


参数 参数意义
p 范数次数
  • 损失函数

torch.nn.L1Loss(size_average=True)|


torch.nn.MSELoss(size_average=True)


torch.nn.CrossEntropyLoss(weight=None,size_average=True)


torch.nn.NLLLoss(weight=None,size_average=True)


torch.nn.NLLLoss2d(weight=None,size_average=True)


torch.nn.KLDivLoss(weight=None,size_average=Ture)


torch.nn.BCELoss(weight=None,size_average=True)


torch.nn.MarginRankingLoss(margin=0,size_average=True)


torch.nn.HingeEmbeddingLoss(size_average=True)


torch.nn.MultiLabelMarginLoss(size_average=True)


torch.nn.SmoothL1Loss(size_average=True)


torch.nn.SoftMarginLoss(size_average=True)


torch.nn.MultiLabelSoftMarginLoss(weight=None,size_average=True)


torch.nn.CosineEmbeddingLoss(margin=0,size_average=True)


torch.nn.MultiMarginLoss(p=1,margin=1,weight=None,size_average=True)


  • 视觉层

torch.nn.PixelShuffle(upscale_factor)


torch.nn.UpsamplingNearest2d(size=None,scale_factor=None)


torch.nn.UpsamplingBilnear2d(size=None,scale_factor=None)


  • 多GPU层

torch.nn.DataParallel(module,device_ids=None,output_device=None,dim=0)


  • 工具函数

torch.nn.utils.clip_grad_norm(parameters,max_norm,norm_type=2)


torch.nn.utils.rnn.PackedSequence(_cls,data,batch_sizes)


torch.nn.utils.rnn.pack_padded_sequence(input,lengths,batch_first=False)


torch.nn.utils.rnn.pad_packed_sequence(sequence,batch_first=False)


3.3 torch.nn.functional

包含与torch.nn相对的所有实现;只不过torch.nn.functional是以函数形式封装的这些实现。

torch.nn.X torch.nn.functional
函数
结构中包含所需要初始化的参数 需要在函数外定义并初始化相应参数,并作为参数传入
一般情况下放在init中实例化,并在forward中完成操作 一般在init中初始化相应参数,在forward中传入

3.4 torch.nn.autograd


torch.autograd.backward(variables,grad_variables,retain_variables=False)


参数 参数意义
variables 将计算导数的变量
grad_variables 渐变写入相应变量的每个元素
retain_gradph 若为False,则用于计算grad的图形将被释放
create_grahp 若为True,则构造导数的图形

torch.autograd.grad(outputs,inputs,grad_outputs=Noneretain_graph=None,create_graph=None,only_inputs=True)


参数 参数意义
outputs 差分函数的输出
inputs 输入将返回梯度的积分
grad_outputs 渐变wrd每个输出
retain_graph 若为False,则用于计算grad的图形被释放
create_graph 若为True,则构造导数的图形
only_inputs 若为True,则渐变wrt离开时图形的一部分,但不显示inputs不会被计算和累积
  • torch.autograd.Variable

包裹张量并记录应用的操作

函数 函数意义
backward(gradient=None,retain_variables=False) 当前Variable对leaf variable求偏导
detach() 返回一个新变量与当前图形分离
detach_() 从创建它的图形中分离变量,与当前图形分离
register_hook(hook) 注册一个backward钩子
reinforce(reward) 注册一个奖励,这个奖励是由一个随机过程得到的
retain_grad() 启用非叶变量的.grad属性
  • torch.autograd.Function
    记录操作历史并定义用于区分操作的公式
函数 函数意义
backward(*grad_output) 定义用于区分操作的公式
static forward 执行操作

3.5 torch.optim

  • torch.optim.Optimizer(params,default)

所有优化器的基类

函数 函数意义
load_state_dict(state_dict) 加载optimizer状态
state_dict() 以dict类型返回optimizer状态
step(closure) 进行单步优化
zero_grad() 清空所有被优化过的Variable的梯度

优化器 优化器意义
torch.optim.Adadelta(params,lr=1.0,rho=0.9,eps=1e-06,weight_decay=0) 实现Adadelta算法
torch.optim.Adagrad(params,lr=0.01,lr_decay=0,weight_decay=0) 实现Adagrad算法
torch.optim.Adam(params,lr=0.001,betas=(0.9,0.999),eps=1e-08,weight_decay=0) 实现Adam算法
torch.optim.Adamax(params,lr=0.002,betas=(0.9,0.999),eps=1e-08,weight_decay=0) 实现Adamax算法
torch.optim.ASGD(params,lr=0.01,lambd=0.0001,alpha=0.75,t0=1000000.0,weight_decay=0) 实现平均随机梯度下降算法
torch.optim.LBFGS(params,lr=1,max_iter=20,max_eval=None,tolerance_grad=1e-05,tolerance_change=1e-09,history_size=100,line_search_fn=None) 实现L-BFGS算法
torch.optim.RMSprop(params,lr=0.01,alpha=0.99,eps=1e-08,weight_decay=0,momentum=0,centered=False) 实现RMSprop算法
torch.optim.Rprop(params,lr=0.01,etas=(0.5,1.2),step_sizes=(1e-06,50)) 实现弹性反向传播算法
torch.optim.SGD(params,lr,momentum=0,dampening=0,weight_decay=0,nesterov=False) 实现随机梯度下降算法

3.6 torch.nn.init


torch.nn.init.calculate_gain(nonlinearity,param=None)


torch.nn.init.uniform(tensor,a=0,b=1)


torch.nn.init.normal(tensor,mean=0,std=1)


torch.nn.init.constant(tensor,val)


torch.nn.init.eye(tensor)


torch.nn.init.dirac(tensor)


torch.nn.init.xavier_uniform(tensor,gain=1)


torch.nn.init.xavier_normal(tensor,gain=1)


torch.nn.init.kaiming_uniform(tensor,a=0,mode='fan_in')


torch.nn.init.kaiming_normal(tensor,a=0,mode='fan_in')


torch.nn.init.orthogonal(tensor,gain=1)


torch.nn.init.sparse(tensor,sparsity,std=0.01)


3.7 torch.multiprocessing

用于在相同数据的不同进程中共享视图

3.8 torch.cuda

实现与CPU张量相同的功能,但使用GPU进行计算

函数 函数意义
torch.cuda.current_blas_handle() 返回cublasHandle_t指针
torch.cuda.current_device() 返回当torch.cuda.current_stream() 返回一个当前所选的stream
torch.cuda.device(idx) 上下文管理器,可以更改所选设备
torch.cuda.device_count() 返回可获得的GPU数量
torch.cuda.device_of(obj) 将当前设备更改为给定对象的上下文管理器
torch.cuda.is_available() 指示CUDA当前是否可用
torch.cuda.set_device(device) 设置当前设备
torch.cuda.stream(stream) 选择给定流的上下文管理器
torch.cuda.synchronize() 等待当前设备上所有流中的所有核心完成
torch.cuda.comm.broadcast(tensor,devices) 向一些GPU广播张量
torch.cuda.comm.reduce_add(inputs,destination=None) 将来自多个GPU的张量相加
torch.cuda.comm.scatter(tensor,devices,chunk_sizes=None,dim=0,streams=None) 打散横跨多个GPU的张量
torch.cuda.comm.gather(tensors,dim=0,destination=None) 从多个GPU收集张量
torch.cuda.Stream CUDA流的包装
torch.cuda.Event(enable_timing=False,blocking=False,interprocess=False,_handle=None) CUDA事件的包装

3.9 torch.utils

  • torch.utils.data.Dataset

表示Dataset的抽象类,所有子类应该override lengetitem,前者提供了数据集的大小,后者支持整数索引

函数 函数意义
torch.utils.data.TensorDataset(data_tensor,target_tensor) 包装数据和目标张量的数据集
torch.utils.data.DataLoader(dataset,batch_size,shuffle,sampler,num_workers,collate_fn,pin_memory,drop_last) 数据加载器,组合数据集和采集器,并在数据集上提供单进程或多进程迭代器
  • torch.utils.data.sampler.Sampler(data_source)

所有采样器的基础类,每个采样器子类必须提供一个iter方法,提供一种迭代数据集元素的索引的方法,以及返回迭代器长度的len方法

函数 函数意义
torch.utils.data.sampler.SequentialSampler(data_source) 样本元素顺序排列,始终以相同的顺序
torch.utils.data.sampler.RandomSampler(data_source) 样本元素随机,没有替换
torch.utils.data.sampler.SubsetRandomSampler(indices) 样本元素从指定的索引列表中随机抽取,没有替换
torch.utils.data.sampler.WeightedRandomSampler(weights,num_samples,replace=True) 样本元素来自于【0,len(weights)-1】,给定概率
torch.utils.model_zoo.load_url(url,model_dir=None) 在给定的URL上加载Torch序列化对象

3.10 torch.torchvision

  • 内含数据集

torchvision.datasets.MNIST(root,train=True,transform=None,target_transform=None,download=False)


torchvision.datasets.CocoCaptions(root='dir where images are',annFile='json annotation file',[transform,target_transform])


torchvision.datasets.CocoDetection(root='dir where images are',annFile='json annotation file',[transform,target_transform])


torchvision.datasets.LUSN(db_path,classes='train',[transform,target_transform])


torchvision.datasets.ImageFolder(root='root_folder path',[transform,target_transform])


torchvision.datasets.CIFAR10(root,train=True,transform=None,target_transform=None,download=False)


torchvision.datasets.CIFAR100(root,train=True,transform=None,target_transform=None,download=False)


torchvision.datasets.STL10(root,split='train',transform=None,target_transform=None,download=False)


  • 内含模型

torchvision.models.alexnet(pretrained=False,**kwargs)


torchvision.models.resnet18(pretrained=False,**kwargs)


torchvision.models.resnet34(pretrained=False,**kwargs)


torchvision.models.resnet50(pretrained=False,**kwargs)


torchvision.models.resnet101(pretrained=False,**kwargs)


torchvision.models.resnet152(pretrained=False,**kwargs)


torchvision.models.vgg11(pretrained=False,**kwargs)


torchvision.models.vgg11_bn(**kwargs)


torchvision.models.vgg13(pretrained=False,**kwargs)


torchvision.models.vgg13_bn(**kwargs)


torchvision.models.vgg16(pretrained=False,**kwargs)


torchvision.models.vgg16_bn(**kwargs)


torchvision.models.vgg19(pretrained=False,**kwargs)


torchvision.models.vgg19_bn(**kwargs)


  • 数据预处理

torchvision.transforms.Compose(transforms)


torchvision.transforms.CenterCrop(size)


torchvision.transforms.RandomCrop(size,padding=0)


torchvision.transforms.RandomHorizontalFlip


torchvision.transforms.RandomSizedCrop(size,interpolation=2)


torchvision.transforms.Pad(padding,fill=0)


torchvision.transform.Normalize(mean,std)


torchvision.transforms.ToTensor


torchvision.transforms.ToPILImage


torchvision.transforms.Lambda(lambda)


torchvision.utils.make_grid(tensor,nrow=8,padding=2,normalize=False,range=None,scale_each=False)


torchvisin.utils.save_image(tensor,filename,nrow=8,padding=2,normalize=False,range=None,scale_each=False)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容