自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(36)
  • 资源 (3)
  • 收藏
  • 关注

原创 Pytorch获取中间变量的梯度

为了节省显存,pytorch在反向传播的过程中只保留了计算图中的叶子结点的梯度值,而未保留中间节点的梯度,如下例所示:import torchx = torch.tensor(3., requires_grad=True)y = x ** 2z = 4 * yz.backward()print(x.grad) # tensor(24.)print(y.grad) # None可以看到当进行反向传播后,只保留了x的梯度tensor(24.),而y的梯度没有保留所以为None。

2021-01-31 00:29:14 10490 4

原创 Pytorch可视化模型任意中间层的类激活热力图(Grad-CAM)

本文中绘制类激活热力图的基本方法参考自:https://blog.csdn.net/sinat_37532065/article/details/103362517在该方法的基础上,本文添加了如下功能:根据网络层的名字,可视化模型指定层的类激活热力图。本文使用的backbone network为Resnet50,实际运行时需要根据使用的网络来修改以下两个参数:1. "layers_names":包含模型所有网络层名的列表,层名顺序与模型结构一致。2. "out_layer_name":指定的

2021-01-29 23:04:48 16553 46

原创 Pytorch torch.distributed 实现单机多卡分布式训练

一、分布式训练的优势:torch.nn.DataParallel可以使我们方便地将模型和数据加载到多块gpu上,实现数据并行训练,但存在着训练速度缓慢、负载不均衡的问题。相比之下,torch.distributed具有以下几点优势:1. distributed是多进程的,会分配n个进程对应n块gpu,而DataParallel是单进程控制的,所以存在着PIL(全局解释器锁)的问题。2. (主要优势)distributed在每个进程内都维护了一个optimizer,每个进程都能够独立完成梯度...

2020-12-26 19:56:30 16337

原创 解决opencv读取、保存图像失败

import cv2import numpy as np# 路径中包含特殊符号,使用cv2.imread()和cv2.imwrite()时会读取、保存失败img_path = r'C:\Users\admin\Desktop\8Dicellograptuscf.complanatus\Shot_201907121711130877.jpg'save_path = r'C:\Users\admin\Desktop\8Dicellograptuscf.complanatus\Shot_201...

2020-12-22 16:46:39 1302

原创 python opencv在图像中裁剪任意形状多边形,裁剪镂空多边形, 裁剪多个多边形

一、裁剪单个多边形import numpy as npimport cv2# 读取图像img = cv2.imread("dog.jpg")# 坐标点pointspts = np.array([[10, 10], [15, 0], [35, 8], [100, 20], [300, 45], [280, 100], [350, 230], [30, 200]])pts = np.array([pts])# 和原始图像一样大小的0矩阵,作为maskmask = np.zeros(img

2020-12-09 20:58:34 8547 2

原创 Pytorch Optimizer类使用小技巧总结

一、固定部分网络层参数1. 将需要固定,不参与训练层参数的requires_grad属性设为False:# 在nn.Modele子类内固定features层参数for p in self.features.parameters(): p.requires_grad=False2. 将参与训练的层参数传入Optimizer:param_to_optim = []for param in self.model.parameters(): if param.requires

2020-12-06 21:52:54 1869 1

原创 Pytorch 多分类模型绘制 ROC, PR 曲线

前言:记录利用sklearn和matplotlib两个库为pytorch分类模型绘制roc,pr曲线的方法,不介绍相关理论。ROC曲线:import torchimport torch.nn as nnimport osimport numpy as npfrom torchvision.datasets import ImageFolderfrom utils.transform import get_transform_for_testfrom senet.se_resnet

2020-12-06 17:14:34 20222 17

转载 Pandas DataFrame

https://www.jianshu.com/p/8024ceef4fe2

2020-11-04 10:56:11 142

原创 计算图像数据集的均值和方差(mean, std)用于transforms.Normalize()标准化

Pytorch进行预处理时,通常使用torchvision.transforms.Normalize(mean, std)方法进行数据归一化,其中参数mean和std分别表示图像集每个通道的均值和方差序列。在训练Imagenet数据集时通常设置:mean=(0.485, 0.456, 0.406),std=(0.229, 0.224, 0.225)。而对于特定的数据集,选择这个值结果可能并不理想。接下来给出计算特定数据集的均值和方差的方法。def getStat(train_data):

2020-08-09 21:19:35 18983 19

原创 同步和异步,阻塞和非阻塞的区别和联系

