[pytorch中文文档]
模型保存
1.只保存和加载模型参数:
torch.save(the_model.state_dict(), PATH)
the_model = TheModelClass(*args, **kwargs)
the_model.load_state_dict(torch.load(PATH))
2.保存和加载整个模型:
torch.save(the_model, PATH)
the_model = torch.load(PATH)
torchvision介绍
1.torchvision.datasets
- MNIST
- COCO(用于图像标注和目标检测)(Captioning and Detection)
- LSUN Classification
- ImageFolder
- Imagenet-12
- CIFAR10 and CIFAR100
- STL10
2.torchvision.models
- AlexNet
- VGG
- ResNet
- SqueezeNet
- DenseNet
import torchvision.models as models
resnet18 = models.resnet18(pretrained=True)
alexnet = models.alexnet(pretrained=True)
3. torchvision.transforms
对PIL.Image进行变换
class torchvision.transforms.CenterCrop(size) 将给定的PIL.Image进行中心切割,得到给定的size,size可以是tuple,(target_height, target_width)。size也可以是一个Integer,在这种情况下,切出来的图片的形状是正方形。
class torchvision.transforms.RandomCrop(size, padding=0) 切割中心点的位置随机选取。size可以是tuple也可以是Integer。
class torchvision.transforms.RandomHorizontalFlip 随机水平翻转给定的PIL.Image,概率为0.5。即:一半的概率翻转,一半的概率不翻转。
class torchvision.transforms.RandomSizedCrop(size, interpolation=2) 先将给定的PIL.Image随机切,然后再resize成给定的size大小。
class torchvision.transforms.Pad(padding, fill=0) 将给定的PIL.Image的所有边用给定的pad value填充。 padding:要填充多少像素 fill:用什么值填充。
对Tensor进行变换
class torchvision.transforms.Normalize(mean, std) 给定均值:(R,G,B) 方差:(R,G,B),将会把Tensor正则化。即:Normalized_image=(image-mean)/std。
class torchvision.transforms.ToTensor 把一个取值范围是[0,255]的PIL.Image或者shape为(H,W,C)的numpy.ndarray,转换成形状为[C,H,W],取值范围是[0,1.0]的torch.FloadTensor
data = np.random.randint(0, 255, size=300)
img = data.reshape(10,10,3)
print(img.shape)
img_tensor = transforms.ToTensor()(img)
print(img_tensor)
class torchvision.transforms.ToPILImage 将shape为(C,H,W)的Tensor或shape为(H,W,C)的numpy.ndarray转换成PIL.Image,值不变。
通用变换
class torchvision.transforms.Lambda(lambd) 使用lambd作为转换器。
4.torchvision.utils
make_grid(tensor, nrow=8, padding=2, normalize=False, range=None, scale_each=False) 给定 4D mini-batch Tensor, 形状为 (B x C x H x W),或者一个a list of image,做成一个size为(B / nrow, nrow)的sprite image。 normalize=True ,会将图片的像素值归一化处理 如果 range=(min, max), min和max是数字,那么min,max用来规范化image scale_each=True ,每个图片独立规范化,而不是根据所有图片的像素最大最小值来规范化 save_image(tensor, filename, nrow=8, padding=2, normalize=False, range=None, scale_each=False) 将给定的Tensor保存成image文件。如果给定的是mini-batch tensor,那就用make-grid做成sprite image,再保存。
torch
详细方法查阅API文档
torch.Tensor
详细方法查阅API文档
一种包含单一数据类型元素的多维矩阵。
Torch定义了七种CPU tensor类型和八种GPU tensor类型:
Data tyoe | CPU tensor | GPU tensor |
---|
32-bit floating point | torch.FloatTensor | torch.cuda.FloatTensor | 64-bit floating point | torch.DoubleTensor | torch.cuda.DoubleTensor | 16-bit floating point | N/A | torch.cuda.HalfTensor | 8-bit integer (unsigned) | torch.ByteTensor | torch.cuda.ByteTensor | 8-bit integer (signed) | torch.CharTensor | torch.cuda.CharTensor | 16-bit integer (signed) | torch.ShortTensor | torch.cuda.ShortTensor | 32-bit integer (signed) | torch.IntTensor | torch.cuda.IntTensor | 64-bit integer (signed) | torch.LongTensor | torch.cuda.LongTensor |
torch.Storage
详细方法查阅API文档
一个torch.Storage是一个单一数据类型的连续一维数组。每个torch.Tensor都有一个对应的、相同数据类型的存储。
torch.nn
Parameters:模块参数 class torch.nn.Module:所有网络的基类。
import torch.nn as nn
import torch.nn.functional as F
class Model(nn.Module):
def __init__(self):
super(Model, self).__init__()
self.conv1 = nn.Conv2d(1, 20, 5)
self.conv2 = nn.Conv2d(20, 20, 5)
def forward(self, x):
x = F.relu(self.conv1(x))
return F.relu(self.conv2(x))
Sequential方法:一个时序容器。
model = nn.Sequential(
nn.Conv2d(1,20,5),
nn.ReLU(),
nn.Conv2d(20,64,5),
nn.ReLU()
)
model = nn.Sequential(OrderedDict([
('conv1', nn.Conv2d(1,20,5)),
('relu1', nn.ReLU()),
('conv2', nn.Conv2d(20,64,5)),
('relu2', nn.ReLU())
]))
卷积层:
- Conv1d 1维
- Conv2d 2维
- Conv3d 3维
- ConvTranspose1d 解卷积
- ConvTranspose2d
- ConvTranspose3d
池化层
- MaxPool1d
- MaxPool2d
- MaxPool3d
- MaxUnpool1d Maxpool1d的逆过程,不过并不是完全的逆过程
- MaxUnpool2d
- MaxUnpool3d
- AvgPool1d 平均池化
- AvgPool2d
- AvgPool3d
- FractionalMaxPool2d 分数最大池化
- LPPool2d 幂平均池化
- AdaptiveMaxPool1d 自适应最大池化
- AdaptiveMaxPool2d
- AdaptiveAvgPool1d 自适应平均池化
- AdaptiveAvgPool2d
Non-Linear Activations
- ReLU
- ReLU6
- ELU
- PReLU
- LeakyReLU
- Threshold
- Hardtanh
- Sigmoid
- Tanh
- LogSigmoid
- Softplus
- Softshrink
- Softsign
- Softshrink
- Softmin
- Softmax
- LogSoftmax
Normalization layers
- BatchNorm1d
- BatchNorm2d
- BatchNorm3d
Recurrent layers
- RNN
- LSTM
- GRU
- RNNCell
- LSTMCell
- GRUCell
Linear layers
Dropout layers
- Dropout1d
- Dropout2d
- Dropout3d
Sparse layers 稀疏层
Distance functions
Loss functions
- L1Loss
- MSELoss
- CrossEntropyLoss
- NLLLoss
- NLLLoss2d
- KLDivLoss
- BCELoss
- MarginRankingLoss
- HingeEmbeddingLoss
- MultiLabelMarginLoss
- SmoothL1Loss
- SoftMarginLoss
- MultiLabelSoftMarginLoss
- CosineEmbeddingLoss
- MultiMarginLoss
Vision layers
- PixelShuffle
- UpsamplingNearest2d
- UpsamplingBilinear2d
Multi-GPU layers
Utilities
- clip_grad_norm
- PackedSequence
- pack_padded_sequence
- pad_packed_sequence
torch.autograd
提供了类和函数用来对任意标量函数进行求导。要想使用自动求导,只需要对已有的代码进行微小的改变。只需要将所有的tensor包含进Variable对象中即可。
- Variable
- backward
- detach
- register_hook
- reinforce
- forward
- mark_dirty
- mark_non_differentiable
- mark_shared_storage
- save_for_backward
torch.optim
一个实现了各种优化算法的库 为了使用torch.optim,你需要构建一个optimizer对象。这个对象能够保持当前参数状态并基于计算得到的梯度进行参数更新。
optimizer = optim.SGD(model.parameters(), lr = 0.01, momentum=0.9)
optimizer = optim.Adam([var1, var2], lr = 0.0001)
Optimizer
- load_state_dict
- state_dict
- step
- zero_grad
Adam ASGD RMSprop Rprop SGD
torch.nn.init
- calculate_gain
- uniform
- normal
- constant
- eye
- dirac
- xavier_uniform
- xavier_normal
- kaiming_uniform
- kaiming_normal
- orthogonal
- sparse
torch.multiprocessing
用于在相同数据的不同进程中共享视图
- get_all_sharing_strategies
- get_sharing_strategy
- set_sharing_strategy
torch.legacy
为了可以使用现有的模型并且方便当前Lua Torch使用者过渡,我们创建了这个包。 可以在torch.legacy.nn中找到nn代码,并在torch.legacy.optim中找到optim代码。 API应该完全匹配Lua Torch。
torch.utils.ffi
- create_extension 创建并配置一个cffi.FFI对象,用于PyTorch的扩展
torch.cuda
- current_blas_handle
- current_device
- current_stream
- device
- device_count
- device_of
- is_available
- set_device
- stream
- synchronize
- 交流集
torch.utils.data
- Dataset
- TensorDataset
- DataLoader
- Sampler
- SequentialSampler
- RandomSampler
- SubsetRandomSampler
- WeightedRandomSampler
torch.utils.model_zoo
torch.utils.model_zoo.load_url(url, model_dir=None)
|