- 博客(31)
- 收藏
- 关注
原创 笔试时C++的输入输出汇总
因为平时在刷leetcode的时候,输入输出等都直接定义好了,直接练习核心代码即可,所以都没有注意到函数的输入输出等是如何定义的。而在笔试的时候,一旦要自己手写输入输出,就写的错漏百出,因此这里总结一下常用的输入输出操作。.........
2022-08-29 15:52:27
3403
原创 Docker介绍及相关操作命令
一、Docker是什么Docker是一个应用打包、分发、部署的工具,你也可以把它理解为一个轻量的虚拟机,它只虚拟你软件需要的运行环境,多余的一点都不要。Docker(容器)跟普通虚拟机的对比打包:就是把你软件运行所需的依赖、第三方库、软件打包到一起,变成一个安装包分发:你可以把你打包好的“安装包”上传到一个镜像仓库,其他人可以非常方便的获取和安装部署:拿着“安装包”就可以一个命令运行起来你的应用,自动模拟出一模一样的运行环境,不管是在Windows/Mac/LinuxDocker的基
2022-06-05 16:00:22
549
原创 优化GPU显存不足,提高GPU利用率
1 常用GPU显存不足时的各种Trick1)监控GPU2)估计模型显存3)显存不足时的Trick4)提高GPU内存利用率2 数据处理及算法角度改善(以医学图像分割算法为例)1 常用GPU显存不足时的各种Trick1)监控GPU 监控GPU最常用的当然是nvidia-smi,但有一个工具能够更好的展示信息:gpustatnvidia-smiwatch --color -n1 gpustat -cpu #动态事实监控GPU2)估计模...
2022-05-21 17:18:47
16676
1
原创 Git及其代码托管平台GitHub、码云
目录1 Git简介2 Git使用3 远程仓库4 分支Branch5 码云的静态页面托管6 在IDEA中使用Git1 Git简介 Version Control System,简称为VCS,版本控制系统是一种记录一个或多个文件的内容变化,以便将来查阅特定版本的内容变化情况的系统。版本控制系统的种类:本地版本控制系统、集中化版本控制系统、分布式版本控制系统。 Git是一个开源的分布式版本控制系统,用来进行项目版本管理。其实就是一个软件,由一...
2022-04-07 15:54:39
1056
原创 语义分割的常用指标详解
1 混淆矩阵假设有6个类别,L为10个真实标签的取值,P为对应的预测的标签值,先计算对应的n(类别数,这里假设为6)xL+P:bin的值一定是分类数的平方。混淆矩阵先将真实标签和预测标签抻成一维向量,做一个对应关系(nxL+P),再将这个对应的一维向量抻成二维矩阵,如下图,很奇妙地将真实值与预测值之间的像素点对应起来了。如上图示例,混淆矩阵要表达的含义:混淆矩阵的每一列代表了预测类别,每一列的总数表示预测为该类别的数据的数目; 每一行代表了数据的真实归属类别,每一行的数据总数表示.
2022-03-23 16:36:14
10524
原创 torch.nn.functional.interpolate()函数详解
通常可以使用pytorch中的torch.nn.functional.interpolate()实现插值和上采样。上采样,在深度学习框架中,可以简单理解为任何可以让你的图像变成更高分辨率的技术。input(Tensor):输入张量size(intor Tuple[int] or Tuple[int, int] or Tuple[int, int, int]) :输出大小scale_factor (float or Tuple[float]) :指定输出为输入的多少倍数...
2022-03-15 21:24:57
39041
1
原创 3D卷积神经网络详解
1 3d卷积的官方详解2 2D卷积与3D卷积1)2D卷积 2D卷积:卷积核在输入图像的二维空间进行滑窗操作。2D单通道卷积 对于2维卷积,一个3*3的卷积核,在单通道图像上进行卷积,得到输出的动图如下所示:2D多通道卷积 在之前的2D单通道的例子中,我们在一张图像上使用卷积核进行扫描,得到一张特征图。这里的“被扫描图像”是一个通道,而非一张彩色图片。如果卷积核每扫描一个通道,就会得到一张特征图,那多通道的图像应该 被怎样扫...
2022-03-15 16:51:01
26726
2
原创 CT图像预处理之窗宽窗位调整
目录1 CT图像的Hu值变换2 CT图像窗宽窗位调整1 CT图像的Hu值变换CT值属于医学领域的概念,通常称亨氏单位(hounsfield unit,HU),反映了组织对X射线的吸收程度。黑影表示低吸收区,即低密度区,如含气体多的肺部;白影表示高吸收区,即高密度区,如骨骼。但是CT 和X线图像相比,CT的密度分辨力高,即有高的密度分辨力(density resolution)。因此,人体软组织的密度差别虽小。吸收系数虽多接近于水,也能形成对比而成像。解剖成像。灰度值属于计算机领域
2022-03-10 18:47:33
16735
8
原创 map()函数 与 lambda函数的用法详解
1 map()函数的语法map是python的内置函数,会根据提供的函数对指定的序列做映射。map()函数的格式是:map(function,iterable,...)第一个参数接受一个函数名,后面的参数接受一个或多个可迭代的序列,返回的是一个集合。把函数依次作用在list中的每一个元素上,得到一个新的list并返回。注意,map不改变原list,而是返回一个新list。map()函数实例:#例1list1=[1,2,3,4,5]map(float,list1)#结
2022-03-08 21:52:55
7279
原创 pytorch使用多个GPU训练及单个GPU训练的相关问题
1 pytorch使用多个GPU同时训练在pytorch上使用多个GPU(在同一台设备上,并非分布式)进行训练是件非常容易的事情,只要在源代码中添加(修改)两行代码即可。把模型放在GPU上:device = torch.device("cuda:0")model.to(device)将tensor复制到GPU上mytensor = my_tensor.to(device)注意:调用my_tensor.to(device)会在GPU上返回一个新的my_tensor副本,而不是重写
2022-03-08 18:12:19
6970
原创 PyTorch多机多GPU并行训练方法及问题整理
在单机多gpu可以满足的情况下, 绝对不建议使用多机多gpu进行训练, 多台机器之间传输数据的时间非常慢, 如果机器只是千兆网卡, 再加上别的一些损耗, 网络的传输速度跟不上, 会导致训练速度实际很慢。1 初始化 初始化操作一般在程序刚开始的时候进行。 在进行多机多gpu运行训练的时候,需要先使用 torch.distributed.init_process_group()进行初始化。 torch.distributed.init_process_group...
2022-03-07 19:17:43
14804
4
原创 yacs、yaml进行实验参数配置详解
1 介绍 很多模型需要设置超参数,当超参数过多时,不方便管理,于是出现了很多类似yaml,yacs的包。YACS是一个轻量级库,用于定义和管理系统配置,例如那些在为科学实验设计的软件中常见的配置。这些“配置”通常涵盖诸如用于训练机器学习模型的超参数或可配置模型超参数(如卷积神经网络的深度)之类的概念。由于您正在进行科学研究,因此重复性至关重要,因此您需要一种可靠的方法来序列化实验配置。YACS使用YAML作为简单的,人类可读的序列化格式。范式是:your code + a YACS ...
2022-02-25 15:22:17
3988
2
原创 Python对YAML文件的处理过程
目录1 yaml文件语法基本语法:Yaml对象Yaml数组纯量2 python中读取yaml配置文件1 yaml文件语法 yaml的意思是:Yet Another Markup Language(仍是一种标记语言),几个月后几个作者又YAML Ain't Markup Language,不同于其他标记语言,只想表示数据。 YAML的语法和其他高级语言类似,并且可以简单表达清单,散列表,标量等数据形态。它使用空白符号缩进和大量依赖外观的特色,特...
2022-02-21 21:55:15
1437
原创 nii数据的各种处理详解
Nifti数据本身是除了矩阵信息(也就是图像信息之外),还有和物理坐标相关的仿射矩阵以及Header头文件信息,但是nibabel的获取数据的方法get_data()把nii数据转成png格式会损失很多信息,因为png格式图像的灰度值有256阶, 因此直接使用nii的医学图像做输入会更好一点。但是Pythorch中的Dataloader是不能直接读取nii图像的,因此加一个CreateNiiDataset的类。pytorch中读取数据的主要途径——Dataset类。在自己构建数据层时都要基于这个类,
2022-02-21 17:34:39
13905
6
原创 对深度学习模型进行调优
对许多模型来说,除了准确率不够高,最核心的问题就是测试集上的结果不太稳定。如果能让测试集的结果更稳定,说不定模型还有继续增加迭代次数的可能。模型不稳定的理由通常为:1)数据增强随机性太大、或batch_size太小解决方法:取消数据增强,或削弱数据增强中随机的程度;增加batch_size2)初始学习率太大,或迭代不稳定解决方法:降低学习率lr或增加动量参数gamma,来帮助模型稳住迭代方向。如果使用的是Adam,则可以考虑增加值3)模型的置信度低解决方法:这种情况下,说明模型或架构
2022-02-18 18:36:54
3423
原创 模型的预训练/迁移学习
大多数情况下,我们能够用于训练模型的算力和数据都很有限,要完成一个大型神经网络的训练非常困难,因此我们希望能够尽量重复利用已经训练好的神经网络以节约训练和数据资源。如果我们在执行预测任务时,能够找到一个曾经执行过相似任务、并被训练得很好的大型架构,那我们就可以使用这个大 型架构中位置较浅的那些层来帮助我们构筑自己的网络。借用已经训练好的模型来构筑新架构的技术就叫做“迁移学习”(transfer learning),也叫做预训练(pre-train)。预训练是我们训练大型模型时、用于降低数据需求...
2022-02-15 19:20:15
5825
1
原创 调用经典架构并基于经典自建模型
1 调用经典架构 大多数时候,我们不会从0去创造我们的自己的架构,而是在经典架构中挑选一个适合的架构或适合的思路,并在经典架构上依据数据的需要对架构进行自定义和修改(当然了,我们只能够调用我们已经学过、并且掌握原理的架构,否则我们在修改的时候将无从下手)。在PyTorch中,基本所有经典架构都已经被实现了,所以我们可以直接从PyTorch中“调库”来进行使用。遗憾的是,直接调出来的大部分库是无法满足我们自己需求的,但我们还是可以调用PyTorch中的架构类来作为我们自己架构的基础。...
2022-02-15 11:05:35
1417
1
原创 图片数据的基本预处理与数据增强
小数据集算力够,倾向于使用数据增强,帮助小数据集防止过拟合。如果数据集本身就是一些比较大的图片,复杂度比较高,反而不会去使用数据增强了。
2022-02-14 11:12:11
17950
5
原创 将png/jpg图像数据集转四维tensor输入PyTorch
如果拥有了自己的数据集,首先需要考虑的就是将你的数据集输入到PyTorch当中去。如果你的数据是来自于网络(比如说,从Kaggle下载,从论文作者处获得,从某个数据集官方的网站进行下载), 那你遇见的原始数据格式可能是各种情况,最常见的是各类压缩文件、pt文件、数据库格式文件或者png/jpg/webp等原始图像。如果你的数据是来自于实验室、公司数据库、甚至是领导/导师给的数据, 那你的数据大概率都是csv/txt/mat等结构的二维数据表。无论我们的原始数据集是呈现什么样的格式,我们必须将其...
2022-02-11 10:08:56
5575
原创 Dataset和DataLoader基本使用方法与数据集切分函数
在PyTorch中,操作数据所需要使用的模块是torch.utils,其中utils.data类下面有大量用来执行数据预处理的工具。在MBSGD中,我们需要将数据划分为许多组特征张量+对应标签的形式,因此最开始我们要将数据的特征张量与标签打包成一个对象。深度学习中的特征张量与标签几乎总是分开的,不像机器学习中标签常常出现在特征矩阵的最后一列或第一列。合并张量与标签,我们所使用的类是utils.data.TensorDataset,这个功能类似于utils.data.TensorDataset,这个功能类
2022-02-03 20:16:04
9715
原创 多分类神经网络:Softmax回归
在机器学习中,我们会使用二分类算法的Many-vs-Many(多对多)和One-vs-Rest(一对多)模式来进行多分类。其中,OvR是指将多个标签类别中的一类作为类别1,其他所有类别作为类别0,分别建立多 个二分类模型,综合得出多分类结果的方法。MvM是指把好几个标签类作为1,剩下的几个标签类别作 为0,同样分别建立多个二分类模型来得出多分类结果的方法。这两种方法非常有效,尤其是在逻辑回归 做多分类的问题上能够解决很多问题,但是在深度学习世界却完全不奏效。理由非常简单:1. 逻辑回归是一个单层神经网络
2022-01-30 20:34:53
2777
原创 Sigmoid函数以及逻辑回归的由来
线性回归时统计学经典算法,它能够拟合出一条直线来描述变量之间的线性关系。但在实际中,变量之 间的关系通常都不是一条直线,而是呈现出某种曲线关系。在统计学的历史中,为了让统计学模型能够更好地拟合曲线,统计学家们在线性回归的方程两边引入了联系函数(link function),对线性回归的方程做出了各种样的变化,并将这些变化后的方程称为“广义线性回归”。其中比较著名的有等式两边同时取对数的对数函数回归、同时取指数的S形函数回归等。 ...
2022-01-30 13:23:42
3607
原创 PyTorch中的torch.nn.Linear详解
torch.nn是包含了构筑神经网络结构基本元素的包,在这个包中,可以找到任意的神经网络层。这些神经网络层都是nn.Module这个大类的子类。torch.nn.Linear就是神经网络中的线性层,可以实现形如y=Xweight^T+b的加和功能。其用法与形参说明如下:代码很简单,但有许多细节需要声明:1)nn.Linear是一个类,使用时进行类的实例化2)实例化的时候,nn.Linear需要输入两个参数,in_features为上一层神经元的个数,out_features为这一层的神经
2022-01-30 10:38:07
18404
原创 PyTorch中矩阵(二维张量)的线性代数运算
1 矩阵的形变及特殊矩阵的构造方法 矩阵的形变其实就是二维张量的形变方法,在此基础上本节将补充转置的基本方法。实际线性代数运算过程中,一些特殊矩阵,如单位矩阵、对角矩阵等相关创建方法如下: 注:t1为一个矩阵,则 torch.t(t1) 与 t1.t()等效。2 矩阵的基本运算 矩阵不同于普通的二维数组,其具备一定的线性代数含义,而这些特殊的性质,其实就主要体现在矩阵的基本运算上。常见的矩阵基...
2022-01-28 22:44:07
3389
原创 PyTorch中的排序运算torch.sort()的用法及例子
torch.sort()默认 dim = -1,排序的维度默认为最后一个维度。即待排序的张量若为二维张量,排序结果与dim = 1 的结果相同,按照列排序;若指定维度dim = 0,则排序结果按行排序。默认 descending = False,递增排序,若descending = True,则递减排序。...
2022-01-27 22:21:02
7146
原创 张量的索引,分片、合并以及维度调整
张量作为有序的序列,也是具备数值索引的功能,并且基本索引方法和Python原生的列表、NumPy中的数组基本一致,当然,所有不同的是,PyTorch中还定义了一种采用函数来进行索引的方式。1 张量的符号索引 一维张量的索引过程和Python原生对象类型的索引一致,基本格式遵循[start:end:step],索引的基本要点回顾如下。注:张量索引出来的结果还是零维张量,而不是单独的数。要转化成单独的数,需要使用item()方法。注:在张量的索引中,step位必须大于0...
2022-01-27 10:56:41
2233
原创 PyTorch(CPU版本及GPU版本)的安装及环境配置
1、添加镜像源 PyTorch是从海外源下载,在安装过程中常常会有下载缓慢甚至断线的问题。在这里,无论是要安装 CPU还是GPU版本,我们都可以选择修改镜像源来提高下载速度。在这里我使用的是清华源,大家可以随意选择自己偏好的源。 打开cmd或者anaconda prompt,输入以下代码:conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/conda config -
2021-07-30 10:35:09
11519
7
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人