自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(29)
  • 收藏
  • 关注

原创 leetcode 数组

刷题

2022-09-08 12:34:06 134 1

原创 CUDA编程 基础与实践 学习笔记(十)

线程束(warp)一个GPU由多个SM组成,一个SM上可以放多个线程块,不同线程块之间并行或顺序执行。一个线程块分为多个线程束,一个线程束由32个线程(有连续的线程号)组成。从更细粒度来看,一个SM以一个线程束为单位产生、管理、调度、执行线程。福特架构之前,每个warp只有一个程序计数器,需要注意分支发散问题。一些严重的分支发散会极大降低性能。从福特架构开始,引入了独立线程调度机制。书里关于这个感觉没有讲的特别明白,没有太搞清楚和分支发散的逻辑关系。https://baijiahao.baidu.

2022-04-24 20:19:36 231

原创 CUDA编程 基础与实践 学习笔记(十四)

CUDA标准库看到了熟悉的cuDNN~

2022-04-23 16:38:29 847 1

原创 CUDA编程 基础与实践 学习笔记(十二)

统一内存管理(某些功能在windows系统下受到限制)好处:使编程更简单,不用手动copy内存。可能提供更好的性能允许超量分配(和虚拟存储类似?)统一内存被当作全局内存来使用的,必须在主机端定义或分配。动态统一内存:静态统一内存:...

2022-04-23 16:20:57 524

原创 CUDA编程 基础与实践 学习笔记(九)

原子操作atomicAdd(&addr, val)这个在SNN部分反向传播的cuda代码里面见过,原子操作也在数据库课程里面学过,是不受其他事务影响的“读-改-写”操作。线程的执行不能保证特定顺序,因此需要原子操作来保证变量读写不受影响。所有的原子操作。第一个地址既可以是全局内存,也可以是共享内存。都是device函数,只能在核函数中使用。...

2022-04-23 11:44:31 333

原创 CUDA编程 基础与实践 学习笔记(八)

共享内存共享内存可以被程序员直接操控,减少对全局内存的访问,实现高效的线程块内部通信,也可以提高全局内存访问的合并度。数字规约算法。可以并行快速算出数组的和。共享内存限定符__shared__ 变量名可以以s_开头,提醒自己这是共享内存变量。所有线程都有共享内存变量的副本,每个副本不一样但共用一个变量名。核函数对于共享内存的操作作用在所有线程上。因为还没有在实际中用过,所以有一个忧虑的点:其实程序一开始就要将数据从全局变量中移到共享内存中,这一步的耗时如何?如果算术强度不大或者不对共享内存进行多次

2022-04-22 00:18:43 368

原创 CUDA编程 基础与实践 学习笔记(七)

