基本操作:
transpose、view、permute、t()、expand、repeat、cat、stack、squeeze
pytorch 中改变tensor维度(transpose)、拼接(cat)、压缩(squeeze)详解www.cnblogs.comeq() 、lt()
PyTorch中tensor.eq()和tensor.lt()_DJames23的博客-CSDN博客blog.csdn.netnn.Parameter()
Parameter
类其实是Tensor
的子类,如果一个Tensor
是Parameter
,那么它会自动被添加到模型的参数列表里。所以在自定义含模型参数的层时,我们应该将参数定义成Parameter
,除了直接定义成Parameter
类外,还可以使用ParameterList
和ParameterDict
分别定义参数的列表和字典。
model.parameters()将_init_()中的parameter加入优化器中,不一定要出现在forward中
HUST小菜鸡:PyTorch中的parameterszhuanlan.zhihu.comwith torch.no_grad():
...
三者关系;
一文弄懂Pytorch的DataLoader, DataSet, Sampler之间的关系www.cnblogs.comSample:
Pytorch Sampler详解cnblogs.comtorchvision包是服务于pytorch深度学习框架的,用来生成图片,视频数据集,和一些流行的模型类和预训练模型. torchvision由以下四个部分组成:
transform总结:
pytorch中transform函数详解_HMH2_YY的博客-CSDN博客blog.csdn.netoptim:
optimizer.defaults: 字典,存放这个优化器的一些初始参数,有:'lr', 'betas', 'eps', 'weight_decay', 'amsgrad'。事实上这个属性继承自torch.optim.Optimizer父类;
optimizer.param_groups:列表,每个元素都是一个字典,每个元素包含的关键字有:'params', 'lr', 'betas', 'eps', 'weight_decay', 'amsgrad',params类是各个网络的参数放在了一起。这个属性也继承自torch.optim.Optimizer父类。
学习率的调整应该放在optimizer更新之后
scheduler = ...
for epoch in range(100):
train(...)
validate(...)
scheduler.step()
class torch.optim.lr_scheduler.LambdaLR(optimizer, lr_lambda, last_epoch=-1)
new_lr=λ×initial_lr
其中new_lrnew_lrnew_lr是得到的新的学习率,initial_lrinitial_lrinitial_lr是初始的学习率,λlambdaλ是通过参数lr_lambda和epoch得到的。
torch.optim.lr_scheduler:调整学习率_qyhaill的博客-CSDN博客_lr_schedulerblog.csdn.net制定GPU
import os
os.environ["CUDA_VISIBLE_DEVICES"] = "0"
或者:
torch.cuda.set_device(0)
使用GPU:
model=model.cuda()
x=x.cuda()
y=y.cuda()
另外:
device=torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
model=model.to(device)
x=x.to(device)
y=y.to(device)
多核训练:
DataParallel
https://mp.weixin.qq.com/s/wKjDHOvu6yImZk_C8JKqVAmp.weixin.qq.com Mario:Pytorch的nn.DataParallelzhuanlan.zhihu.com转化为CPU:
.data.cpu()
# 保存整个网络
torch.save(net, PATH)
# 保存网络中的参数, 速度快,占空间少
torch.save(net.state_dict(),PATH)
#--------------------------------------------------
#针对上面一般的保存方法,加载的方法分别是:
model_dict=torch.load(PATH)
model_dict=model.load_state_dict(torch.load(PATH))
另外:
pickle.dump
pytorch加载模型与冻结_流星划过夜空的博客-CSDN博客_torch 加载原模型时冻结所有的层blog.csdn.net可以确保随机初始化一样
tensorboard
网络结构画图工具 https://cbovar.github.io/ConvNetDraw/
caffe可视化工具 http://ethereon.github.io/netscope/#/editor
Visual DL https://github.com/PaddlePaddle/VisualDL
PlotNeuralNet(实在太牛了) https://github.com/HarisIqbal88/PlotNeuralNet
深度学习训练过程可视化(附github源码)mp.weixin.qq.commodel.train() :启用 BatchNormalization 和 Dropout
model.eval() :不启用 BatchNormalization 和 Dropout
contiguous: view只能用在contiguous的variable上。如果在view之前用了transpose, permute等,需要用contiguous()来返回一个contiguous copy。 有些tensor并不是占用一整块内存,而是由不同的数据块组成,而tensor的view()
操作依赖于内存是整块的,这时只需要执行contiguous()
这个函数,把tensor变成在内存中连续分布的形式。