- 博客(106)
- 收藏
- 关注
原创 Pytorch学习笔记(17)———训练一个性别2分类网络
转载自https://www.jianshu.com/p/1ec6075c0ab6性别识别是一个2分类问题,网上应该有不少的研究。比如商汤/旷世科技 早已经将人脸属性继承到SDK中,可以供API在线调用,还有针对Android, ios的SDK, 本人测试过,速度很精度都很不错。简单起见,直接采用预训练模型微调的方式训练一个性别分类器。网络模型选择torchvision.models中集成了几个常见的网络模型,ResNet, AlexNet, VGG, DenseNet, SqueezeNet。 A
2022-04-26 15:37:27
1316
1
原创 Pytorch学习笔记(16)———预训练模型微调
完整工程工程目录结构Codeimport torchimport torch.optim as optimimport torch.nn as nnfrom torch.utils.data import DataLoaderfrom torchvision.datasets import ImageFolderimport torchvision.models as modelsimport torchvision.transforms as transformsimport n
2022-04-26 14:39:15
857
原创 Pytorch并行训练方法-单机多卡
简单方便的 nn.DataParallelDataParallel 可以帮助我们(使用单进程控)将模型和数据加载到多个 GPU 中,控制数据在 GPU 之间的流动,协同不同 GPU 上的模型进行并行训练(细粒度的方法有 scatter,gather 等等)。DataParallel 使用起来非常方便,我们只需要用 DataParallel 包装模型,再设置一些参数即可。需要定义的参数包括:参与训练的 GPU 有哪些,device_ids=gpus;用于汇总梯度的 GPU 是哪个,output_dev
2022-04-02 10:21:58
4897
原创 Python中多进程
来自东哥IT笔记现在很多CPU都支持多核,甚至是手机都已经开始支持多核了。而Python的GIL(Global Interpreter Locko)则使得其没法使用这些多核带来的优势。还好从Python2.6开始,引入了multiprocessing模块,我们终于可以使用多核带来的便利了。使用多进程的优点使用多进程的缺点使用multiprocessing来创建多进程Process的子类化创建进程池本文并不是一个multiprocessing的全面的介绍,假如你想全面的了解它,可以参见官方的
2022-04-01 11:15:38
7430
原创 进程、线程,多核、多CPU,同步、异步,阻塞、非阻塞
一、cpu架构和工作原理计算机有5大基本组成部分,运算器,控制器,存储器,输入和输出。运算器和控制器封装到一起,加上寄存器组和cpu内部总线构成中央处理器(CPU)。cpu的根本任务,就是执行指令,对计算机来说,都是0,1组成的序列,cpu从逻辑上可以划分为3个模块:控制单元、运算单元和存储单元。这三个部分由cpu总线连接起来。CPU的运行原理就是:控制单元在时序脉冲的作用下,将指令计数器里所指向的指令地址(这个地址是在内存里的)送到地址总线上去,然后CPU将这个地址里的指令读到指令寄存器进行译码。对
2022-03-31 15:03:25
1927
原创 python的模块、包、库的联系与区别
1.Python模块使用模块的好处:大大提高了代码的可维护性;编写代码不必从零开始。当一个模块编写完毕,就可以被其他地方引用。我们在编写程序的时候,也经常引用其他模块,包括Python内置的模块和来自第三方的模块。一个模块就是指Python代码的一个文件,一个.py文件就称为一个模块。2.包(package)为了组织好模块,将多个模块分为一个包。包是python模块文件所在的目录,且该目录下必须存在__init__.py文件。常见的包结构如下:package_a├── **init**.py
2022-03-30 16:24:36
2893
原创 super().__init__()用法
用法解析:在子类的__init__方法中使用 super().__init__() , 就相当于把父类的 __init__构造方法拿过来用, 并且可以对父类的__init__方法进行补充(比如添加成员属性/方法) ;也就相当于把父类的__init__方法继承过来了, 之后用子类实例化一个对象后, 这个对象可以点出父类对象的成员属性/方法, 当然也可以点出自己类对象的成员属性/方法;原本的话子类中的__init__方法会覆盖掉父类的__init__方法, 导致无法通过实例化子类的类对象去给父类的类对象添
2022-03-30 16:03:59
2824
原创 Pytorch学习笔记(15)———模型的保存与加载
在深度学习中,模型的保存和加载很重要,当我们辛辛苦苦训练好的一个网络模型,自然需要将训练好的模型保存为文件。在测试使用时候,又需要将保存在磁盘的模型文件加载调用。在pytorch中网络模型定义为torch.nn.Module的子类的对象。因此模型的保存与加载涉及到2个重要概念——对象的序列化和反序列化。...
2022-03-25 16:29:01
599
原创 语音识别学习(1)—-识别问题的数学模型及语言模型与声学模型
语音识别问题数学模型语音识别系统的目的,是把语音转换成文字。具体来说,是输入一段语音信号,要找一个文字序列(由词或字组成),使得它与语音信号的匹配程度最高。这个匹配程度,一般是用概率表示的。用XXX表示语音信号,WWW表示文字序列,则要求解的是下面这个问题:W∗=argmaxWP(W∣X)W^{*}=\arg \max_{W}P(W|X)W∗=argWmaxP(W∣X)一般认为,语音是由文字产生的(可以理解成人们先想好要说的词,再把它们的音发出来),所以上式中条件概率的顺序就比较别扭了。没关
2021-12-23 10:28:14
1004
原创 根据log文件画loss曲线实例
import matplotlib.pyplot as plttr_loss = []tr_step = []with open("/home/zz/123/transformer.log") as f: for line in f: line = line.strip() line = line.split(',') if len(line)>=4: step = float(line[2][13:]) loss = float(line[4][6:]) tr
2021-12-16 13:59:02
3461
转载 Pytorch学习笔记(14)———自定义CNN网络训练FashionMNIST数据集
入门深度学习,一般都是跑最经典的MNIST+LeNet-5, LeNet-5网络结构简单,MNIST数据集也不是很大,对于初学者来说很方便和友好。作为进阶,熟悉Pytorch基本用法之后,跃跃欲试,想自己手写一个CNN网络,在一个数据集上进行训练和测试。FashionMNIST数据集作为进阶的练习很不错,本实验将基于FashionMNIST数据集从头到尾训练测试一个CNN网络。FashionMNIST数据集https://github.com/zalandoresearch/fashion-mnist
2021-11-17 15:13:13
1503
原创 Pytorch学习笔记(13)———孪生网络训练数据集制作
import torchfrom torch.utils.data import Dataset,DataLoaderimport linecacheimport randomfrom PIL import Imageclass MyDataset(Dataset): def __init__(self, txt_file, transform=None): self.transform = transform self.txt = txt_file
2021-11-16 20:06:27
900
1
原创 梯度积累的作用(转载)
作者:一只滑行的蜗牛链接:https://www.zhihu.com/question/435093513/answer/1629791007来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。for i, (images, target) in enumerate(train_loader): # 1. input output images = images.cuda(non_blocking=True) target = torch.from
2021-11-15 17:23:10
577
原创 熵,交叉熵,KL散度公式与计算实例 (转载学习)
交叉熵(Cross Entropy)和KL散度(Kullback–Leibler Divergence)是机器学习中极其常用的两个指标,用来衡量两个概率分布的相似度,常被作为Loss Function。本文给出熵、相对熵、交叉熵的定义,用python实现算法并与pytorch中对应的函数结果对比验证。熵(Entropy)此处为方便讨论及与后续实例呼应,所有随机变量均为离散随机变量。定义随机变量x在概率分布p的熵:import torchimport numpy as npfrom torch.
2021-11-11 19:05:52
1950
原创 Pytorch常用的交叉熵损失函数CrossEntropyLoss() (转载学习)
在使用pytorch深度学习框架,计算损失函数的时候经常会遇到这么一个函数:nn.CrossEntropyLoss()该损失函数结合了nn.LogSoftmax()和nn.NLLLoss()两个函数。它在做分类(具体几类)训练的时候是非常有用的。在训练过程中,对于每个类分配权值,可选的参数权值应该是一个1D张量。当你有一个不平衡的训练集时,这是非常有用的。那么针对这个函数,下面将做详细的介绍。什么是交叉熵?交叉熵主要是用来判定实际的输出与期望的输出的接近程度,为什么这么说呢,举个例子:在做分类的训
2021-11-11 18:49:08
371
转载 深度学习中GPU和显存
GPU状态的监控nvidia-smi: 是Nvidia显卡命令行管理套件,基于NVML库,旨在管理和监控Nvidia GPU设备。nvidia-smi命令的输出中最重要的两个指标:显存占用和GPU利用率。显存占用和GPU利用率是两个不一样的东西,显卡是由GPU计算单元和显存等组成的,显存和GPU的关系有点类似于内存和CPU的关系。gpustat:它基于nvidia-smi,可以提供更美观简洁的展示,还可以结合 watch 命令,可以动态实时监控 GPU 的使用情况。直接pip install
2021-10-24 12:46:01
2265
原创 yaml报错TypeError: load() missing 1 required positional argument: ‘Loader‘
添加一下命令即可:
2021-10-24 11:29:35
4189
转载 yolov5训练结果————分类指标的学习
一:weights包含best.pt(做detect时用这个)和last.pt(最后一次训练模型)二:confusion1:混淆矩阵:①:混淆矩阵是对分类问题的预测结果的总结。使用计数值汇总正确和不正确预测的数量,并按每个类进行细分,这是混淆矩阵的关键所在。混淆矩阵显示了分类模型的在进行预测时会对哪一部分产生混淆。它不仅可以让我们了解分类模型所犯的错误,更重要的是可以了解哪些错误类型正在发生。正是这种对结果的分解克服了仅使用分类准确率所带来的局限性。②:在机器学习领域和统计分类问题中,混淆矩阵(英
2021-10-19 21:43:34
5979
转载 pytorch里的pack_padded_sequence和pad_packed_sequence解析
为什么要用pack_padded_sequence在使用深度学习特别是LSTM进行文本分析时,经常会遇到文本长度不一样的情况,此时就需要对同一个batch中的不同文本使用padding的方式进行文本长度对齐,方便将训练数据输入到LSTM模型进行训练,同时为了保证模型训练的精度,应该同时告诉LSTM相关padding的情况,此时,pytorch中的pack_padded_sequence就有了用武之地。直接从文本处理开始假设我们有如下四段文字:1.To the world you may be one
2021-10-01 10:40:32
1363
原创 Linux下批量删除指定后缀的文件 批量解压文件
Linux下批量删除指定后缀的文件find -name "*.tar.gz" -exec rm -f {} \; find 命令查找文件名为 .tar.gz 的文件,并将这些文件替换到 {} 部分从而进行删除。 ‘;’ 前的参数都作为 rm 的参数, ‘’ 则是对 ‘;’ 进行 escape(转义)。Linux下tar命令批量解压文件for tar in *.tar.gz; do tar xvf $tar; donels *.tar.gz | xargs -n1 tar xzvffind
2021-10-01 00:43:52
1048
原创 关于python脚本第一行#! /usr/bin/env python
#!是Unix系统中放在脚本文件开头指定执行该脚本的解释程序的完整路径最好设置成#! /usr/bin/env python系统会自动找到环境中的python路径,如果设置成#! /usr/bin/python#! /bin/python一般情况下可以运行,但如果脚本是在virtualenv环境下运行,会造成未知的错如要直接执行脚本,需要给脚本添加执行权限,执行时文件前加./chmod +x file.py./file.py参考#!/usr/bin/env python与#!
2021-09-30 00:12:12
777
原创 Linux添加PYTHONPATH方法以及3种修改环境变量方法
方法一:用于当前终端export PATH=$PATH:<你的要加入的路径>上面的方法只适用于当前终端,一旦当前终端关闭或在另一个终端中,则无效;方法二:用于当前用户在用户主目录下有一个 .bashrc 隐藏文件,可以在此文件中加入 PATH 的设置如下:(1)gedit ~/.bashrc(2)export PATH=<你的要加入的路径>:$PATH(3)加入多个路径:export PATH=<你要加入的路径1>:<你要加入的路径2>: …
2021-09-30 00:04:43
9587
原创 python中保存列表和字典
python保存列表(1)保存为.npy文件:先将列表转为np.array,再进行保存import numpy as npgraphTable = [ [[0,3],[1,3],1,'1'], #A-B [[1,3],[2,3],1,'2'], #B-C [[2,3],[2,1],2,'3'], #C-H [[1,3],[1,2],1,'4'], #B-D [[1,2],[1,1],
2021-09-28 21:56:20
4235
转载 python遍历目录的方法
简单暴力法-递归假设在 E 盘中,有个名为“Python”的文件夹;该文件夹中也有两个文件夹,分别是“A”和“B”;另外,在“A”文件夹中还有一个 “results.txt” 的文本文件。因此,“Python”文件夹的文件结构如下:Python|--A| |--results.txt|--B我们可以从上述看出,一个文件夹其实是一个树型的数据结构。遍历树的最简单、最暴力的办法就是递归。因此,遍历“Python”的文件夹的代码可以这么写:# -*- coding: UTF-8 -*-impo
2021-09-28 21:28:35
10834
1
原创 Pytorch学习笔记(12)———学习率调整策略
关于学习率调整,pytorch提供了torch.optim.lr_scheduler主要提供了几个类:torch.optim.lr_scheduler.LambdaLrtorch.optim.lr_scheduler.StepLRtorch.optim.lr_scheduler.MultiStepLRtorch.optim.lr_scheduler.ExponentialLRtorch.optim.lr_sheduler.CosineAnneaingLRtorch.optim.lr_sche
2021-09-21 22:29:15
3192
原创 Pytorch学习笔记(11)———迁移学习Transfer Learning
在训练深度学习模型时,有时候我们没有海量的训练样本,只有少数的训练样本(比如几百个图片),几百个训练样本显然对于深度学习远远不够。这时候,我们可以使用别人预训练好的网络模型权重,在此基础上进行训练,这就引入了一个概念——迁移学习(Transfer Learning)。什么是迁移学习迁移学习(Transfer Learning,TL)对于人类来说,就是掌握举一反三的学习能力。比如我们学会骑自行车后,学骑摩托车就很简单了;在学会打羽毛球之后,再学打网球也就没那么难了。对于计算机而言,所谓迁移学习,就是能让现
2021-09-21 12:44:33
549
原创 Python常用
Python改变列表中数据类型的方法方法1:a=['123','345','147']b=[]for i in a: j = float(i) b.append(j)方法2:a=['123','345','147']b=a[:2]b=numpy.array(b,dtype='float_')#把列表的数据类型全部都变为浮点型....方法3:a=['123','345','147']b=[int(i) for i in a]....Python3中新函数(gt
2021-09-21 12:09:49
120
原创 Pytorch学习笔记(10)———训练并测试CNN网络
本章节内容将在CIFAR10数据集上训练一个简单的CNN网络:基于CIFAR-10数据集,训练一个简单CNN网络。保存训练好的模型,测试。使用GPU训练。CIFAR数据集CIFAR数据集可分为CIFAR10, CIFAR100。 CIFAR-10是指包含10个种类, CIFAR-100包含100个种类。CIFAR-10特点:32x32 彩色图像;10个类别;总共60000张图像;50000张训练样本 + 10000张测试样本;每个类别有6000张图像, 10 x 6000 = 60000;
2021-09-12 09:46:11
2769
原创 Pytorch学习笔记(9)———基本的层layers
卷积神经网络常见的层类型名称作用Conv卷积层提取特征ReLU激活层激活Pool池化——BatchNorm批量归一化——Linear(Full Connect)全连接层——Dropout————ConvTranspose反卷积——pytorch中各种层的用法卷积 Convolution卷积类型作用torrch.nn.Conv1d一维卷积torch.nn.Conv2d二维卷积t
2021-09-11 23:50:27
933
原创 Pytorch学习笔记(8)———构建CNN网络(下)
pytorch中构建CNN网络之前的章节中,安装pytorch官网的教程,已经实现了LetNet-5网络的构建以及可视化。本文将继续探索构建CNN网络的方式。将列举4种方式。torch.nn.Module 类torch.nn.Module类是所有神经网络的基类。因此构建一个神经网络,需要继承于torch.nn.Module。神经网络构建的基本格式import torch.nn as nnimport torch.nn.functional as Fclass Model(nn.Modul
2021-09-11 23:31:34
294
原创 Pytorch学习笔记(7)———Pytorch网络结构可视化
使用pytorch定义网络结构之后,为了直观起见,需要可视化网络结构,以图的形式显示出来。pytorch网络结构可视化可以采用tensorboardX。tensorboardX首先需要安装tensorboard, tensorflow。pip install tensorflowpip install tensorboardpip install tensorboardX实验首先定义一个CNN网络,LetNet-5为例import torchimport torch.nn as n
2021-09-11 22:43:45
992
原创 Pytorch学习笔记(6)———定义一个CNN网络
使用pytorch定义一个简单LetNet-5的网络。import torchimport torch.nn as nnimport torch.nn.functional as F'''CNN计算(H - k +2 * P) / S + 1(W - k +2 * P) / S + 1LetNet-5 input: 32*32*3out_conv1 = (32-5)+1 = 28 max_pool1 = 28 / 2 = 14out_conv2 = (14 - 5) + 1
2021-09-11 17:55:44
302
原创 Pytorch学习笔记(5)———图像的加载/读取方式
图像加载问题使用pytorch制作图像数据集时,需要将存储在磁盘、硬盘的图像读取到内存中,涉及到图像I/O问题。在python中,图像处理主要采用的库:skimage, opencv-python, Pillow (PIL)。 这三个库均提供了图像读取的方法。三种主流图像处理库的比较:库函数/方法返回值图像像素格式像素值范围图像矩阵表示skimageio.imread(xxx)numpy.ndarrayRGB[0, 255](H X W X C)cv2c
2021-09-11 17:48:46
1749
原创 Pytorch学习笔记(4)———自定义数据集
在训练深度学习模型之前,样本集的制作非常重要。在pytorch中,提供了一些接口和类,方便我们定义自己的数据集合,下面完整的试验自定义样本集的整个流程。实验过程1.收集图像样本以简单的猫狗二分类为例,可以在网上下载一些猫狗图片。创建以下目录:data-------------根目录data/test-------测试集data/train------训练集data/val--------验证集在test/train/val之下分别创建2个文件夹,dog, cat;cat, dog文件夹下
2021-09-11 17:35:53
1797
原创 Pytorch学习笔记(3)———transforms变换
Why transforms?一般情况下收集到的图像样本在尺寸,亮度等方面存在差异,在深度学习中,我们希望样本分布是独立同分布的,因此需要对样本进行归一化预处理。有时候只能获取到少量的样本数据,获取数量较多的样本不容易。但是样本数量太少训练的模型精度会比较低,为了解决这样的问题,往往需要做数据增加data arguement, 数据增加的途径就是通过一些变换达到目的。pytorch中的transforms在pytorch中,transforms位于 torchvision.transforms
2021-09-11 16:55:25
732
原创 Pytorch学习笔记(2)——Tensor
Tensor的引入对于学习和使用一个开源库/框架,开发者最关心的2个问题:如何传参数,如何调用API接口。 参数一般就是指数据类型/数据结构类型, API接口具体指可以调用的函数、方法。Tensor是pytorh中的数据类型,表示一个N dims张量。在深度学习中,输入/输出数据,网络参数都用Tensor表示。每种深度学习框架都有其数据结构:Framework数据类型特点CaffeBlobN维矩阵TensorflowTensorN维矩阵PytorchTen
2021-09-11 16:06:56
214
转载 pytorch学习笔记(1)——Pytorch 在做什么
Pytorch 解决了什么问题机器学习走上风口,男女老少都跃跃欲试。然而调用 GPU 、求导、卷积还是有一定门槛的。为了降低门槛,Pytorch 帮我们搬走了三座大山(Tensorflow 等也一样):让运算能够在 GPU 上进行(速度可以接受了)让运算能够自动求导(代码更加简单了)让复杂运算能够直接调用(卷积不用自己写了)Pytorch 是怎样设计的在相互借(抄)鉴(袭)之后,大部分神经网络库都是这样搞的:封装一种新的数据结构(一般叫 Tensor )重写 Numpy 中的运算使其能
2021-09-11 15:45:39
591
转载 最新的神经网络求解世界上最难的方程比以往更快
两种新的方法使用深度神经网络求解一整类(entire family)偏微分方程,它们使得复杂系统建模更加容易,并且快了几个数量级。众所周知,偏微分方程PDE,例如控制流体运动行为的方程,很难求解。神经网络也许可以解决。在高中物理中,我们通过作用在一个具有一定质量的物体上的外力(比如说,重力)这样简单的例子学习牛顿第二运动定律,即作用力等于质量乘以加速度。在时间是唯一自变量的理想情况下,第二定律实际上是一个“常微分方程”, 我们可以求解这个方程来计算物体在任意时刻的位置或速度。但在更复杂的情况下,随着时
2021-07-21 15:02:11
2977
原创 Leetcode 42 连续子数组的最大和——动态规划
题目输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。示例1:输入: nums = [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。动态规划是本题的最优解法:时间复杂度O(N)O(N)O(N),空间复杂度O(1)O(1)O(1).解析:状态定义:设动态规划列表dpdpdp,dp[i]dp[i]dp[i]代表以元素nums[i]nums[i]nums[i]为结尾
2021-04-15 16:15:38
215
原创 Leetcode 300 题 最长递增子序列——动态规划
题目给定一个整数数组 nums ,找到其中最长严格递增子序列的长度。子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。示例:输入:nums = [10,9,2,5,3,7,101,18]输出:4解释:最长递增子序列是 [2,3,7,101],因此长度为 4 。思路分析这道题求最长上升子序列,我们可以定义一个 dp 数组,dp[i] 表示以 nums[i] 为最后一个元素时,最长上升子序
2021-04-15 14:19:35
275
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人