- 博客(160)
- 收藏
- 关注
原创 关于使用template时的错误注意
上面的写法中,第三种是很明显的错误,原因是当前的形参是一个容器,所以使用container.cbegin()返回的是一个指向容器中第一个元素的迭代器,但是如果使用int*去接的话很明显出错,即使是加了const类型的指针,所以从这个角度来看,迭代器和指针差不多,但是从根本上来说,有本质的区别。也即编译器当前的是什么类型的名称,但是在类中不需要使用typename,如果不是类中,而是在函数中,则要一定使用typename自动推断当前的类型名称。
2023-11-10 22:08:57
391
原创 pytorh模型训练、测试
第一种方式:使用cuda,只需要给模型、损失函数、训练数据、测试数据调用cuda即可,但是这种情况下必须使用if torch.cuda.is_available():判断是否存在cuda,没有的话还是使用cpu,但是没有使用torch.cuda.is_available()判断的话会出错,导致程序无法运行。第一条数据 (tensor([[[0.6196, 0.6235, 0.6471, ..., 0.5373, 0.4941, 0.4549],
2023-11-04 15:52:29
764
原创 使用pytorch处理自己的数据集
这里使用tensorboard的作用是为了更好的展示数据,但是对于函数的使用,比如上面的add_image中的参数,最好的方式是点击源码查看其对应的参数类型,然后根据实际需要将它所需的数据类型丢给add_image就好,而在源码中该函数的参数中所要求的图片类型必须是tensor类型或者是numpy,所以想要使用tensorboard展示数据就首先必须使用numpy或者使用transforms.Totensor将其转化为tensor,然后丢给add_image函数。必须传入的是tensor数据类型。
2023-11-02 22:56:49
1012
原创 生成对抗网络
我们提出了一个新的框架,通过一个对抗的过程来估计生成模型,在此过程中我们同时训练两个模型:一个生成模型G捕获数据分布,和一种判别模型D,它估计样本来自训练数据而不是G的概率。G的训练程序是最大化D犯错的概率,这个框架对应于一个极小极大的双人游戏。在任意函数G和D的空间中,存在唯一解,G可以重现训练数据分布,D处处等于1/2。在G和D由多层感知器定义的情况下,整个系统可以通过反向传播进行训练。在训练或生成样本的过程中,不需要任何马尔科夫链或展开的近似推理网络。
2023-10-18 22:23:33
799
1
转载 An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale
尽管 Transformer 已经成为自然语言处理任务事实上的一种标准,但是在计算机视觉上的应用还是非常有限。在计算机视觉领域,注意力机制要么和卷积神经网络一起使用,要么在保持原有网络结构不变的情况下替换局部的卷积运算(例如 ResNet-50 中把其中每某一个残差块使用注意力机制替代)。本文证明对卷积神经网络的依赖不是必要的,原始的 Transformer 可以直接应用在一系列小块图片上并在分类任务上可以取得很好的效果。
2023-10-18 12:58:17
173
转载 Quo Vadis, Action Recognition? A New Model and the Kinetics Dataset
这篇论文最大的贡献就是提出了kinetics数据集,这个数据集与之前的行为识别数据集相比有质的飞跃。同时文章也提出一种将2D卷积网络扩张成3D卷积网络的思想,使3D卷积网络可以收益于2D卷积网络的发展。我们知道在ImageNet上预训练的2DCNN对于其他的视觉任务(比如目标检测)是很有帮助的,那么在大的行为识别数据集上预训练的网络在其他视频任务中也可能很有帮助,但是现在没有大的行为识别数据集,怎么办?于是文章首先发布了一个超大的trimmed行为识别数据集kinetics。
2023-10-18 11:12:45
137
转载 图像分类经典网络架构
我们用conv代表卷积层、bn代表批量归一层、pool代表汇合层。最常见的网络结构顺序是conv -> bn -> relu -> pool,其中卷积层用于提取特征、汇合层用于减少空间大小。随着网络深度的进行,图像的空间大小将越来越小,而通道数会越来越大。
2023-10-14 18:24:21
456
原创 transformers架构实现
query, key, value = [l(x).view(batch_size, -1, self.head, self.d_k).transpose(1, 2) for l, x in zip(self.linears, (query, key, value))] # 将1、2维度进行调换,目的是让句子长度维度和词向量维度靠近,这样注意力机制才能找到词义与句子之间的关系。:param size: 生成向后遮掩的掩码张量,参数 size 是掩码张量的最后两个维度大小,它的最后两个维度形成一个方阵。
2023-10-14 17:28:17
194
原创 解码器层和解码器
解码器层是解码器的组成单元,每个解码器层根据给定的输入向目标方向进行特征提取操作,即解码过程根据解码器的结果以及上一次预测的结果,对下一次可能出现的值进行特征表示。
2023-10-13 12:32:27
349
原创 子层连接结构
输入到每个子层以及规范化层的过程中,还使用了残差连接(跳跃连接),因此我们把这一部分整体结构叫子层连接(代表子层及其连接结构),在每个编码器层,都有两个子层,这两个子层加上周围的链接结构就形成了两个子层连接结构。
2023-10-11 17:33:17
180
原创 learn规范化层
它是所有深层网络模型都需要的标准网络层,因为随着网络层数的增加,通过多层的计算后参数可能出现过大或者过小的情况,这样可能会导致学习过程中出现异常,模型可能收敛非常慢,因此都会在一定层数后接入规范化层进行数值的规范化,使其特征数值在合理范围内。
2023-10-11 15:59:18
130
原创 C++中的运算符重载
C++中可以重定义或重载大部分 C++ 内置的运算符。这样,我们就能使用自定义类型的运算符。重载的运算符是带有特殊名称的函数,函数名是由关键字 operator 和其后要重载的运算符符号构成的。与其他函数一样,重载运算符有一个返回类型和一个参数列表。
2023-10-10 22:23:18
252
转载 Attention Is All You Need
RNN,LSTM,GRU,Gated Recurrent Neural Networks,在序列建模和转换任务上已牢固确立为最先进的方法,比如语言模型和机器翻译。此后,许多努力继续推动循环语言模型和编码器-解码器架构的界限。循环模型通常沿输入和输出序列的符号位置考虑计算。将位置与计算时间的步骤对齐,它们生成一系列隐藏状态 ht,作为先前隐藏状态 ht−1 和位置 t 输入的函数。这种固有的顺序性质阻碍了训练样本中的并行化,这在较长的序列长度下变得至关重要,因为内存约束会限制了样本的批处理。
2023-10-09 12:11:20
233
原创 多头注意力机制
从多头注意力的结构图中,貌似这个所谓的多个头就是指多组线性变换,但是并不是,只使用了一组线性变换层,即三个变换张量对 Q、K、V 分别进行线性变换,这些变化不会改变原有张量的尺寸,因此每个变换矩阵都是方阵,得到输出结果后,多头的作用才开始显现,每一个头开始从词义层面分割输出的张量,也就是每一个头都先获得一组 Q、K、V进行注意力机制的计算,但是句子中的每个词的表示只获得一部分,也就是只分割了最后一维的词嵌入向量,这就是所谓的多头,将每个头获取的输入送到注意力机制中就形成了多头注意力机制。
2023-10-08 22:11:19
16714
1
原创 动态规划问题
舍友正在健身,每天必须摄入不同食物的价值营养,但是每天摄入食物的总重量有一定限制,否则健身效果很差。那么如何在摄入食物重量一定的情况下,如何选择搭配食物以获取最大的营养价值?
2023-10-05 19:11:42
63
原创 注意力机制
它需要三个指定的输入Q(query)、k(key)、V(value),然后通过公式得到注意力的计算结果,这个结果代表 query 在 key 和 value 作用下的表示。通常这个计算表达式是多样的Q、K、V的比喻解释假如有一个问题:给出一段文本,使用一些关键词对它进行描述为了方便统一正确的答案,这道题可能预先已经给大家写出一些关键字作为提示。其中这些给定的提示词就可以看作为 key,而整个文本信息就相当于是 query。而 value 可以比作你看到这段文本信息之后自己得到的答案信息。
2023-10-05 19:02:32
604
原创 learn掩码张量
attn_shape = (1,3,3) # 定义掩码张量的形状sub_mask = np.triu(np.ones(attn_shape), k = 0).astype('uint8') # 定义一个上三角矩阵,元素为1,再使用其中的数据类型变为无符号8位整形,其中 k=1 是将上三角矩阵的所有为 1 的元素向上移动一行[[[1 1 1][0 1 1][0 0 1]]]
2023-10-04 00:33:05
274
原创 位置编码器
""":param d_model: 词嵌入的维度:param dropout: 随机失活,置0比率:param max_len: 每个句子的最大长度,也就是每个句子中单词的最大个数"""pe = torch.zeros(max_len,d_model) # 初始化一个位置编码器矩阵,它是一个0矩阵,矩阵的大小是max_len * d_modelposition = torch.arange(0,max_len).unsqueeze(1) # 初始一个绝对位置矩阵。
2023-10-01 12:16:43
1283
原创 transformers简介
处理序列任务的时候,首要的选择就是RNN。但是RNN主要思想就是把前一时刻的输出作为这一时刻的输入,因此导致RNN在训练过程中后一个时刻的输入依赖于前一个时刻的输出,无法进行并行处理,导致模型训练的速度慢,比CNN模型要慢几倍到十几倍。后来又提出使用CNN来替代RNN,速度上确实取得了一定的优势,但在面对更长的序列的时候,CNN的卷积核限制了视野的大小,导致无法看到更全局的信息。最后直到self-Attention层的出现,才解决了这样的问题,也就是后来的transformer。
2023-09-30 15:30:06
434
原创 使用transformers进行端到端的目标检测
创建一个二维矩阵,其中的行表示预测框,列表示真实框,矩阵的每个元素表示两个框之间的匹配得分。4. 对于矩阵的每一行,使用匈牙利算法找到与该行对应的最佳匹配,即在每一行找到与当前预测框具有最大IoU的真实框,并将其匹配得分记录下来。算法的主要目标是在一个二维矩阵中找到一组元素,使得每一行和每一列中的元素都只能在选定的组合中出现一次,并且这组元素的和达到最大或最小。5. 接着,在矩阵的每一列中,找到与该列对应的最佳匹配,即在每一列找到与当前真实框具有最大IoU的预测框,并将其匹配得分记录下来。
2023-09-23 11:03:14
414
原创 AlexNet模型
大规模图像识别挑战赛从包含21841个类别、14197122张图片的ImageNet数据集中挑选了1000类的1200000张作为训练集,获得了最优的结果,“top-1 and top-5 error rates of 37.5% and 17.0%” (Krizhevsky 等, 2017, p. 84)“The neural network, which has 60 million parameters and 650,000 neurons, consists of five conv
2023-09-09 18:14:19
359
原创 torch.cuda.is_available() 解决方
原来是下载的是 CPU 版本,进入 pytorch环境,使用命令conda uninstall pytorch卸载 cpu 版本的。使用命令conda create -n pytorch python=3.6创建一个名为pytorch的环境,解释器使用3.6的。没有找到匹配的版本,所以是11.7的版本太高,修改为 11.3版本,继续下载。显卡配置失败,进入 base 环境,使用 conda list 命令。复制上面的命令,在pytorch环境下载。进入pytorch官网,选择下列选项。
2023-09-07 10:55:12
1667
原创 循环神经网络(基础篇)
h0表示先验知识CNN+FC 为 h0,作为 RNN 的输入,这样就完成了图像到文本的转化,如果没有先验知识,直接初始化 h0 为全零h1 和 x2 作为下一个 RNN 的输入,经过 RNN 的线性计算得到 h2,接着以此类推得到 h3、h4....右边的每一个 RNN Cell 是同一个线性层,这个过程中拿一个线性层反复参与计算,也就是线性层中的前一个权重会参与到后面的计算中构建一个复杂的计算图。
2023-07-30 22:44:53
652
1
原创 卷积神经网络(高级篇)
之前在动手学习深度学习中用到的类似于 LeNet5 这种简单的串行网络结构。.其余的还有 AlexNet和 VGG 这种串行结构的网络
2023-07-30 22:44:06
419
原创 卷积神经网络(基础篇)
前一部分叫做Feature Extraction,后一部分叫做classification(2)、每一个卷积核它的通道数量要求和输入通道是一样的。这种卷积核的总数有多少个和你输出通道的数量是一样的(3)、卷积(convolution)后,C(Channels)变,W(width)和H(Height)可变可不变,取决于是否padding。subsampling(或pooling)后,C不变,W和H变。
2023-07-30 22:43:25
321
原创 多分类问题
softmax层先对0.2、0.1、-0.1分别取对数,得到e^0.2 = 1.2, e^0.1 = 1.1,e^-0.1 = 0.9,然后sum = e^0.2 + e^0.1 + e^-0.1 = 3.2,因此 Y^1 = e^0.2/(e^0.2 + e^0.1 + e^-0.1) = 1.2 / 3.2 = 0.38,以此类推其他的,得到 Y^2 = 0.34,Y^3 = 0.28。
2023-07-30 22:42:22
360
原创 加载数据集
DataSet 是抽象类,不能实例化对象,主要是用于构造我们的数据集2、DataLoader 需要获取DataSet提供的索引[i]和len;用来帮助我们加载数据,比如说做shuffle(提高数据集的随机性),batch_size,能拿出Mini-Batch进行训练。它帮我们自动完成这些工作。DataLoader可实例化对象。3、__getitem__目的是为支持下标(索引)操作4、注意事项。
2023-07-30 22:41:41
293
原创 处理多维特征的输入
torch.nn.functional.sigmoid是一个函数,可以直接调用,它和torch.sigmoid函数的功能相同。总的来说,torch.sigmoid和torch.nn.functional.sigmoid是可以直接使用的函数,而torch.nn.Sigmoid是一个类,需要实例化后才能调用。4、本算法中torch.nn.Sigmoid() # 将其看作是网络的一层,而不是简单的函数使用 ,目的是为了在 forward函数中直接调用Sigmoid()函数将线性前一步中的线性计算转化为非线性。
2023-07-30 22:41:08
327
原创 梯度下降算法
本算法中的随机梯度主要是指,每次拿一个训练数据来训练,然后更新梯度参数。梯度下降法中梯度总共更新100(epoch)次。是对梯度下降算法和随机梯度下降算法的折中算法,既有梯度下降算法时间复杂度低的优点,也有随机梯度下降算法学习性能高的优点!所以目前深度学习算法底层的梯度下降算法大多指的是。cost是计算所有训练数据的损失,loss是计算一个训练数据的损失。2、梯度函数gradient()由计算所有训练数据的梯度更改为计算一个训练数据的梯度。随机梯度下降法在神经网络中被证明是有效的。
2023-07-30 22:37:05
172
转载 序列模型和注意力机制(Sequence models & Attention mechanism)
例如,首先根据输入语句,找到第一个翻译的单词“Jane”,然后再找第二个单词“is”,再继续找第三个单词“visiting”,以此类推。这种概率表达式还存在一个问题,就是机器翻译的单词越多,乘积形式或求和形式得到的概率就越小,这样会造成模型倾向于选择单词数更少的翻译语句,使机器翻译受单词数目的影响,这显然是不太合适的。显然,上述机器翻译的每个单词都出现在参考翻译里,其中,分母为机器翻译单词数目,分子为相应单词是否出现在参考翻译中。对待长语句,正确的翻译方法是将长语句分段,每次只对长语句的一部分进行翻译。
2023-07-26 01:22:11
445
转载 自然语言处理与词嵌入
前面介绍过表征单词的方式是首先建立一个较大的词汇表(例如10000),然后使用one-hot的方式对每个单词进行编码。例如单词Man,Woman,King,Queen,Apple,Orange分别出现在词汇表的第5391,9853,4914,7157,456,6257的位置,则它们分别用O5391,O9853,O4914,O7157,O456,O6257表示这中one-hot表征单词的方法最大的缺点就是每个单词都是独立的、正交的,无法知道不同单词之间的相似程度。
2023-07-20 22:05:41
1309
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人