在网上搜了搜相关概念,发现很多人好像把同步/异步和阻塞/非阻塞的概念给混淆了。原因可能是因为同步/异步和阻塞/非阻塞是分不开的,而常见的情况是 同步阻塞 和 异步非阻塞 ,所以容易把同步和阻塞混淆,把异步和非阻塞混淆。其实,同步包括了 同步阻塞 和 同步非阻塞 ,异步也包括了 异步阻塞 和 异步非阻塞 。在这里我先介绍阻塞/非阻塞的概念,然后把它们分别融入到同步/异步的情况中去讲解。阻塞/非阻塞:阻塞和非阻塞关注的是程序(线程)在执行过程中调用了另一个程序,在等待调用结果(...

2020-08-07 16:19:16 501

原创 Python爬虫批量下载图像

使用requests和BeautifulSoup模块实现依序下载多页图像。直接贴代码,含注释,有空再写解释,不懂欢迎提问。# -*- coding:utf-8 -*-import osimport timeimport randomimport requestsfrom bs4 import BeautifulSoup# 爬取的图像保存路径SAVE_DIR = os.path.join(os.getcwd(), 'pictures')if not os.path.exists(SA

2020-08-06 14:52:54 324

原创 Python私有属性和受保护的属性原理解析

前言:Python不能像Java那样使用 private 和protected 修饰符创建私有属性和受保护的属性,但是Python有个简单的机制,能避免子类意外覆盖“私有”属性。首先定义一个Dog类:class Dog: 'Dog class' def __init__(self, age, sex, mood): self.age = age self._sex = sex self.__mood = mood受保护的属..

2020-08-05 14:18:23 2711

原创 torch.nn 与 torch.nn.functional的区别?如何选择?

前言:在ptorch中,torch.nn和torch.nn.functional模块下包含了许多功能相同、用法相似的方法,比如:1. torch.nn.Softmax(dim=1)(x) 和torch.nn.functional.softmax(x, dim=1):实现了对x在行维度上进行softmax,2.torch.nn.Conv2d(3, 6, 5)(x) 和 torch.nn.functional.conv2d(x, weight=torch.rand(6, 3, 5, 5)):实现..

2020-07-20 21:44:35 2605

原创 pytorch实现学习率衰减的方法总结

前言:之前在训练模型时一直使用自定义的学习率衰减函数,如下所示:def adjust_learning_rate(args, optimizer, epoch, gamma=0.1): """Sets the learning rate to the initial LR decayed 0.1 every 50 epochs""" lr = args.lr * (0.1 ** (epoch // 50)) for param_group in optimizer.para

2020-07-16 21:16:36 5893

原创 理解optimizer.zero_grad(), loss.backward(), optimizer.step()的作用及原理

在使用pytorch训练模型时,经常可以在迭代的过程中看到optimizer.zero_grad(),loss.backward()和optimizer.step()三行代码依次出现,比如:model = MyModel()criterion = nn.CrossEntropyLoss()optimizer = torch.optim.SGD(model.parameters(), lr=0.001, momentum=0.9, weight_decay=1e-4)for epoch in r

2020-07-16 02:15:32 84747 16

原创 pytorch实现模型参数初始化的方法总结

本文主要介绍pytorch中CNN模型有哪些常用参数初始化方法,以及如何实现网络层的初始化。一、常用的初始化方法import torch.nn as nnimport torchweights = torch.empty(2, 2)# 1.用均匀分布的值填充输入张量, 参数a:均匀分布的下界, 默认为0.; 参数b:均匀分布的上界, 默认为1.uniform_weights = nn.init.uniform_(weights, a=0., b=1.)print(uniform_we

2020-07-15 02:06:20 5068 2

原创 理解L1和L2正则化为什么能防止过拟合

一、相关概念过拟合:指的是拟合模型时过分关注数据集的细节,得到了一个在训练集上表现很好,但不能很好地泛化到新数据上的模型。言下之意就是模型的参数过多,对于现有的数据量来说太过复杂了。正则化:指对模型做显示约束,限制模型的参数以避免过拟合。L1正则化:指在代价函数后面添加l1正则化项,惩罚了系数的l1范数(l2范数定义为所有元素的绝对值之和)。目的是使其中的某些权值减小到0,因此得到的w更加稀疏。其中C0为初始的代价函数,加号后面的为添加的l1正则化项,为所有参数w的绝对值之和,除以训练集

2020-07-07 21:02:00 2949

原创 tensorflow实现L2正则化的方法总结

前言:tensorflow中计算l2正则化项的方法有tf.nn.l2_loss()和tf.contrib.layers.l2_regularizer(),使用方法如下所示:import tensorflow as tfweights = tf.constant([[1,2,3], [4,5,6]], dtype=tf.float32)sess = tf.InteractiveSession()# 计算的是所有元素的平方和再除以2print(tf.nn.l2_loss(weights).e

2020-06-17 21:54:14 7413

原创 爬坑tensorflow多gpu并行训练时loss为nan

一、前言有关tensorflow多gpu分布式的知识点介绍可以参考这篇博客,本文主要是记录一下自己训练时遇到的几个易错点,代码使用的分布式策略是数据并行中的同步方式。文章最后会放上完整代码,包括训练及在训练过程中验证的过程。二、易错点1. 数据划分不当导致loss为nan划分数据到不同的gpu上的代码片段如下:inputs = tf.placeholder(tf.float32, [None, image_size, image_size, 3])labels = tf.plac

2020-06-05 22:31:17 2017

转载 ubuntu18.04多用户共享anaconda环境

转自https://blog.csdn.net/AlphaWun/article/details/90229812步骤1:su进入root用户,编辑/etc/profile文件:vim /etc/profile在文件末尾加上:export PATH=/your_install_path/anaconda3/bin:$PATHyour_install_path为你安装anaconda3的路径,比如我的anaconda安装路径为/data/user209,则命令为:expor.

2020-05-25 17:55:08 1628

原创 tensorflow图像分类时测试准确率受到batch size的影响

之前在使用tensorflow的slim.nets模块进行finetune resnet50时,遇到了训练时的准确率和loss值正常,但在验证和测试时准确率很低的问题,具体表现是测试时batch size越小,测试的准确率越低。但按理说batchsize在测试时应该只影响了运行时间,不应该对准确率产生影响,在这里记录一下解决这个问题的过程。1. BatchNormalization Layer的问题:我finutune时用的网络结构是slim.nets.resnet_v2.resnet_v2_50.

2020-05-25 02:39:38 1988

转载 pypi设置国内镜像源

镜像源:​阿里云 http://mirrors.aliyun.com/pypi/simple/ 中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/ 豆瓣(douban) http://pypi.douban.com/simple/ 清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/ 中国科学技术大学 http://pypi.mirrors.ustc.edu.cn/simple/​使用方法

2020-05-24 00:28:40 370

原创 pytorch计算top_k分类准确率

记录一下计算top_k准确率的方法,直接调用即可:import torchdef accuracy(output, target, topk=(1, 5)): maxk = max(topk) batch_size = target.size(0) _, pred = output.topk(maxk, 1, True, True) pred = pred.t() correct = pred.eq(target.view(1, -1).expand_as

2020-05-18 00:31:46 5467

原创 pytorch实现微调(finetune) vgg16和resnet50

记录一下pytorch中微调vgg16的方法:torchvision.models包中封装了alexnet,resnet、squeezenet,vgg,inception等常见网络的结构,并可以供我们方便地调用在ImageNet上预训练过的模型。以torchvision.models.vgg16_bn为例(_bn表示包含BN层),网络结构包含了以下三个部分:1. features(一堆卷积和最大池化操作):(features): Sequential( (0): Conv2d(3,

2020-05-16 23:54:41 4501

原创 python中的切片操作

字符串切片切片格式: [start:end:step]start:起始位置索引;end:终止位置索引;step:绝对值表示步长,符号表示顺序,+为从左到右,-为从右到左;注意:当从左往右切片时,起止位置的规则是左开右闭,当从右往左时反之; 若step为正,则应start<end,若step为负,则应start>end,step不能为0; 当start和end为空时,默认为全部长度的数据,当step为空默认为1(所以若想从右往左切片时step不能为空) 示例:

2020-05-16 12:08:17 247

原创 pytorch构建并加载自己的图像数据集

前言:pytorch虽然提供了torchvision.datasets包,封装了一些常用的数据集供我们很方便地调用,但我们经常需要训练自己的图像数据,构建并加载数据集往往是训练神经网络的第一步,本文将介绍如何构建加载自己的图像数据集,并用于神经网络输入。一. 自定义图像数据集:1. 数据集的文件结构:train为数据集根目录,下一级为每个类别的文件夹,分别包含着若干张图像:2. torch.utils.data.Dataset:Dataset是表示数据集的抽象类,当我们自定义数据

2020-05-15 18:42:47 8282 2

原创 pytorch多gpu多模型训练时报错AssertionError: Invalid device id

初入pytorch,机器上有两块gpu,分别同时训练两个模型,分别添加了如下代码加以区分:os.environ["CUDA_VISIBLE_DEVICES"] = "0"os.environ["CUDA_VISIBLE_DEVICES"] = "1"第一块gpu上的模型正常运行,但在第二块gpu上的模型运行时报错AssertionError: Invalid device id,定位错误代码为:os.environ["CUDA_VISIBLE_DEVICES"] = "1"mod.

2020-05-14 17:20:47 3550 4

原创 python中*和**分别在形参和实参中的用法讲解

一、形参:*参数:函数接收任意长度的非关键字参数,系统将这些参数用tuple元组组合起来表示:def test(*args): print(args, type(args))test('a', 'b', 'c', 'd') # ('a', 'b', 'c', 'd') <class 'tuple'>**参数:函数接收任意长度的关键字参数,系统将这些参数用dict字典组合起来表示:def test(**kw): print(kw, type(

2020-05-13 13:24:57 1141

原创 transforms.Compose()类的使用说明

作用:transforms.Compose()类用来组合多个torchvision.transforms操作。参数:一个list数组,数组里是多个'Transform'对象,即[transforms, transforms...]。操作:如下所示,遍历list数组,对img依次执行每个transforms操作,并返回transforms后的img。 def __call__(self, img): for t in self.transforms:

2020-05-11 00:10:28 9791

原创 win10和ubuntu18.04下用anoconda新建虚拟环境安装pytorch

记录一下用anoconda安装pytorch的过程:1. 打开anoconda prompt:win+q打开搜索框,搜索anoconda prompt并打开。2. 查看环境:输入conda env list或conda info -e查看所有环境,*表示为当前所在环境,默认为root。这里之前装过一个pytorch环境,先用conda remove -n pytorch --all删除,重新装一遍。3. 配置清华TUNA镜像:# 添加Anaconda的TUNA镜像co

2020-05-09 18:26:45 532

转载 【转载】tensorflow实现学习率衰减的方法总结

# 初始的学习速率是0.1,总的迭代次数是1000次,如果staircase=True,那就表明每decay_steps次计算学习速率变化,更新原始学习速率,# 如果是False,那就是每一步都更新学习速率。红色表示False,蓝色表示True。import tensorflow as tfimport numpy as npimport matplotlib.pyplot as plt...

2020-05-05 16:39:46 324

原创 tensorflow计算交叉熵损失函数(cross_entropy)的方法总结

本文将对以下几种tensorflow中常用的交叉熵损失函数进行比较:tf.losses.sigmoid_cross_entropy tf.nn.sigmoid_cross_entropy_with_logits tf.losses.softmax_cross_entropy tf.nn.softmax_cross_entropy_with_logits_v2 tf.losses.spa...

2020-05-05 16:33:39 6104

原创 tensorflow计算模型分类准确率的方法总结

1. 使用tf.equal():import tensorflow as tfimport numpy as npbatch_size = 8class_num = 10 # 类别数量# 假设logits为神经网络前向传播输出logits = tf.Variable([0, 5, 9, 1, 7, 1, 0, 1])# 假设labels为真实样本号,这里设为全1label...

2020-05-04 19:35:14 5344

原创 制作tfrecords文件

# -*- coding: utf-8 -*-import os.pathimport tensorflow as tffrom pathlib import Pathimport timefrom PIL import Imageimage_size = 32INPUT_PATH = Path(r'C:\Users\admin\Desktop\cifar10')OUTPUT...

2020-04-27 00:54:56 211

原创 利用keras的ImageDataGenrator进行批量图像的数据增强

先直接上代码:from keras.preprocessing.image import ImageDataGenerator, array_to_img, img_to_array, load_imgfrom PIL import Imageimport numpy as npimport osfrom pathlib import Pathfrom multiprocessin...

2020-04-26 02:28:35 793

原创 生成input pipeline:从文件夹中读取图像并生成四维数组和标签数据

直接上代码:import numpy as npimport tensorflow as tffrom pathlib import Pathimport matplotlib.pyplot as pltdef generate_batch(dir_path, img_size): dir_path = Path(dir_path) classes = [] ...

2020-04-26 01:32:20 731

cub200_split.rar

CUB-200-2011图像数据集

2021-12-28

cifar10_images.rar

CIFAR-10 数据集

2021-12-28

spring mvc框架需要用到的jar包

搭建spring mvc框架时需要用到的jar包集合

2019-03-16

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除