自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

小小小草儿的博客哟

追梦,启航

  • 博客(166)
  • 问答 (2)
  • 收藏
  • 关注

原创 调试GPU程序错误《CUDA out of memory》

问题描述我们在跑深度学习程序的时候,经常会遇到CUDA out of memory,一些简单的方案比如缩小Batch Size及时的把不用的变量移动到CPU上执行empty_cache()避免GPU变量累积,例如涉及到GPU变量的跨轮次的加操作和append操作如果上述的方法依然没有解决问题,可以通过分析GPU上的变量来进行相关的调试:def debug_memory(): import collections, gc, resource, torch print('max

2021-10-03 18:23:33 797 3

原创 samba入门实践--测试可行

samba入门实践--测试可行1. 需求2. 实践3. 参考链接1. 需求有两台电脑,一个windows,一个ubuntu,在一个局域网中,常常需要进行文件的传输和共享,但是依赖U盘过于繁琐,于是开始部署一个samba服务。2. 实践这里有一个文档:https://ubuntu.com/tutorials/install-and-configure-samba#1-overview其中涉及到samba服务安装和一些常规操作,nano是一个类似于vim的软件,因此也可以使用vim或者gedit。

2021-06-01 17:04:04 837

原创 【PyG进阶学习】一:AGNN算法

一:简介算法全名:Attention-based Graph Neural Network for Semi-supervised Learning论文链接:https://arxiv.org/abs/1803.03735如题目所说,本论文提出的模型是针对于半监督学习领域的一种算法,是一种基于注意力机制的图神经网络。该算法简称为AGNN,在提出AGNN之前,作者介绍了三个算法的大致思路,...

2020-04-25 20:52:55 3512 1

原创 【PyG入门学习】四:构建自己的数据集

1.简介虽然Pytorch-Geometric提供了很多官方数据集,但是当需要构建自己的数据集的时候,就需要对如何使用dataset基类构造自己的数据集有所了解。库中提供了两个构建数据集的基类:torch_geometric.data.Dataset和torch_geometric.data.InMemoryDataset,其中torch_geometric.data.InMemoryDatas...

2020-04-25 17:15:48 9914 2

原创 【PyG入门学习】三:信息传递机制

1.理论基础将普通的卷积过程推广到非规则数据领域一般是通过邻域聚合或者信息传递机制。xi(k−1)∈RFx^{(k-1)}_i∈R^Fxi(k−1)​∈RF表示在第k-1层节点i的节点特征,ej,i∈RDe_{j,i}∈R^Dej,i​∈RD表示从节点j到节点i的边的特征(可选参数),那么图神经网络中的信息传递机制就可以表示为:其中□ 表示一种可微的、置换不变的函数,比如求和、取均值或者最大...

2020-04-16 19:34:10 2423 2

原创 Anaconda环境配置

【1】安装Anaconda3.7。【2】在用户环境变量中配置Anaconda的路径,但是在cmd中无法运行python;于是将其添加到系统环境变量的Path中,可以在cmd中运行。(总结:如果要在cmd上执行某脚本,要将其环境变量添加到系统环境变量的Path下面)【3】添加Anaconda环境变量一共需要三个,分别是Anaconda、Anaconda\Scripts和Anaconda\Lib...

2020-04-12 10:14:21 446

原创 【PyG学习入门】二:入门时遇到的问题

【PyG学习入门】一:入门使用在上一篇的介绍中,主要讲了Pytorch-Geometric的五个基础用例,但是其中存在一些问题还没有解决,下面开始一一解决,本文的重点是如何手动加载PyG的数据集。1.关于创建Data实例时,维度异常的问题问题描述:在Data创建过程中,edge_index表示边的信息,x为节点的特征向量,y为目标值,如果y的维度([num_nodes, *])和节点总数的...

2020-04-10 20:10:55 2006 1

原创 【PyG学习入门】一:入门使用

简介首先说一下这个东西,全名是PyTorch-Geometric,是一个PyTorch基础上的一个库,专门用于图形式的数据,可以加速图学习算法的计算过程,比如稀疏化的图等。在学习PyG的各个大的分支之前,先看一下官方文档给出的学习例子。参考链接:https://pytorch-geometric.readthedocs.io/en/latest/notes/introduction.html...

2020-04-07 22:12:47 5186 5

原创 【图表示学习算法系列】二:NGCF-图结构上协同过滤(1)

[注]括号内容为个人理解内容0.摘要现有的一些算法存在的缺点是没有对隐藏在用户(user)和样本(item)直接的交互信息进行学习编码,没有将其融入到嵌入向量的学习过程。文章中将这种交互信息称为collaborative signal(而这个东西可以理解为用户-样本交互图的拓扑结构,在GCN和GraphSAGE等算法中都是有所体现的)。本文的将用户-样本的交互信息加入到嵌入表达的学习过程中,...

2020-04-05 22:31:02 2974 3

原创 【源码阅读系列】一:GraphSAGE代码阅读(1)

0.前言昨天发了一篇关于GraphSAGE论文的大致讲解,今天对源码进行部分解析,源码链接。作者最原始的训练代码是Tensorflow版本的,这是一个PyTorch版本的,恰好最近学习PyTorch,同时也有一段时间不用Tensorflow了,所以就对PyTorch版本的进行解析(其实主要是PyTorch的源码简单还少)。代码可能一次性看不完,毕竟能力有限~~,本文只放置部分关键代码。分析链接为...

2020-04-01 20:09:37 3779

原创 【图表示学习算法系列】一:GraphSAGE-归纳式图表示学习算法

论文题目:Inductive Representation Learning on Large Graphs论文链接:https://arxiv.org/pdf/1706.02216.pdf论文发表在NIPS20170.摘要在一个大型图中,对节点的低纬度嵌入表示是十分有用的,之前的算法需要图中所有的节点信息且对未知数据的泛化能力一般,这种方法被称为transductive;而本文的方法...

2020-03-31 18:28:49 3498

原创 【重要记录】关于Ubuntu多个版本系统屏幕闪烁亮线的问题

电脑配置戴尔游匣G3pro笔记本(购买时间2020.3.10),显卡为RTX2060,CPU为i7九代处理器,144HZ刷新率,电脑自带Win10系统,硬盘为512SSD+1T机械。问题描述(1)用官方Ubuntu制作U盘启动盘,版本为Ubuntu16,插上U盘进入安装界面(或者是体验界面),出现屏幕闪烁问题(一道道光线,就和信号不好似的)。(2)用官方Ubuntu制作U盘启动盘,版本为U...

2020-03-14 19:13:31 1574

原创 【Numpy使用】numpy中的副本与视图

对于numpy中的array进行操作的时候,可以三种复制方式。1.浅拷贝2.视图方式(view)3.深拷贝(copy)1.浅拷贝直接进行赋值的方式,没有新对象的构造,两次创建的变量是指向相同的内存区域的。import numpy as npa = np.arange(50)b = aprint(id(a), id(b))利用id()验证之后,发现a和b是指向相同内存区域的,只...

2018-11-16 17:42:57 6289

原创 【C++】测试时间

为了精准的获取程序块的运行时间,使用sys/time.h进行时间测试。struct timeval start;struct timeval end;unsigned long Time = 0;gettimeofday(&start, NULL);...gettimeofday(&end, NULL);Time = 1000000 * (end.tv_sec -...

2018-10-08 17:48:01 594

原创 【NCNN源码分析】4.内存分配器(未完成)

NCNN定义内存池分配器实现高效的内存管理。

2018-09-29 15:10:35 1329

原创 【NCNN源码分析】3.基本数据结构分析

对于NCNN,在网络层传递的过程中,进行数据流动的方式是通过自定义的blob实现的,对于blob通过生产者编号和消费者编号进行定义,producer表示输出该blob的网络层编号,consumers表示以该blob作为输入的网络层编号,前者只能是一个制造者,后者可以是多个使用者。class Blob{public: // empty Blob();public:#if ...

2018-09-29 15:08:56 1822

原创 【NCNN源码分析】2.网络层基类

Layer类是所有其他网络层的一个基类,所有的网络层都会从Layer继承,实现互异的计算过程,所有网络层的相似之处在于输入输出的规范以及前向传播的过程。Option是属性类,lightmode表示轻量级模式在网络推理中会不断地进行垃圾回收,num_thread表示线程数量,并且定义两个内存分配器,一个是对基本数据结构blob的内存分配,另一个是对计算空间workspace的内存分配。class...

2018-09-29 14:54:07 2153

原创 【技巧】如何魔改程序可以在x86架构上开发neon?

对于Neon程序的开发,大致上有两种方式1.直接在arm板子上写代码,但是一般容易导致板子严重发热。2.在PC端写完代码,然后直接放到arm上运行,但是如此复杂的指令很容易拼写错误。于是,我们需要对项目进行一次神奇的改动,就是单纯的在我们的工程下面引入arm_neon.h,很显然这样子是可以使用代码补全的,不过是无法实现编译过程的,流程如下:1.找到头文件arm_neon.h,大约是100...

2018-09-26 14:42:00 1440

原创 【NCNN源码分析】1.基本数据类型

对于NCNN而言,核心在于网络的前向推理过程(Inference),其主要数据类型为mat,该数据类型以类的形式定义在src/mat.h中,其中包含了mat的构造函数、析构函数、常见的运算过程。#if __ARM_NEON#include <arm_neon.h>#endif通过宏变量__ARM_NEON控制Neon的使用。 // empty Mat(); ...

2018-09-25 20:03:50 3625 1

原创 【NCNN源码分析】0.前言

从上半年开始,一直就比较关注NCNN的进展,在嵌入式平台上,NCNN可以说是非常好的一个选择了。后面的话,会不断地更新博客,对NCNN源码进行分析,如果理解不到位的地方,欢迎指正!...

2018-09-25 19:44:04 2086

原创 【Linux技术】编译安装Boost(待整理)

参考:https://blog.csdn.net/this_capslock/article/details/47170313

2018-09-25 11:17:16 446

原创 【SSE】存储方式有关的扩展定义关键字__declspec(待整理)

参考:https://blog.csdn.net/iamoyjj/article/details/4195635

2018-09-25 11:08:13 259

原创 【各种技巧】Windows常见的计数器方式(待整理)

参考:https://blog.csdn.net/MoreWindows/article/details/6854764

2018-09-25 10:40:35 492

原创 【Linux技术】libyuv各平台编译(待整理)

参考:https://blog.csdn.net/wszawsz33/article/details/51669719

2018-09-25 10:36:22 974

原创 【SSE】常见的SSE指令以及简单使用(待整理)

参考:https://blog.csdn.net/tercel_zhang/article/details/80002692

2018-09-25 10:21:28 3935

原创 【C++】g++参数介绍(待整理)

参考:https://www.cnblogs.com/lidan/archive/2011/05/25/2239517.html

2018-09-25 10:15:59 388

原创 【汇编编程】查看汇编代码

#include <iostream>using namespace std;int main() { cout << "Hello World!" << endl; return 0;}文件保存为main.cpp,执行g++ -S main.cpp在同级目录下面生成main.s,是原始代码文件的汇编代

2018-09-21 20:10:19 2070

原创 【图像处理】关于图像的多种格式

RGB与BGR在使用OpenCV获取图像的时候,读取进来的数据是BGR格式的,而不是RGB格式。 测试方法://test the color channel对于RGB而言,有两种方式可以进行表示,一种是RGB24,另一种是RGB32。RGB24是三通道的图像,分别是R、G、B,RGB32是四通道的图像,分别是R、G、B、Alpha,第四个通道表示图像的透明度,在图像合成的时候有很...

2018-08-23 15:26:05 584

原创 【OpenCV】使用CMake链接自己路径下面的OpenCV库

\qquad在实际开发中,不一定会拥有sudo权限,所以需要将OpenCV编译在非环境路径下面。之前将OpenCV配置在系统路径下面的时候,在CMake中我们是使用find_package进行查找的,使用CMake链接函数库,无非就是对头文件和动态(静态)链接的引用,只要find_package找到的函数库,就可以直接使用XXX_LIBRARIES和XXX_INCLUDE_DIRSA进行处理。 ...

2018-08-23 15:16:48 7194 1

原创 【各种技巧】在Pycharm中常见的配置问题

无法在Pycharm中使用CUDA,显示libcudnn.so因为在linux环境下面,pycharm可能无法找到CUDA的环境变量,所以需要配置CUDA的环境变量。在Run->Edit Configurations,找到Environment variables,添加LD_LIBRARY_PATH并且设置CUDA的安装位置。无法在Pycharm导入同级文件模块因为Pycharm...

2018-08-08 18:07:23 1374 4

原创 【OpenBLAS】BLAS、LAPACK、ATLAS、OpenBLAS区别

1.BLAS Basic Linear Algebra Subprograms,基础线性代数子程序。定义了一组API,可以进行向量之间乘法、矩阵之间的乘法等。使用Fortran语言开发的。2.LAPACK Linear Algebra Package,线性代数包,底层使用BLAS,使用Fortran语言编写。在BLAS的基础上定义很多矩阵和向量高级运算的函数,如矩阵分解、求逆和求奇异值等。...

2018-07-25 12:00:03 5107

转载 【CUDA】设计优秀的CUDA程序

首先需要对我们的程序进行性能测试: (1)时间:使用CUDA事件的方式进行时间测试。 (2)内存带宽:根据运行时间和传入到核函数的数据内存量进行带宽计算。优秀的CUDA程序: 1. 在给定的数据规模下,选用算法的复杂度不明显高于最优的算法。 2. Active wrap(激活的线程束)的数量能够让SM载满,而且Active block的数量大于2,能够有效的隐藏访存延迟(使用足...

2018-07-19 17:10:19 412

原创 【CUDA】分配内存使用void**

在cuda中分配内存的时候,都是使用void**进行内存的分配。对于一般情况:void memory(int* p) { p = (int*)malloc(10);}int main() { int* a = 0x0001; memory(a); return 0;}此时a指向的地址是0x0001,而且p指向的地址也是0x0001,但是a和p...

2018-07-18 16:21:59 1830

原创 【CUDA】CMakeLists实现CUDA编译

# 设置CMake版本cmake_minimum_required(VERSION 3.5)project(Test1)set(EXECUTABLE_OUTPUT_PATH ../)# 找到CUDA路径并导入头文件find_package(CUDA REQUIRED)include_directories(${CUDA_INCLUDE_DIRS})# 设置C++版本set(CMAK...

2018-07-18 11:16:05 6653 1

原创 【Neon】arm neon指令集指令解析

在arm neon的指令集中,大多数都是单词的缩写加一些特殊的前后缀修饰符。正常指令q 可以对任一向量类型执行运算,并生成大小相同且类型与操作数向量相同的结果向量。长指令l 长指令对双字向量操作数执行运算,并生成四字向量结果。所生成的元素通常是操作数元素宽度的两倍,并属于同一类型。宽指令w 宽指令对一个双字向量操作数和一个四字向量操作数执行运算。所生成的元素和第一个操作数的元素是...

2018-07-17 10:51:39 4731

原创 【Linux技术】ubuntu挂载远程终端文件夹

在对多个设备进行开发的时候,来回切换系统是十分麻烦的。因此可以使用安全协议ssh进行远程连接,使用sshfs进行文件夹挂载。在终端进行远程连接ssh Username@IPaddress挂载远程文件夹sshfs Username@IPaddress:Path mount_path第一个Path表示要进行挂载的远程文件夹,第二个mount_path表示是在本地进行挂载的路径。...

2018-07-14 11:45:43 1321

原创 【行人重识别】行人重识别相关知识

1 Reid技术常见数据集2 Reid技术难点3 Reid数据采集的特点1 Reid技术常见数据集 属性 Market1501 DukeMTMC-reID CUHK03 拍摄地点 清华大学 Duke大学 香港中文大学 图片数量 32217 36441 13164 行人数量 1501...

2018-07-11 10:40:47 1125

原创 【行人重识别】Part-Aligned Bilinear Representations for Person Re-identification论文阅读

Part-Aligned Bilinear Representations for Person Re-identification0 论文简介1 论文主要技术1.1 网络结构1.2 损失函数1.3 计算相似度1.4 对比普通模型2 实验与分析2.1 训练过程2.2 复现细节2.3 验证数据集3 解决的问题及对应方案0 论文简...

2018-07-10 15:23:59 3150 2

原创 【C++学习】explicit修饰构造函数

在C++中,可以使用关键字explicit对类的构造函数进行修饰。被修饰的构造函数的类,不能发生相应的隐式类型转换,只能以显示的方式进行类型转换。官方解释:禁止隐式调用类内的单参数构造函数。(1)该关键字只能用于修饰类内部的构造函数。 (2)该关键字修饰的构造函数只能是单参数构造函数,对于多参数构造函数是无效的。 (3)禁止隐式调用拷贝构造函数。 (4)禁止类对象之间的隐式转换方式。...

2018-07-09 17:40:20 1178

原创 【C++学习】C++多线程初步入门---thread库

对于多线程编程,一个是并行,另外一个是并发。并行是指两个或多个独立的操作同时进行。并发是指在一个时间段内执行多个操作。例如,在常见的四核四线程可以并行四个线程,但是对于四核八线程是使用了超线程技术,把一个物理模拟为两个逻辑核心。1 并发编程的方法1.1 多进程并行1.2 多线程并行2 C++11 线程的使用方式3 线程管理3.1 启动一个线程3.2 异常情况下等待线程完...

2018-07-09 17:25:51 1240

空空如也

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

TA关注的人

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