Pytorch
。
Nick Blog
这个作者很懒,什么都没留下…
展开
-
pytorch 错误记录
1. Unexpected key(s) in state_dict: "module.backbone.bn1.num_batches_tracked"报错背景:训练:多卡并行(nn.DataParallel),已完成;测试:单卡测试,模型加载时报上述错误;分析原因:在训练时使用多卡并行,保存的是经过nn.DataParallel编译过的模型,这样编译过之后state_dict中的keys就都会多一个前缀module,但是测试时使用单卡,模型参数一加载就会报错,那么此处有两种解决方案:原创 2020-12-17 09:28:42 · 262 阅读 · 0 评论 -
pytorch drop_last参数
以前一直用keras,习惯不管是训练还是验证,图片数目必须整除batch_size,因为keras是静态图。后来用了pytorch,仍然在训练验证或数据加载时,设置drop_last=True,这在有时候验证图片比较少并且batch_size设的比较大的时候会导致大量的图片被丢弃。经过试验,pytorch这种动态图结构下,训练或者验证图片数不能整除batch_size是不会报错的。有关动态图和静态图的理解,在这里简单说一下我自己的理解:静态图可以理解成初始化模型的时候,每一层是什么,层与层之间如何连原创 2020-08-12 11:59:49 · 17152 阅读 · 2 评论 -
pytorch Relu层统一替换
在某些情况下,我们希望将现有模型的激活函数统一替换成某种新型激活函数试验一下效果,但是直接去修改原来的模型文件很麻烦,更好的办法是对生成的模型进行统一替换。 def convert_relu_to_softplus(model): for child_name, child in model.named_children(): if isinstance(child, nn.ReLU): setattr(model, child原创 2020-08-12 10:14:44 · 2667 阅读 · 3 评论 -
可视化pytorch 模型中不同BN层的的running mean曲线
加载模型字典逐一判断每一层,如果该层是bn 的 running mean,就取出参数并取平均作为该层的代表对保存的每个BN层的数值进行曲线可视化from functools import partialimport pickleimport torchimport matplotlib.pyplot as pltpth_path = 'checkpoint.pth'pickle.load = partial(pickle.load, encoding="latin1")pickl.原创 2020-06-01 20:46:13 · 1260 阅读 · 1 评论 -
pytorch 修改预训练模型(全连接层、单个卷积层、多个卷积层)
1. 修改全连接层类别数model = torchvision.models.resnet50(pretrained=True)# 重定义最后一层model.fc = nn.Linear(2048,10)print(model.fc)2. 修改某一层卷积model = torchvision.models.resnet50(pretrained=True)# 重定义第一层卷积的输入通道数model.conv1 = nn.Conv2d(4, 64, kernel_size=7, stride原创 2020-05-19 16:31:26 · 7513 阅读 · 8 评论 -
pytorch函数记录
1. torch.meshgrid之前在numpy中有np.meshgrid函数,最近需要在pytorch进行同样的操作,发现pytorch也有meshgrid这个函数,使用如下(与numpy基本一致):xv, yv = torch.meshgrid([torch.arange(0,5), torch.arange(0,10)])...原创 2020-03-20 22:06:56 · 204 阅读 · 0 评论 -
pytorch错误记录
1. Unexpected key(s) in state_dict: "module.backbone.bn1.num_batches_tracked"报错背景:训练:多卡并行(nn.DataParallel),已完成;测试:单卡测试,模型加载时报上述错误;分析原因:在训练时使用多卡并行,保存的是经过nn.DataParallel编译过的模型,这样编译过之后state_dic...原创 2020-03-20 22:06:00 · 908 阅读 · 0 评论 -
pytorch交叉熵损失函数的weight参数
class_weight = torch.FloatTensor([0.13859937, 0.5821059, 0.63871904, 2.30220396, 7.1588294, 0]).cuda()必须将权重也转为Tensor的cuda格式。原创 2019-01-22 14:50:58 · 10098 阅读 · 7 评论 -
Pytorch之CrossEntropyLoss() 与 NLLLoss() 的区别
CrossEntropyLoss()输入:未做过softmax的预测结果(如(batch,class,h, w)) 未做one-hot 的真实标签其内部先做softmax,再取log,最后取负。NLLLoss()输入:做过logsoftmax的预测结果 未做one-hot 的真实标签其内部直接取负。...原创 2019-01-22 14:49:20 · 1184 阅读 · 0 评论 -
pytorch 在验证时出现CUDA error: out of memory
虽然使用net.eval()调到了验证阶段,但是还是要使用 with torch.no_grad(): outputs = Net_(inputs)来取消验证阶段的loss。个人猜测出现此原因是由于梯度在验证阶段不回传,造成梯度的累计。我做实验发现,在验证阶段,batch0不会报错,batch1就报错。...原创 2019-01-22 14:45:03 · 14727 阅读 · 14 评论 -
自定义的torch中与np.nanmean同功能的函数(只能做一维的)
def torch_nanmean(x): num = torch.where(torch.isnan(x), torch.full_like(x, 0), torch.full_like(x, 1)).sum() value = torch.where(torch.isnan(x), torch.full_like(x, 0), x).sum() return valu...原创 2019-01-22 10:43:40 · 2222 阅读 · 1 评论 -
np.where和torch.where的使用区别
两者都是三个输入参数,第一个是判断条件,第二个是符合条件的设置值,第三个是不满足条件的设置值。区别在于,torch要将设置值全部改为Tensor类型的mask_true = torch.where(torch.isnan(y_true), torch.full_like(y_true, 0), torch.full_like(y_true, 1))mask_true = np.w...原创 2019-01-22 10:41:21 · 32216 阅读 · 0 评论 -
Torch中和np.reshape相同功能的函数
>>> import torch>>> t = torch.ones((2, 3, 4))>>> t.size()torch.Size([2, 3, 4])>>> t.view(-1, 12).size()torch.Size([2, 12])转载:https://discuss.pytorch.org/t/e...转载 2019-01-22 10:36:27 · 830 阅读 · 0 评论 -
one of the variables needed for gradient computation has been modified by an inplace operation
Pytorch 运行错误:RuntimeError: one of the variables needed for gradient computation has been modified by an inplace operation主要原因是由原位运算操作引起的梯度反向传播的问题,检查代码中是否有 inplace=True 或者 x += y 这一类的原位操作,修改为inp...原创 2019-01-22 10:32:26 · 6213 阅读 · 0 评论 -
PyTorch中使用指定的GPU
转载请注明出处:http://www.cnblogs.com/darkknightzh/p/6836568.htmlPyTorch默认使用从0开始的GPU,如果GPU0正在运行程序,需要指定其他GPU。有如下两种方法来指定需要使用的GPU。1. 类似tensorflow指定GPU的方式,使用CUDA_VISIBLE_DEVICES。1.1 直接终端中设定:CUDA_...转载 2019-01-22 10:25:33 · 3746 阅读 · 0 评论