pytorch
Mr.Jcak
这个作者很懒,什么都没留下…
展开
-
pytorch打印模型每层的结构
可以用torchsummary下的summary方法,或者torchinfo下的summary方法,两者功能是一样的以torchsummary下的summary方法为例说明首先通过pip install torchsummary之后在代码中:from torchsummary import summarysummary(model, (1, 28, 28)) #分别是输入数据的三个维度...原创 2022-05-25 16:14:55 · 1173 阅读 · 0 评论 -
TypeError: only integer scalar arrays can be converted to a scalar index
在取某些索引下的值时,报错TypeError: only integer scalar arrays can be converted to a scalar indexdata = data[index]解决方法:首先需要将data转换为numpy arraydata = numpy.array(data)data = data[index]原创 2022-03-10 12:03:08 · 478 阅读 · 0 评论 -
numpy降序排序
np.sort是升序排序为了降序排序,可以先升序排序然后在反转数组shang_sort = np.sort(shang)shang_sort = shang_sort[::-1]原创 2022-03-10 11:40:49 · 8209 阅读 · 1 评论 -
python计算熵
熵的计算公式:p(x)为概率,全部概率之和为1假设 probs是网络输出的n分类预测概率,尺寸为[batch_size,n],那么预测熵的计算代码如下:log_probs = np.log2(probs)shang = -1 * np.sum(probs * log_probs, axis=1)...原创 2022-03-10 11:24:46 · 5513 阅读 · 0 评论 -
np.sum报错TypeError: sum() got an unexpected keyword argument ‘axis‘
这是因为直接对torch.tensor进行np.sum操作造成的,只要首先将需要求和的数据转换为numpy array即可tensor = tensor.numpy()原创 2022-03-10 11:13:08 · 1483 阅读 · 0 评论 -
pytorch保存和加载模型state_dict
保存模型:torch.save({ 'epoch': epoch + 1, 'state_dict': model.state_dict(), 'optimizer': optimizer.state_dict(), }, datadir)加载模型model = model_class(num_classes=num_classes) # 定义模型state = torch.load(datadir)原创 2021-10-18 10:29:47 · 835 阅读 · 0 评论 -
Expected tensor for argument #1 ‘input‘ to have the same device as tensor for argument #2 ‘weight‘;
这种情况出现的原因之一是创建网络的语句没有放进train函数里比如主文件中有train(),test(),eval()......等各个函数,但是创建网络的语句:net=createnet()放在各个函数外面,然后在train(),test(),eval()这几个函数里面使用函数外面创建的net,此时就会报错解决方法:把创建net的语句分别放进各个函数里...原创 2021-04-19 19:25:03 · 371 阅读 · 0 评论 -
pytorch将label转为one hot形式
label_one_hot = torch.nn.functional.one_hot(labels, self.num_classes).float().to(self.device)https://pytorch.org/docs/stable/nn.functional.html#torch.nn.functional.one_hot原创 2020-10-11 15:44:58 · 2549 阅读 · 1 评论 -
os.path.join拼接错误
csv_dir = r"D:\test"print(os.path.join(csv_dir, r'\test.csv'))如上述代码所示,此时拼接后的路径为“D:\a.csv”,不符合预期,那是因为os.path.join第二个参数开头不能为斜杠和反斜杠,改为如下代码之后正确:csv_dir = r"D:\test"print(os.path.join(csv_dir, r'a.csv'))...原创 2020-07-31 10:01:04 · 1414 阅读 · 0 评论 -
pytorch每次迭代训练前都重新对数据集进行采样形成平衡数据集
对于不平衡数据集的训练通常有两种方法:一种是先用数据平衡的方法形成平衡数据集之后用于每一轮的训练,此时每轮训练的数据集是不变的,这一方法在pytorch的实现比较简单,即先构建好平衡数据集train_set,然后构建train_loder:train_loader = DataLoader(dataset=train_set, batch_size=BATCH_SIZE, shuffle=True, num_workers=0) 这种方法只需要构建一次的train_loder...原创 2020-07-30 11:41:56 · 2755 阅读 · 1 评论 -
pytorch中的参数初始化方法
参数初始化(Weight Initialization)PyTorch 中参数的默认初始化在各个层的 reset_parameters() 方法中。例如:nn.Linear 和 nn.Conv2D,都是在 [-limit, limit] 之间的均匀分布(Uniform distribution),其中 limit 是 1. / sqrt(fan_in) ,fan_in 是指参数张量(tensor)的输入单元的数量下面是几种常见的初始化方式。Xavier InitializationXavie转载 2020-05-11 11:11:22 · 18945 阅读 · 1 评论 -
pytorch查看应用指数衰减后的学习率
在pytorch中使用指数衰减后,想着将每轮训练后的学习率打印出来,看指数衰减是否起作用了,于是在每轮训练后通过下面代码查看学习率:print("lr:",net.lr)发现不管训练多少轮,打印出来的学习率都为初始设定的值,但是检查发现指数衰减的使用是没有问题的,最后发现需要通过下面代码来查看应用指数衰减后的学习率:print("lr:",net.scheduler.get_lr())...原创 2020-05-10 09:52:40 · 1058 阅读 · 0 评论 -
pytorch自定义卷积核权值参数
pytorch中构建卷积层一般使用nn.Conv2d方法,有些情况下我们需要自定义卷积核的权值weight,而nn.Conv2d中的卷积参数是不允许自定义的,此时可以使用torch.nn.functional.conv2d简称F.conv2dtorch.nn.functional.conv2d(input, weight, bias=None, stride=1, padding=0, di...原创 2020-05-05 23:20:19 · 12734 阅读 · 6 评论 -
pytorch查看模型的可训练参数
for name, param in model.named_parameters(): if param.requires_grad: print(name,':',param.size())原创 2020-05-05 22:49:37 · 2652 阅读 · 0 评论 -
pytorch的F.cross_entropy交叉熵函数
F.cross_entropy计算交叉熵损失,代码为:loss=F.cross_entropy(out, y)其中out是网络输出的概率向量,y是真实标签,注意y是标量。使用这个函数时应该特别注意out是没有经过softmax处理过的。因为调用F.cross_entropy函数时会通过log_softmax和nll_loss来计算损失,也就是说使用F.cross_entropy函数时,程...原创 2020-02-24 22:53:00 · 16368 阅读 · 0 评论 -
pytorch查看打印网络参数总个数
print("Total number of paramerters in networks is {} ".format(sum(x.numel() for x in net.parameters())))其中net是代码中的网络模型原创 2020-02-22 22:52:17 · 4896 阅读 · 2 评论 -
Batch Normalization原理及pytorch的nn.BatchNorm2d函数
下面通过举个例子来说明Batch Normalization的原理,我们假设在网络中间经过某些卷积操作之后的输出的feature map的尺寸为4×3×2×2,4为batch的大小,3为channel的数目,2×2为feature map的长宽整个BN层的运算过程如下图:上图中,batch size一共是4, 对于每一个batch的feature map的size是3×2×2对于...原创 2020-02-15 14:47:25 · 4174 阅读 · 2 评论 -
pytorch实现数据增强的原理
pytorch的数据增强功能并非是事先对整个数据集进行数据增强处理,而是在从dataloader中获取训练数据的时候(获取每个epoch的时候)才进行数据增强。举个例子,如下面的数据增强代码:transform_train = transforms.Compose([ transforms.RandomCrop(32, padding=4), # 对图像四周各填充4个0像素,然...原创 2020-02-14 20:02:01 · 1886 阅读 · 0 评论 -
pytorch查看当前学习率
在pytorch训练过程中可以通过下面这一句代码来打印当前学习率print(net.optimizer.state_dict()['param_groups'][0]['lr'])原创 2020-01-11 17:09:07 · 15229 阅读 · 3 评论 -
pytorch两种常用的学习率衰减方法
阶梯式衰减torch.optim.lr_scheduler.StepLR(optimizer, step_size, gamma=0.1, last_epoch=-1)每个训练step_size个epoch,lr会自动乘以gammaLR = 0.01optimizer = Adam(model.parameters(),lr = LR)scheduler = torch.op...原创 2020-01-11 17:05:13 · 3117 阅读 · 0 评论 -
pytorch自定义数据集和数据加载器
假设有一个保存为npy格式的numpy数据集,现在需要将其变为pytorch的数据集,并能够被数据加载器DataLoader所加载首先自定义一个数据集类,继承torch.utils.data.Dataset类在这个类中要实现__init__,__getitem__,__len__这三个方法,否则会报错然后实例化这个类,得到train_data,最后将train_data放入DataLo...原创 2019-11-17 21:54:41 · 2627 阅读 · 3 评论 -
pytorch加载的模型测试的结果和保存时测试的结果不一致
假设有一个dropout网络net,训练过程中用测试集进行了测试,接着将该网络进行了保存torch.save(net.state_dict(), path)然后将保存的网络加载出来:net=class_net() # 先定义net的结构net.load_state_dict(torch.load(path))接着用同样的测试集进行测试,发现测试结果和保存时的结果不一致,这是...原创 2019-11-11 22:00:00 · 9064 阅读 · 6 评论 -
Pytorch 为什么每一轮batch需要设置optimizer.zero_grad
根据pytorch中的backward()函数的计算,当网络参量进行反馈时,梯度是被积累的而不是被替换掉;但是在每一个batch时毫无疑问并不需要将两个batch的梯度混合起来累积,因此这里就需要每个batch设置一遍zero_grad 了。其实这里还可以补充的一点是,如果不是每一个batch就清除掉原有的梯度,而是比如说两个batch再清除掉梯度,这是一种变相提高batch_size的方法,...转载 2019-11-09 16:31:00 · 355 阅读 · 0 评论 -
pytorch的backward参数
首先,如果out.backward()中的out是一个标量的话(相当于一个神经网络有一个样本,这个样本有两个属性,神经网络有一个输出)那么此时我的backward函数是不需要输入任何参数的。 运行结果: 不难看出,我们构建了这样的一个函数: 所以其求导也很容易看出: 这是对其进行标量自动求导的结果如果out.backward()中的...转载 2019-09-02 23:16:33 · 6386 阅读 · 6 评论