条过半…7.1 全局内存的合并和非合并访问从fermi开始,有了SM级别的L1 cache和设备层次的L2 cache. 有了访问全局内存的请求后,先L1,再L2,都不成功的话最后全局内存DRAM中取。一次数据传输在默认情况下是32B.合并度:线程束请求的字节数和该请求导致的数据传输处理的字节数之比。可以视为一种资源利用率的表征。100%则为合并访问,否则为非合并访问。(为啥数据传输处理的字节数会多余请求的字节数,因为要像cpu的访存机制一样从全局取到cache中吗?答:这是基操,不在计算范围内。和访

2022-04-20 23:00:39 554

原创 CUDA编程 基础与实践 学习笔记(六)

6.1 CUDA的内存组织内存存在一种层级结构,大容量的一般latency高,小容量的一般latency低。这一点在计算机组成原理中学到过。这里有个疑问,表中的局部内存是放在芯片外部的,这里怎么画在了内部?还是我没有理解清楚?答:局部变量属于全局变量的一部分所以在芯片外。当寄存器放不下了,就会放在局部变量中,由寄存器做判断。6.2 集中不同类型的内存:(1)全局内存,核函数所有线程都能访问,就是显卡的显存,低速高延迟(速度慢是相对于数据处理而言的)。负责host->device, devic

2022-04-19 23:17:32 951 1

原创 CUDA编程 基础与实践 学习笔记(五)

5.1 CUDA事件计时https://blog.csdn.net/qq_24990189/article/details/89602618注意,从这里之后的代码都要用CHECK来检查runtime API的错误。一个例外:cudaEventQuery(),这个函数可能返回的是cudaErrorNotReady,并不代表真的错了。计时的步骤:先定义两个cudaEvent_t变量,并初始化事件,然后开始record。第五行要query一下事件队列。很容易记忆,都是成对的操作。这里既可以是hos

2022-04-18 22:22:55 579

原创 CUDA编程 基础与实践 学习笔记(四)

CUDA程序的错误检测这个还蛮关键的,当时看deformable convolution的cuda代码就看到很多CHECK(…),一头雾水。现在学到了感觉还蛮开心的,老朋友了~基本就和自己实现的一个try catch语句块一样。书中给出的模板为:https://github.com/brucefan1983/CUDA-Programming/blob/master/src/04-error-check/error.cuh注意这里的后缀名,是.cuh。错误检测分为runtime API 错误检测和

2022-04-17 23:20:07 523

原创 CUDA编程 基础与实践 学习笔记(三)

3.2 CUDA程序的基本框架:cuda runtime api: docs.nvidia.com/cuda/cuda-runtime-api。关于cudaMalloc函数:https://www.cnblogs.com/thkkk/p/14949014.html从引用的角度去理解这个函数更好理解。可以简化地写为double *d_x;cudaError_t cudaMalloc(&d_x, M);cudaError_t cudaFree(void* address);host函数

2022-04-17 22:27:15 387 1

原创 CUDA编程 基础与实践 学习笔记(二)

环境安装过程略2.1-2.2NVCC是CUDA的编译器驱动,将C++代码给C++编译器,例如g++,自己编译剩下的部分。GPU只是一个device,需要gpu来调度。CUDA源文件拓展名为.cu 一个典型的CUDA代码如下:CUDA核函数两个特点:被限定词__global__来修饰必须返回void这两个位置可以混,但一般还是__global__开头。在上述程序中,<<<grid, block>>>是标准写法,grid规定了block的数量,而b

2022-04-17 16:35:46 932 1

原创 CUDA编程 基础与实践 学习笔记(一)

开个坑…用pytorch太不灵活了,学习一下CUDA编程。研究生都第二年了,坚持不下去就有点丢人了奥。书名见标题,樊哲勇老师的著作,清华大学出版社出版。重点看前面十二章。初次阅读,如有理解错误恳请大家批评指正~mua第一章GPU(graphics processing unit),显卡。与CPU的区别:CPU有更多晶体管,用于数据缓存和流程控制,只有少数几个逻辑计算单元,适合完成复杂的逻辑计算;GPU有数千个核心,适合大规模矩阵运算。(GPU的DRAM和CPU的DRAM是通过PCIe总线来

2022-04-17 13:54:48 2875 2

原创 torch.DistributedDataParallel复盘

用多GPU跑torch程序,DDP是最好的工具。在研究过程中基本是单机多GPU而不是多机多GPU,此处对单机多GPU的情况做一个总结。import torch.DistributedDataParallel as DDPimport torch.distributed as dist用法:由于是单机多GPU,所以rank == local_rank. 使用argparse从外部获取–local_rank后,加入dist.init_process_group(backend=‘nccl’) 这一句话

2021-08-02 10:30:25 242

原创 ViT-B参数量计算

ViT-B: layers=12,hidden_size=768,MLP_size=3072,heads=12,params=86M参考:https://blog.csdn.net/weixin_43922901/article/details/1026025571 Patch embeddingpatch_dim = 16163, dim = hidden_size = 768所以参数量为768*7682 Transformer block(attention+FFN)attention:

2021-04-06 21:37:35 10265 1

原创 2021-03-28

配置好了tensorboard. pytorch使用tensorboard需要pip tensorboard,tensorboardX。 tensorflow非必须,提示说不安装tensorflow功能会减少,但目前还没有用到高深的技巧。在服务器端训练好网络后,想要在本机浏览器打开,需要提前将服务器的tensorboard端口重定向到本机的端口,然后在浏览器使用本机的端口才可以打开。-p 端口号16006为本机端口,6006为服务器端的tensorboard端口。写了weekly rev..

2021-03-28 20:18:26 113

原创 2021-03-27

self.qkv = nn.Linear(dim, dim*3, bias) B, N, C = x.shape qkv = self.qkv(x).reshape(B, N, 3, head, head_channel).permutate(2, 0, 3, 1, 4) # 看起来比einops简单一点 q, k, v = qkv[0], qkv[1], qkv[2] attn = (q@k.transpose(-2,-1))*scale attn = attn.softmax(dim...

2021-03-28 11:07:08 365

原创 2021-03-24

from 包(module) import 类 , import 包 前者使用的时候直接用类名即可,后者需要用包名.类名才可以使用拼接一维的tensor:x = torch.tensor([1,2,3])y = torch.tensor([4,5,6])x = x.unsqueeze(0)y = y.unsqueeze(0)z = torch.cat([x,y],dim=0)读了《An Image is Worth 16x16 words, What is a Video Wo.

2021-03-27 10:43:10 64

原创 2021-03-23

https://blog.csdn.net/qyhaill/article/details/103043637 关于优化器的超详细解释。ps -ef 查看运行的命令 kill -9 pid kill -9 -l 停止用户全部进程有yield的是generator object, 当一个函数为生成器对象时,需要调用__next__()函数(python3.x以后)。生成器是一个可以迭代的对象,当yield一个数据后,会挂起,下次调用会从上次挂起的地方开始运行。例如:def gen(): yi.

2021-03-24 09:43:56 50

原创 2021-03-22

logdir = os.path.join(param['log'], cur_time)if not os.path.exists(logdir): os.makedirs(logdir)转载自https://blog.csdn.net/ShuqiaoS/article/details/885599773. python中的__getitem__()方法会让一个类变得可以迭代。转自https://blog.csdn.net/ZT7524/article/details/96479...

2021-03-23 09:15:53 47

原创 2021-3-19

看论文要注意论文未解决的问题和可能的解决方案,今天深刻体会了。top 命令可以查看系统当前的pid, user等信息,可以用来kill -9 强制停止程序.pth 和 .pth.tar都可以直接loadtorch.save() 和 torch.load()一、save()先建立一个字典,保存三个参数:state = {‘net’:model.state_dict(), ‘optimizer’:optimizer.state_dict(), ‘epoch’:epoch}2.调用t..

2021-03-19 22:04:52 38

原创 2021-3-18

nn.Linear(N, * , HinH_{in}Hin​)*的位置可以输入多个维度,但训练时只用最后一个维度的数据。学了个锤子

2021-03-19 19:32:01 57

原创 2021-3-17

师兄看文章太细了,而且印象很深,向他学习。from utils.utils import AverageMeterbatch_time = AverageMeter('Time', ':.2f')data_time = AverageMeter('Data', ':.2f')losses = AverageMeter('Loss', ':.4f')top1 = AverageMeter('Prec@1', ':.4f')top5 = AverageMeter('Prec@5', ':.4f.

2021-03-18 10:52:46 227

原创 2021-03-16学习小记

torch.nn.Identity() 建立一个输入模块, 什么都不做m = nn.Identity(54, unused_argument1=0.1, unused_argument2=False)input = torch.randn(128, 20)output = m(input)print(output.size())#torch.size([128, 20])einops 教程基础:https://github.com/arogozhnikov/einops/blob/ma..

2021-03-17 09:33:41 64

原创 2021.3.10学习记录

ubuntu截屏:ctrl+shift+printscreenubuntu设置主屏幕:xrandr #查看显示器信息xrandr --output name --primary# 设置主屏幕如果想要freeze某些层或参数,用self.register_buffer(name, tensor)。这个函数在反向传播时不会更新参数。读了coordinate Attention for Efficient Mobile Network Design(https://arxiv.or..

2021-03-10 19:48:16 76

原创 基于深度学习的行为识别框架和注意力机制的总结

2DCNNTwo-streamTSNTSM:惊艳,领会精神了,还没认真读。InceptionResnet3DCNNC3DI3DS3D可以由很强的2D 架构拓展而来(2+1)DR(2+1)D注意力机制SENET : channel-wise attentionSKNET: channel-wise+selective RFsNON-local: self-attentionTransformer经典架构:Attention is all you needViTBERT:

2021-03-09 21:53:52 749

原创 Video Transformer Network

Video Transformer Network文章目录Video Transformer Network前言一、背景二、框架总结前言目前,将transformer结构用于行为识别的文章还比较少,比较出名的有这一篇VTN和19年的一篇文章。此处先记录VTN。一、背景近年来,基于CNN的行为识别已经刷爆了UCF101等小的数据集,但在大数据集上的准确率难有很大的突破。Transformer作为一种新的方法,有望突破这个瓶颈。由于使用了自注意力机制,Transformer的参数量极大,难

2021-03-09 20:24:59 535

转载 马氏距离

https://zhuanlan.zhihu.com/p/46626607

2020-09-26 12:28:06 78

原创 python小记

1.print(value,…, sep=’ ‘, end = ‘\n’)2.msg = ‘’’hellothisisatest‘’’print(msg)会原样输出3.print(name,age)print(name+,age)4.format更方便5.input()输入的都是字符串类型6.name = ‘admin’name1 = name此时,name1和name的地址相同7. str1 = ‘abc’ str2 = ‘def’ str1+str2 = ‘abcdef

2020-09-06 11:32:13 76

空空如也

空空如也

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

TA关注的人

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