- 博客(87)
- 收藏
- 关注
原创 全网最强ViT (Vision Transformer)原理及代码解析
今天我们来详细了解一下Vision Transformer。基于timm的代码。1. Patch EmbeddingTransformer原本是用来做NLP的工作的,所以ViT的首要任务是将图转换成词的结构,这里采取的方法是如上图左下角所示,将图片分割成小块,每个小块就相当于句子里的一个词。这里把每个小块称作Patch,而Patch Embedding就是把每个Patch再经过一个全连接网络压缩成一定维度的向量。这里是VisionTransformer源代码中关于Patch Em...
2021-10-30 02:16:05
26167
13
原创 一篇文章看懂Softmax
Softmax,这个概念参考[1]解释的非常仔细,这里只做简述,先上公式:这公式是啥子意思呢?先看一个应用:假如我们现在有一个分类任务,如果模型足够理想,输入一张猫图,输出[1, 0],输入一张狗图,输出[0, 1]。通常这种任务,前面会是一个深度卷积神经网络,最后会有一个全连接层,经过这个全连接层会得到图的特征向量(embedding),我自己喜欢管embedding叫特征向量。上图中最后得到的特征向量是[1.2, 0.3],再经过softmax:得到了[0....
2020-11-11 20:05:30
749
转载 Linux下链接相互依赖的.a文件遇到undefined reference问题总结
最近,在Linux下静态链接多个相互依赖的.a文件时,遇到各种诡异的undefined reference问题,最后发现,是.a文件的链接顺序竟然非常重要!转载自:http://ticktick.blog.51cto.com/823160/431329最近在Linux下编程发现一个诡异的现象,就是在链接一个静态库的时候总是报错,类似下面这样的错误:1
2013-10-14 02:07:34
1790
原创 linux命令ORshell脚本语言OR Makefile文档里一些命令解析
1.将1(标准输出)2(标准出错)的信息不显示出来. 1>/dev/null 表示将命令的标准输出重定向到 /dev/null 2>/dev/null 表示将命令的错误输出重定向到 /dev/null 2>/dev/null & &表示后
2013-10-07 16:24:04
1817
原创 CUDA函数库调用问题解决
问题:装好CUDA5.5, samples也安装成功,编译也成功了,但是在运行程序的时候出问题了。譬如进入NVIDIA_CUDA-5.5_Samples/7_CUDALibraries/ 目录中,执行 ./conjugateGradientPrecond 结果报错了,居然报错了:./conjugateGradientPrecond: error while loading shar
2013-09-26 13:59:22
6053
原创 跟我一起写Makefile 博客索引
最近在看这个系列的博客,但是看得挺凌乱的,就写个索引,到时候有什么不会,回头找起来也方便。参考链接:http://blog.csdn.net/haoel/article/details/2895跟我一起写Makefile (十) 四、foreach 函数 这个函数是用来做循环用的http://write.blog.csdn.net/post
2013-09-25 19:49:50
1007
翻译 CUDA samples 第三章 sample reference 概况
示例代码分为下列几类:1. Simple Reference 基础CUDA示例,适用于初学者, 反应了运用CUDA和CUDA runtime APIs的一些基本概念.2. Utilities Reference 演示如何查询设备能力和衡量GPU/CPU 带宽的实例程序。 3. Graphics Reference 图
2013-09-16 18:23:22
3605
翻译 CUDA samples 2.3节 用CUDA示例来创建CUDA项目
2.3.1. Creating CUDA Projects for Windows略2.3.2默认的samples的安装路径 是 NVIDIA_CUDA_5.5_Samples 并且示例程式的分为六类 : 0_Simple,1_Utilities, 2_Graphics, 3_Imaging, 4_Finance, 5_Simulations,6_Advanced, 7_CUDALi
2013-09-16 17:18:35
3246
原创 Ubuntu12.04 cuda5.5安装
预处理步骤: 首先确认你的电脑装了一个可以运行CUDA程序的GPU。lspci | grep -i nvidia另外要确认linux版本和gcc版本具体参考链接:http://docs.nvidia.com/cuda/cuda-getting-started-guide-for-linux/index.html下载Nvdia Toolkit 下载链接:http://
2013-09-16 14:12:18
6183
2
翻译 系数线性系统地加速处理
(部分翻译)Nvidia 数值库团队, 利用CUSPARSE和CUBLAS两个函数库针对 incomplete-LU和Cholesky-preconditioned interative methods 取得了两倍左右的加速。文章集中在介绍 Bi-Conjugate Gradient 和 stabilized Conjugate Gradient iterative methods 两
2013-09-15 12:29:47
1053
翻译 CUSPARSE 第三章 CUSPARAE索引和数据格式
(纯属自学笔记,部分翻译,不会翻译的不翻译)3.1 索引基本格式 该函数库支持 zero- and one-based 索引. The index base 是通过 cusparseIndexBase_t 选择, 且是一个独立参数,或者是矩阵形容器 cusparseMatDescr_t type的一部分3.2 向量格式 略3.3 矩阵格式 略
2013-09-13 11:45:20
1567
翻译 CUSparse 第二章 使用CUSPARSE API
2.1 2.1 线程安全 这个库是线程安全的,并且函数可以被多个主机线程调用。2.2 标量参数 标量参数可以在主机和设备之间传递。 极少数函数的返回值是标量,譬如doti()和nnz().和其他返回数据类型一样,标量参数返回时要等到GPU上运作完成才能确定。所以当主机读取数据时应当要做适当的同步。 这个特点允许CUSPARAE函数
2013-09-12 02:38:20
2389
翻译 CuSparse 第一章
(部分翻译)第一章 介绍 1. 命名惯例 CUSPARSE 包含了一系列处理稀疏矩阵的基本的线性代数子程式。是cuda函数库的一部分,从C,C++中调用。 该库例程可以分为四类: 第一层:在稠密向量格式和稀疏矩阵向量格式之间的操作 第二层:在稀疏矩阵格式和稠密向量格式之间的操作
2013-09-11 23:36:39
3956
原创 cuda 细节提要
double类型若使用double的数据类型,自己编译一下程序,你会发现warning : Double is not supported. Demoting to float。但是如果你在编译时候自己加上-arch sm_13,有些gpu是支持double的。
2013-08-06 10:02:14
990
转载 linux主机之间远程复制目录
linux主机之间远程复制文件或目录命令: 复制文件: (1)将本地文件拷贝到远程 scp 文件名 --用户名@计算机IP或者计算机名称:远程路径 (2)从远程将文件拷回本地 scp --用户名@计算机IP或者计算机名称:文件名 本地路径 复制目录: (1)将本地目录拷贝到远程 scp -r 目录名 用户名@计算机IP或者计算机名称:远程路径 (2)从远程将目录
2013-08-02 13:44:38
994
转载 linux命令创建和修改用户及密码
linux下创建用户1、添加ftp用户useradd ftpname -d /home/ftppasswd ftppwd以下操作都以root权限进行:service vsftpd start 启动Linux自带的FTP服务2. 添加普通用户 useradd nagios –d /usr/local/nagioschown nagios.nagios /usr/loc
2013-07-15 16:43:10
820
转载 Linux下C编程undefined reference to'exp'问题的解决
我在Linux下编了一个程序,使用数学函数,可是始终通过不了.后来,我用exp函数,好像gcc都编译不过去.程序很简单:#include ;#include ;main(){printf("%f", exp(3));} 出错消息是:undefined reference to'exp'这不是标准库函数吗?怎么用不了?解决答案是:gcc -lm fil
2013-07-15 15:30:43
3697
原创 《Programming Massively Parallel Processors》Chapter5 习题解答
<!--@page {margin:0.79in}p {margin-bottom:0.08in}-->自己做的部分习题解答,因为时间关系,有些马虎,也不全面,欢迎探讨或指出错误5.1 Consider the matrixaddition in Exercise 3.1. Can one use shared memory to reduce
2013-07-04 11:02:08
2801
翻译 __device__ __global__ __host__
__device__ 标记的函数从一个在器件中执行的函数呼叫,在器件中执行 __global__ 表示该函数从一个在主机中执行的函数呼叫,在器件中执行__host__表示在主机中呼叫,在主机中执行的函数
2013-07-04 10:58:27
3804
原创 thread block grid
grid里面包含block,block里面包含threadgrid里面所有的block都是同样大小的, 每个block最多可以有1024个thread。blockDim表示一个block里面thread的数量。block里面每个thread都有一个独一无二的编号,threadIdx参考文献:《programming massively parallel pro
2013-07-04 10:43:11
1170
翻译 CUDA Memories--CUDA记忆体(翻译+整理+测试)
一边学习一边记录(本文中英结合,专业名词统统不翻译) 在CUDA里,host和devices有不同的记忆体空间。 首先呢,CUDA的memory有很多种类啦 1. Global memory 2. Constant memory 这两种memory可以由CPU上运行的函数呼叫读写。 Global memory 这个,学过一
2013-07-01 15:35:20
1475
原创 将内存扩大缩小的函数 realloc(){}
realloc 用过很多次了。无非就是将已经存在的一块内存扩大。char* p = malloc(1024);char* q = realloc(p,2048);现在的问题是我们应该如何处理指针 p。 刚开始按照我最直观的理解,如果就是直接将 p = NULL;。 到最后只需要释放 q的空间就可以了。因为最近在做个封装。结果在做单元测试的时候发现。有时候我在 free(q); 的时
2013-05-27 21:27:35
2997
转载 Makefile 写法整理
一般来说,无论是C, C++ ,还是pas, 首先要把源文件编译成中间代码文件,在Windows下也就是.obj文件,UNIX是.o文件,即Object File,这个动作叫做编译(compile)。然后再把大量的Object File合成执行文件,这个动作叫做链接(link)。 编译时,编译器需要的是语法的正确,函数与变量的声明的正确,对于后者,通常是你需要告诉编译器头文
2013-05-13 15:01:22
801
转载 Householder relections
豪斯霍尔德变换(Householder transformation)又称初等反射(Elementary reflection),最初由A.C Aitken在1932年提出[1]。Alston Scott Householder在1958年指出了这一变换在数值线性代数上的意义[2]。这一变换将一个向量变换为由一个超平面反射的镜像,是一种线性变换。其变换矩阵被称作豪斯霍尔德矩阵,在一般内积空间中
2013-04-30 21:15:34
2068
转载 关于size_t, ptrdiff_t, size_type, difference_type
size_t是unsigned类型,用于指明数组长度或下标,它必须是一个正数,std::size_tptrdiff_t是signed类型,用于存放同一数组中两个指针之间的差距,它可以使负数,std::ptrdiff_t.size_type是unsigned类型,表示容器中元素长度或者下标,vector::size_type i = 0;difference_type是signed类型,
2013-04-29 10:53:16
894
转载 GCC编译多个C文件
下午做了一个小的程序,定义了三个文件:getop.h,getop.c,calcDemo.c显然getop.h是针对getop.c的,而在calcDemo.c中要调用到getop.c中的东西。首先给出每个文件的结构图,为了更简单的说明,函数都空实现。getop.h:#ifndef _H_GETOP#define _H_GETOP int getch(void)
2013-04-21 22:43:56
2598
转载 解决xshell与vim显示中文乱码的问题
一般而言,乱码多是由于编码问题引起 的,在windows系统中,大多数情况下中文编码采用的是big5或utf-8两种,但是默认情况下确是big5,如果这样的话,请首先用locale命令查看你linux系统当前语系,执行LANG=zh_CN.big5修改语系。这里以utf8编码为例。打开一个用utf8编码的中文文件,在vim中,执行:set encoding=utf-8 termencodi
2013-04-07 16:35:51
1343
翻译 CUDA by Example 第三章 部分翻译实践 GPU器件参数提取
由于这本书内容实在是多,很多内容和其他讲解cuda的书又重复了,所以我只翻译一些重点,时间就是金钱嘛,一起来学cuda吧。如有错误,欢迎纠正由于第一章第二章暂时没时间仔细看,我们从第三章开始不喜欢受制于人,所以不用它的头文件,所有程序我都会改写,有些程序实在是太无聊,就算了。//hello.cu#include#includeint main( void )
2013-04-05 19:41:13
2789
转载 Vim命令
本章提供足够的信息使你用够使用 Vim 来做基本的编辑。这里提供的方法不一定是高效 快捷的。但起码是有效的。花些时间去练习这些命令,这是后面的知识的基础。 |02.1| 第一次运行 Vim |02.2| 插入文本 |02.3| 移动光标 |02.4| 删除字符 |02.5| 撤销与重做 |02.6| 其它编辑命令 |02.7| 退出 |02.8|
2013-03-21 18:20:23
715
原创 cuda4.0编程指南 读书摘要
本篇实际为方便自己写程序的时候索引。不需要的请绕过。 1. threadIdx -----P7 2. threadsPerBlock -----P8 3. blockIdx , blockDim -----P9 4. syncthreads 同步 ----P10 5.cuda
2013-03-11 20:01:36
1172
转载 Windows下VirtualBox 共享文件夹设置
原文地址:VirtualBox 共享文件 原文作者:边城浪子环境:主机(host):windowsXP虚拟机:VirtualBox客户机 (guest):slackware/ubuntu/... 看过我上一篇写的为VirtualBox 安装additions的朋友应该很清楚,设置VirtualBox共享文件夹之前需要安装VirtualBox Guest Addi
2013-01-23 17:32:06
631
转载 strcmp
原型:extern int strcmp(const char *s1,const char * s2); 用法:#include string.h> 功能:比较字符串s1和s2。 一般形式:strcmp(字符串1,字符串2) 说明: 当s1 当s1==s2时,返回值=0 当s1>s2时,返回值>0
2012-12-28 23:34:03
518
转载 strncmp 串比较
函数名: strncmp 功 能: 串比较 用 法: int strncmp(char *str1, char *str2, int maxlen); 说明:此函数功能即比较字符串str1和str2的前maxlen个字符。如果前maxlen字节完全相等,返回值就=0;在前maxlen字节比较过程中,如果出现str1[n]与str2[n]不等,则返回(str1
2012-12-28 23:12:09
589
转载 tolower 把字符转换成小写字母,非字母字符不做出处理
头文件:在VC6.0可以是ctype.h或者stdlib.h,常用ctype.h用 法: int tolower(int c);说明:和函数int _tolower( int c );功能一样,但是_tolower在VC6.0中头文件要用ctype.hC程序例: #include #include #include #include int
2012-12-28 22:53:57
927
转载 sscanf 读,分配和修改字符串的函数
名称: sscanf() - 从一个字符串中读进与指定格式相符的数据. 函数原型: int sscanf( const char *, const char *, ...); int sscanf(const char *buffer,const char *format,[argument ]...); buffer 存储的数据 format 格式控
2012-12-28 22:42:43
774
翻译 fopen vs fopen64
fopen64是linux特有 的,fopen64()函数和fopen()函数相同的,只是底层的文件描述符创建是带有O_LARGEFILE标志。fopen64()函数为了加载大型文件所做的扩展。fopen returns FILE*, stream.fopen64 returns int, file descriptor 通常情况下,我们用fopen()函数来读问
2012-12-28 20:35:41
11497
1
转载 C语言:为什么用fprintf(stderr,"Error");比printf("Error");更好?
一般情况下,你这两个语句运行的结果是相同的,没有区别,只有一下情况才有区别:运行你的程序的时候,命令行上把输出结果进行的转向,比如使用下面的命令把你的程序a.c运行的结果转向到记事本文件a.txt:a.exe > a.txt在这样的情况,如果使用printf输出错误信息,会保存到a.txt文件里面,如果使用fprintf输出错误,会显示在屏幕上。
2012-12-28 19:40:44
1439
转载 带参数的main函数
运行方法: (假设你的程序为Untitled1.exe) 打开命令提示符: 转到你的Untitled1.exe的目录, 输入下列命令: Untitled1.exe a basdfsa 1314324 -k -f 回车就可以运行了。 这时,在Main函数里定义的 int main(int argc, char *args[]) 里的argc = 6,就是表示有
2012-12-27 22:52:25
641
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人