安装
登录官网 https://pytorch.org/ ,选择环境,就会给出相应的安装命令,很智能。
pip3 install https://download.pytorch.org/whl/cu80/torch-1.0.1.post2-cp35-cp35m-linux_x86_64.whl
pip3 install torchvision
使用
cuda
看看是否支持cuda
torch.cuda.is_available()
程序开头添加,可以提升一点训练速度,并且没有额外开销。
torch.backends.cudnn.benchmark = True
torch.from_numpy
- numpy中的ndarray转换成pytorch中的tensor:torch.form_numpy()
- pytorch中的tensor转换成numpy中的ndarray:numpy()
data = torch.from_numpy(np.array([im.transpose((2, 0, 1)).astype('float32') / 255.]))
Variable
torch.autograd.Variable是Autograd的核心类,它封装了Tensor,并整合了反向传播的相关实现。
Variable的三个属性:
- data:保存Tensor,是本体的数据。
- grad:保存data的梯度,本体是个Variable而非Tensor,与data形状一致。
- grad_fn:指向function对象,用于反向传播的梯度计算之用。
from torch.autograd import Variable
#Variable默认是不要求梯度的,如果需要求梯度,需要说明(requires_grad=True)
data = Variable(data)
torch.argmax
函数功能:返回指定维度最大值的索引。
torch.nn.Upsample(size=None, scale_factor=None, mode=‘nearest’, align_corners=None)
随机数
为CPU设置种子用于生成随机数,使每次得到的随机数是固定的 。
torch.manual_seed(config.SEED)
为所有的GPU设置随机种子,使每次得到的随机数是固定的 。
torch.cuda.manual_seed_all(config.SEED)
模型特征图大小计算
常用卷积保持特征图大小不变的参数:
ignite
Ignite 是 PyTorch 官方发布的一个高抽象库,可以使训练代码简洁高效,early stopping,模型 checkpoint 等各类训练指标轻松使用,达到更好地使用 PyTorch 训练神经网络的目的。
安装
pip install pytorch-ignite
torchvision
torchvision独立于Pytorch,需通过下面的命令进行安装。
pip install torchvision
torchvision 主要包含以下三部分:
- models : 提供深度学习中各种经典的网络结构以及训练好的模型,包括Alex Net, VGG系列、ResNet系列、Inception系列等;
- datasets:提供常用的数据集加载,设计上都是继承torch.utils.data.Dataset,主要包括MMIST、CIFAR10/100、ImageNet、COCO等;
- transforms: 提供常用的数据预处理操作,主要包括对Tensor及PIL Image对象的操作。
导入预训练模型。如果只需要网络结构,不需要用预训练模型的参数来初始化pretrained设置为False。
from torchvision.models import resnet101
model = resnet101(pretrained=True)
可视化工具Visdom
安装
pip install visdom
启动服务
python -m visdom.server
版本兼容问题
1.10版本加载0.3.1版本训练的模型
network.load_state_dict(torch.load(save_path))
# 替换为
model_dict = torch.load(save_path)
model_dict_clone = model_dict.copy()
for key, value in model_dict_clone.items():
if key.endswith(('running_mean', 'running_var')):
del model_dict[key]
network.load_state_dict(model_dict, False)
UserWarning: volatile was removed and now has no effect. Use with torch.no_grad():
instead.
self.real_A = Variable(self.input_A, volatile=True)
#替换为
with torch.no_grad():
self.real_A = Variable(self.input_A)
IndexError: invalid index of a 0-dim tensor. Use tensor.item() to convert a 0-dim tensor to a Python number
print(batch_idx, '/', args.maxIter, ':', nLabels, loss.data[0])
#替换为
print(batch_idx, '/', args.maxIter, ':', nLabels, loss.item())
RuntimeError: CUDA out of memory
model.test()
#替换为
with torch.no_grad():
model.test()
参考文献
https://pytorch.org/
torch小技巧
torch.manual_seed()
PyTorch 的高抽象库 Ignite 简介
Pytorch——计算机视觉工具包:torchvision
PyTorch源码解读之torchvision.models
可视化利器Visdom
this may be expected because InstanceNorm2d does not track running stats by default since 0.4.0
pytorch出现RuntimeError: CUDA out of memory.
Pytorch 记录
pytorch报错UserWarning: invalid index of a 0-dim tensor.
Pyorch之numpy与torch之间相互转换
Pytorch之认识Variable
Pytorch之Variable
PyTorch基本用法(二)——Variable
pytorch-handbook
PyTorch还是TensorFlow?这有一份新手深度学习框架选择指南
PyTorch简明笔记[1]-Tensor的初始化和基本操作
Pytorch(笔记2)–Conv2d卷积运算
pytorch torch.nn 实现上采样——nn.Upsample