torch
下的常用API,基本上都是对数据进行处理的函数①操作数据:
torch.is_tensor,torch.set_default_dtype,torch.get_default_dtype,torch.cat,torch.index_select,torch.reshape,torch.squeeze,torch.t,torch.unsqueeze,torch.transpose,torch.take,torch.where
②定义数据(tensor):
torch.tensor,torch.empty,torch.empty_like,torch.full,torch.full_like,torch.ones,
torch.ones_like,torch.zeros,torch.zeros_like,torch.range,torch.arange,torch.line(log)space
③数据转换(主要是从ndarray转过来):
torch.from_numpy,torch.as_tensor()
④随机数:
torch.normal,torch.rand,torch.rand_like,torch.randint,torch.randint_like,torch.randn,torch.randn_like,
⑤数学计算
一般数学计算:torch.abs,torch.add,torch.clamp,torch.exp,torch.log,torch.log10,torch.mm,torch.mul,torch.pow,torch.round,torch.sigmoid,torch.sin,torch.sqrt,
计算数据特征(平均值,方差等等):torch.argmax,torch.argmin,torch.median,torch.norm,torch.std,torch.sum,torch.unique,torch.var,
数据分析与处理:torch.eq,torch.equal,torch.isfinite,torch.isinf,torch.isnan,torch.sort,
谱计算(如fft,ifft):torch.fft,torch.ifft,torch.rfft,torch.hamming_window(汉明窗)
⑥设置计算设备:
device=torch.device(“cpu:0”)或者torch.device(“cuda:0”),也可以直接写”cpu”,”cuda”
torch.nn
下的常用API,主要是用来搭建网络和对网络进行设置的函数①torch.nn.Module
,几乎所有的模型包括layer
都是继承于torch.nn.Module
类,这样的模型都有以下一些属性,调用格式是model.
:
add_module(name, module),zero_grad(),apply(fn),cpu(),cuda(device=None),eval()train(mode=True),float(),to(device=None,dtype=None),requires_grad_(requires_grad=True),
②查看模型的层或者参数:
modules(),named_modules(),._modules,parameters(),named_parameters(),children(),named_children(),(带named的函数会同时返回layers和names);state_dict()(字典),load_state_dict(state_dict),
③构建模型:
torch.nn.Sequential,torch.nn.ModuleList,torch.nn.ModuleDict
④添加模型参数:
torch.nn.ParameterList,torch.nn.ParameterDict
⑤layers:
卷积层:torch.nn.Conv2d,torch.nn.ConvTranspose2d,
线性层:torch.nn.Linear,torch.nn.Bilinear(双线性)
池化层:torch.nn.MaxPool2d,torch.nn.AvgPool2d;
展平层:torch.nn.Flatten
归一化层:torch.nn.BatchNorm2d,
丢弃层:torch.nn.Dropout,torch.nn.AlphaDropout(丢弃一部分后,不会改变数据的原方差和均值)
激活函数:torch.nn.LeakyReLU,torch.nn.LogSigmoid,torch.nn.ReLU,torch.nn.SELU,torch.nn.Sigmoid,torch.nn.Tanh,torch.nn.Softmax,
损失函数:torch.nn.MSELoss,torch.nn.CrossEntropyLoss,torch.nn.L1Loss,torch.nn.BCELoss
上采样:torch.nn.Upsample,torch.nn.UpsamplingNearest2d,torch.nn.UpsamplingBilinear2d
三、torch.nn.functional
下常用API,主要是一些损失函数和layers
,和torch.nn
很相似
1、它的几乎所有的函数在torch.nn
下都能找到,尤其是那些layers
,但是这些相同名字的函数在两个不同的namespace
下有以下几个不同点:
2、当然还有一些torch.nn
下没有的或者都有,但是较常用torch.nn.functional
下的
①onehot编码:torch.nn.functional.one_hot(tensor, num_classes=-1)
②loss函数(一般用这个,不用torch.nn的)
torch.nn.functional.binary_cross_entropy_with_logits,torch.nn.functional.binary_cross_entropy,torch.nn.functional.cross_entropy,torch.nn.functional.l1_loss,torch.nn.functional.mse_loss,torch.nn.functional.nll_loss,
③上采样:torch.nn.functional.upsample,torch.nn.functional.upsample_bilinear
torch.nn.functional.upsample_nearest
torch.Tensor
,先定义tensor=torch.tensor()
,然后下面是对tensor能进行的操作1、torch中的数据类型,主要分为dtype,CPU tensor,GPU tensor
三种类型
2、tensor自身的属性,很多和torch下的函数差不多,但是它是tensor自己的属性,调用方式是tensor.
;而前者的调用方式是torch.
①定义数据:tensor.new_tensor,tensor.new_full,tensor.new_ones,tensor.new_empty,tensor.new_zeros
②查看tensor的属性:tensor.is_cuda,tensor.device,tensor.grad(常用),tensor.ndim,requires_grad
③对tensor进行计算操作:tensor.T,tensor.abs() ,tensor.abs_(),tensor.add(value),tensor.add_(value),tensor.argmax(),tensor.argmin(),tensor.backward(常用),clamp(min, max),clamp_(min, max),cos(),cos_(),div(),div_(),double(),dot(),eq(),eq_(),equal(),exp(),exp_(),min(),max(),mean(),median(),pow(),pow_(),repeat(常用),sort(),sqrt() ,sqrt_() ,
④index操作:index_add,index_add_,index_fill_,index_fill,index_select
⑤对tensor进行转换:bool() ,byte(), char() ,clone(常用),cuda(常用),cpu(常用),detach(常用),detach_(常用),item(常用), numpy(常用),permute(常用,维度交换),requires_grad_(requires_grad=True,常用),reshape(*shape),
reshape_as(other),resize_(*sizes),resize_as_(other),to(device=None,dtype=None),view(*shape),view_as(other),where(condition, y)
⑥对bool类型的tensor操作:all(),any()
torch.cuda
下的常用APItorch.cuda.current_device(),torch.cuda.device_count(),torch.cuda.get_device_name,torch.cuda.init(),torch.cuda.is_available(),torch.cuda.is_initialized(),torch.cuda.set_device
torch.nn.init
下的常用API,用来初始化tensortorch.nn.init.uniform_(tensor, a=0.0, b=1.0),torch.nn.init.normal_(tensor, mean=0.0, std=1.0),torch.nn.init.constant_(tensor, val),torch.nn.init.ones_(tensor),torch.nn.init.zeros_(tensor)
torch.optim
下的常用API,用来选择优化算法以定义优化器①常用优化算法:torch.optim.Adam,torch.optim.SGD,它们都有属性.step()
②example:三种传递形参的方式,最后一个适合迁移学习,因为不同层需要的优化力度不一样
optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.9)
optimizer = optim.Adam([var1, var2], lr=0.0001)
optim.SGD([
{
'params': model.base.parameters()},
{
'params': model.classifier.parameters(), 'lr': 1e-3}
], lr=1e-2, momentum=0.9)
③优化学习率lr的方法:
torch.optim.lr_scheduler.LambdaLR(optimizer, lr_lambda, last_epoch=-1),
torch.optim.lr_scheduler.MultiplicativeLR(optimizer, lr_lambda, last_epoch=-1)
torch.utils.data
下的常用API,用来生成数据集生成数据集:torch.utils.data.Dataset,torch.utils.data.DataLoader(可设batch_size,shuffle等参数)
torch.hub
下的常用API,主要用来下载一些模型torch.hub.list(github, force_reload=False)
torch.hub.help(github, model, force_reload=False)
torch.hub.load(github, model, *args, **kwargs)
torch.hub.download_url_to_file(url, dst, hash_prefix=None, progress=True)
torch.hub.load_state_dict_from_url(url, model_dir=None, map_location=None, progress=True, check_hash=False)
torchvision
下常用API,主要用来下载一些数据集和模型,还可以对数据进行transform①torchvision.datasets:
torchvision.datasets.MNIST(root,train=True,transform=None,target_transform=None, download=False)
torchvision.datasets.FashionMNIST(root, train=True, transform=None, target_transform=None, download=False)
torchvision.datasets.CocoCaptions(root, annFile, transform=None, target_transform=None, transforms=None)
torchvision.datasets.ImageFolder(root, transform=None, target_transform=None, loader=, is_valid_file=None)
②图像数据转换:
torchvision.transforms.Compose(transforms),transforms就是一些数据处理方法,比如:
CenterCrop,ToTensor,RandomCrop,RandomHorizontalFlip,RandomResizedCrop,Resize
③对tensor进行转换,一般是用到图像数据转换后,因为图像转换后就是tensor:
Normalize
④将tensor矩阵反变换成PIL格式的图像:
torchvision.transforms.ToPILImage