自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(121)
  • 资源 (5)
  • 收藏
  • 关注

原创 transformer架构中 encoder decoder self-attention cross-attention的作用

在Transformer架构中,Encoder-Decoder架构是一种常见的模式,其中Encoder和Decoder分别负责编码输入序列和解码生成输出序列。Self-Attention(自注意力)和Cross-Attention(交叉注意力)是Transformer中的关键组件,用于实现序列建模和特征提取。

2023-09-29 15:11:52 1201

原创 相对位置编码和绝对位置编码

位置编码的区别:相对位置编码和绝对位置编码是两种不同的位置编码方法。绝对位置编码是一种基于位置嵌入的方法,其中每个位置都被分配了一个唯一的位置向量。这些向量是固定的,与输入序列的内容无关。这种编码方式对于处理较短的序列效果较好,但在处理长序列时可能会存在问题,因为序列的长度超过了模型能够处理的位置编码的范围。相对位置编码是一种基于相对位置的方法,其中每个位置被编码为一个偏移量,表示该位置与其他位置之间的相对距离。相对位置编码可以通过在输入嵌入中添加额外的信息来实现。

2023-07-28 14:23:10 2629

原创 pytorch中选取不同维度sum和mean方法理解

比如一个矩阵维度(2,3,4),dim=0,那就是消去第0维,变成了 (3,4),消去第1维,变成了 (2,4),消去第2维,变成了 (2,3),dim=-1,也就是最后一维,在这个矩阵中也就是第二维。如果指定了dim参数,则会沿着指定的维度对输入张量进行求和操作,并返回一个形状与输入张量除了指定维度之外的维度相同的张量。如果指定了keepdim参数,则返回的张量会保持与输入张量相同的维度数,并且在指定维度上的大小为1。具体算维度,采用消解法,也就是 dim=0,那就是消去第0维,dim=1,消去第1维。

2023-07-06 11:26:40 1126

原创 pytorch contiguous().view(-1, 1) 作用

具体而言,该代码会先使用contiguous()方法将输入张量变成一个连续存储的副本,然后使用view()方法将其重塑为一个列向量,其中-1表示自动计算该维度的大小,1表示该列向量只有一列,即为一个列向量。注意,使用view()方法对非连续存储的张量进行操作时,需要先使用contiguous()方法将其变成连续存储的张量,否则可能会出现运行时错误。在对x进行重塑时,我们首先使用contiguous()方法将其变成连续存储的副本,然后使用view()方法将其重塑为一个列向量。

2023-07-06 10:58:34 927

原创 model.train() 和 model.eval() 作用

因此,在训练模式下,我们需要保证 Batch Normalization 和 Dropout 等层的正常工作,以使模型能够得到更好的训练效果。因此,在评估模式下,我们需要保证 Batch Normalization 和 Dropout 等层的评估工作,以使模型能够得到更好的评估效果。在训练和测试阶段,模型的行为可能会有所不同,特别是当模型包含 Batch Normalization 和 Dropout 等层时,这些层在训练和测试阶段的行为可能不同。

2023-06-27 11:55:48 429

原创 pytorch 固定部分网络参数需要使用 with torch.no_grad()吗

可以看到,由于我们在 fc2 层使用了 torch.no_grad(),因此 fc2 层的参数的梯度为 None,而 fc1 层的参数的梯度正常计算。当我们将需要固定的参数的 requires_grad 属性设置为 False 时,这些参数在计算梯度时就不会被更新,因此不需要使用 torch.no_grad()。然而,当我们在使用不需要更新的参数进行前向传递时,如果不使用 torch.no_grad(),PyTorch 会默认计算梯度,这会浪费计算资源。此时,可以使用 torch.no_grad()。

2023-06-27 11:51:38 1487

原创 Pytorch反向传播——optimizer.zero_grad(), loss.backward(), optimizer.step() 作用

例如,常用的优化算法如 Adam、SGD 等,都有自己的更新规则,optimizer.step() 会按照相应的规则更新网络参数的值。先使用 optimizer.zero_grad() 用于清空优化器中的梯度,再前向传播,计算loss,再loss.backward()计算梯度,再用optimizer.step()更新梯度。loss.backward() 是 PyTorch 中用于自动求导的函数,它的主要作用是计算损失函数对模型参数的梯度,从而实现反向传播算法。

2023-06-27 11:39:11 3540

原创 pytorch 固定部分网络参数应该怎么写

在 PyTorch 中,nn.Linear 的默认 requires_grad 属性是 True,即默认情况下会对线性层的权重和偏置进行梯度计算。nn.Conv2d 的默认 requires_grad 属性是 True,即默认情况下会对卷积层的权重和偏置进行梯度计算。在上述代码中,我们将 conv1 的权重和偏置的 requires_grad 属性设置为 False,这样在 backward() 计算梯度时,这些参数不会被更新。而其他参数的 requires_grad 属性默认为 True,会进行更新。

2023-06-27 11:19:45 640

原创 PyTorch 中,tensor不设置requires_grad和设置requires_grad=False的区别

可以看到,x 的梯度为 None,而 y 的梯度为 2,这是因为 x 没有设置 requires_grad,因此 PyTorch 不会为它计算梯度,而 y 的梯度为 2,表示其计算出的梯度值为 2。需要注意的是,如果一个 tensor 设置了 requires_grad=True,那么其依赖的所有 tensor 也会自动设置为 requires_grad=True。这种情况下,PyTorch 不会构建用于计算 tensor 梯度的计算图,因此也不会计算 tensor 的梯度。错误表示没有元素需要计算梯度。

2023-06-27 11:15:25 1541

原创 Masked Autoencoder论文中 fine-tuning 和 linear probing含义

Masked Autoencoder论文中 fine-tuning 和 linear probing含义

2022-10-17 20:05:28 2709 1

原创 Pytorch中 torch.cat与torch.stack 拼接函数

stack()拼接函数,是拼接以后,再扩展一维。torch.stack()有两个参数,第一个是要拼接的张量的列表或是元组;第二个参数是拼接的维度。cat()拼接函数,将多个张量拼接成一个张量,保持维度不变。torch.cat()有两个参数,第一个是要拼接的张量的列表或是元组;第二个参数是拼接的维度。torch.cat() 和 torch.stack()函数要求输入张量的大小完全相同,才能进行拼接stack与cat的区别在于, 得到的张量的维度会比输入的张量的大小多1,并且多出的那个维度就是拼接的维

2022-02-23 10:23:47 1354 2

原创 pytorch tensor和 numpy的相互转换

tensor 转换为 numpy采用 .numpy() 函数即可a=torch.tensor([1,2,3]) print(a)print(type(a))print(a.dtype)b=a.numpy()print(b)print(type(b))print(b.dtype)输出:torch.tensor 整数默认为 int64 即 LongTensor 小数默认为 float32不过 一般对tensor 采用 tensor.data() 或者 tensor.detach(

2022-02-23 10:12:50 7467

原创 pytorch 矩阵和向量乘法

a=torch.tensor([1,2,3])c=torch.tensor([[1,2,3],[4,5,6]])print(torch.mul(a,c))print(torch.matmul(c,a))tensor([[ 1, 4, 9], [ 4, 10, 18]])tensor([14, 32])向量点乘:又叫做点积、内积、数量积、标量积,向量a[a1,a2,...,an]和向量b[b1,b2b...,bn]点乘的结果是一个标量,记作a.b;得到一个值。...

2021-10-18 11:33:36 5392

原创 自监督学习和无监督学习的区别

无监督学习无监督学习不依赖任何标签值,通过对数据内在特征的挖掘,找到样本间的关系,比如聚类相关的任务自监督学习和无监督学习不同,自监督学习主要是利用辅助任务(pretext)从大规模的无监督数据中挖掘自身的监督信息,通过这种构造的监督信息对网络进行训练,从而可以学习到对下游任务有价值的表征。换句话说:自监督学习的监督信息不是人工标注的,而是是通过辅助任务(pretext)在大规模无监督数据中自动构造监督信息,通过得到的标签,就可以类似有监督学习一样进行训练。区别自监督学习是从数据本身找标签来进行

2021-09-12 10:47:05 14715 1

原创 向量范数和矩阵范数

范数 范数(norm)是数学中的一种基本概念。在泛函分析中,它定义在赋范线性空间中,并满足一定的条件,即 ①非负性;②齐次性;③三角不等式。它常常被用来度量某个向量空间(或矩阵)中的每个向量的长度或大小。范数,是具有“长度”概念的函数。在线性代数、泛函分析及相关的数学领域,范数是一个函数,是矢量空间内的所有矢量赋予非零的正长度或大小。半范数可以为非零的矢量赋予零长度。总的来说,范数的定义就是一种具有“长度”概念的函数一、向量范数总体公式举例 先定义一个向量为:1.1 ..

2021-08-09 22:26:44 3739

原创 浅谈C++指针和引用的区别

指针:指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元;而引用跟原来的变量实质上是同一个东西,只不过是原变量的一个别名而已。如:int a=1;int *p=&a; # 指针int a=1;int &b=a; # 引用我主要从变量的地址角度来说明指针和引用的区别大家请看下面的代码#include<iostream>using namespace std;int main(){ int a=5;..

2020-08-10 18:29:18 270

原创 numpy.diag()函数用法

numpy模块中有个函数diagonal,就是处理对角线的函数numpy.diag(v,k=0)以一维数组的形式返回方阵的对角线(或非对角线)元素,或将一维数组转换成方阵(非对角线元素为0).两种功能角色转变取决于输入的vv : array_like.如果v是2D数组,返回k位置的对角线。如果v是1D数组,返回一个v作为k位置对角线的2维数组。k : int, optional对角线...

2020-05-08 15:12:26 6791

原创 201509-2 日期计算 C++实现 100分

问题描述  给定一个年份y和一个整数d,问这一年的第d天是几月几日?  注意闰年的2月有29天。满足下面条件之一的是闰年:  1) 年份是4的整数倍,而且不是100的整数倍;  2) 年份是400的整数倍。输入格式  输入的第一行包含一个整数y,表示年份,年份在1900到2015之间(包含1900和2015)。  输入的第二行包含一个整数d,d在1至365之间。输出格式  输出两...

2020-05-04 10:21:10 261

原创 201512-2 消除类游戏 C++ 100分实现

问题描述  消除类游戏是深受大众欢迎的一种游戏,游戏在一个包含有n行m列的游戏棋盘上进行,棋盘的每一行每一列的方格上放着一个有颜色的棋子,当一行或一列上有连续三个或更多的相同颜色的棋子时,这些棋子都被消除。当有多处可以被消除时,这些地方的棋子将同时被消除。  现在给你一个n行m列的棋盘,棋盘中的每一个方格上有一个棋子,请给出经过一次消除后的棋盘。  请注意:一个棋子可能在某一行和某一列同时被...

2020-04-29 17:10:14 511

原创 201604-3 路径解析 C++ 100分实现

问题描述在操作系统中,数据通常以文件的形式存储在文件系统中。文件系统一般采用层次化的组织形式,由目录(或者文件夹)和文件构成,形成一棵树的形状。文件有内容,用于存储数据。目录是容器,可包含文件或其他目录。同一个目录下的所有文件和目录的名字各不相同,不同目录下可以有名字相同的文件或目录。  为了指定文件系统中的某个文件,需要用路径来定位。在类 Unix 系统(Linux、Max OS X、Fre...

2020-04-22 22:28:31 282

原创 getline()会读取缓存区的换行符

getlinegetline(cin,str)函数是处理string类的函数。第二个参数为string类型的变量。 此函数可读取整行,包括前导和嵌入的空格,并将其存储在字符串对象中。但是在cin和getline使用过程中,会发现getline读取缓存区的换行符导致直接换行的问题,比如下面这个例子。#include <iostream>#include <string&gt...

2020-04-20 19:45:15 4819

原创 stringstream用法介绍

概述< sstream > 定义了三个类:istringstream、ostringstream 和 stringstream,分别用来进行流的输入、输出和输入输出操作。但用的最多的是stringstream类支持C风格的串流的输入输出操作。stringstream输入输出#include <iostream>#include <sstream>#in...

2020-04-20 19:14:08 693

原创 python np.random.choice方法

np.random.choice方法含义是从列表a中随机选取值,可以通过设置个数,还有选取各个值的概率来影响选取。def choice(a, size=None, replace=True, p=None)表示从a中随机选取size个数replacement 代表的意思是抽样之后还放不放回去,如果是False的话,那么通一次挑选出来的数都不一样,如果是True的话, 有可能会出现重复...

2020-04-19 14:05:59 1219 1

原创 python .ravel() .flatten()

python中函数 .ravel() .flatten() 就是将输入的数组展平,变成1维>>> import numpy as np>>> a=np.array([[1,2,3],[4,5,6]])>>> print(a.ravel())[1 2 3 4 5 6]>>> print(a.flatten())[1...

2020-04-19 13:57:36 173

原创 201612-2 CCFCSP 工资计算 C++实现100分

问题描述  小明的公司每个月给小明发工资,而小明拿到的工资为交完个人所得税之后的工资。假设他一个月的税前工资(扣除五险一金后、未扣税前的工资)为S元,则他应交的个人所得税按如下公式计算:  1) 个人所得税起征点为3500元,若S不超过3500,则不交税,3500元以上的部分才计算个人所得税,令A=S-3500元;  2) A中不超过1500元的部分,税率3%;  3) A中超过1500元...

2020-04-17 20:22:06 441

原创 CCF CSP 201609-2 火车购票 C++实现 100分

问题描述  请实现一个铁路购票系统的简单座位分配算法,来处理一节车厢的座位分配。  假设一节车厢有20排、每一排5个座位。为方便起见,我们用1到100来给所有的座位编号,第一排是1到5号,第二排是6到10号,依次类推,第20排是96到100号。  购票时,一个人可能购一张或多张票,最多不超过5张。如果这几张票可以安排在同一排编号相邻的座位,则应该安排在编号最小的相邻座位。否则应该安排在编号最...

2020-04-10 15:44:44 716

原创 CCF CSP 201912-2 回收站选址 C++实现

样例1输入:71 22 10 01 11 02 00 1输出数据:00100样例2输入:20 0-100000 10输出数据:00000样例3输入:119 1010 1011 1012 1013 1011 911 812 910 910 1112 11输出数据:02100思路建立一个set结构,来存储垃圾...

2020-04-10 14:49:10 293

原创 CCF CSP 201503-2 数字排序 C++实现

问题描述  给定n个整数,请统计出每个整数出现的次数,按出现次数从多到少的顺序输出。  输入格式  输入的第一行包含一个整数n,表示给定数字的个数。  第二行包含n个整数,相邻的整数之间用一个空格分隔,表示所给定的整数。  输出格式  输出多行,每行包含两个整数,分别表示一个给定的整数和它出现的次数。按出现次数递减的顺序输出。如果两个整数出现的次数一样多,则先输出值较小的,然后输出...

2020-04-10 14:31:15 416

原创 Pytorch view函数讲解

view()函数作用和reshape函数类似,就是对tensor的shape进行调整,可以通过view函数将tensor的shape调整成一个你希望的样子。import torchtorch.manual_seed(2)a=torch.randn(4,5)print(a)print(a.view(-1,2)) # 此时 -1,代表默认值,代表根据后面的列数来计算行数'''a...

2020-04-06 17:27:00 1056

原创 Pytorch中torch.gather函数

在学习 CS231n中的NetworkVisualization-PyTorch任务,讲解了使用torch.gather函数,gather函数是用来根据你输入的位置索引 index,来对张量位置的数据进行合并,然后再输出。其中 gather有两种使用方式,一种为 torch.gather另一种为 对象.gather。首先介绍 对象.gatherimport torchtorch.man...

2020-04-06 17:11:46 983

原创 numpy中矩阵乘法

在Python的 Numpy模块中有很多关于矩阵乘法的方法,其中重点是 矩阵的点乘和叉乘,需要区分出来。矩阵的点乘就是矩阵各个对应元素相乘, 这个时候要求两个矩阵必须同样大小在 numpy 模块中 矩阵点乘是通过 multiply 函数或 * 运算符来实现import numpy as npm = np.array([[1,2,3],[4,5,6]])n= n...

2020-03-28 11:51:50 1630

原创 python参数传递的*args和**kwargs

多个实参,放到一个元组里面,以*开头,可以传多个参数;**是形参中按照关键字传值把多余的传值以字典的方式呈现*args:表示的就是将实参中按照位置传值,多出来的值都给args,且以元组的方式呈现,主要是用来表示函数接收可变长度的非关键字参数列表作为函数的输入。**kwargs:表示的就是形参中按照关键字传值把多余的传值以字典的方式呈现主要是用来表示函数接收可变长度的关键字参数列...

2020-03-22 20:13:20 1103

原创 矩阵与向量的加法

在Numpy中,矩阵与向量相加时,首先要求即要求矩阵的列数与向量的维数相等。然后就是 矩阵的每一行与向量相加,得出结果。过程如下图所示:import numpy as npx = np.array([[1, 2, 3], [4, 5, 6],[7,8,9]])z = np.array([1, 2, 3])print(x + z)输出array([[2, 4, 6],[5,...

2020-03-17 19:36:15 6835 2

原创 shufflenet中channel shuffle原理

分组卷积Group convolution是将输入层的不同特征图进行分组,然后采用不同的卷积核再对各个组进行卷积,这样会降低卷积的计算量。因为一般的卷积都是在所有的输入特征图上做卷积,可以说是全通道卷积,这是一种通道密集连接方式(channel dense connection),而group convolution相比则是一种通道稀疏连接方式具体过程可见我的另一个博客https://blo...

2020-02-27 20:48:50 13026 4

原创 Group Convolution 分组卷积

Group Convolution分组卷积最早见于AlexNet——2012年Imagenet的冠军方法,Group Convolution被用来切分网络,使其在2个GPU上并行运行,AlexNet网络结构如下:Convolution VS Group Convolution如果输入feature map尺寸为C∗H∗W,卷积核有N个,输出feature map与卷积核的数量相同也是N,每...

2020-02-27 20:30:16 1522

原创 MobileNet 深度可分离卷积(depthwise separable convolution)

简介MobileNet作为一个,轻量级的网络,可以在移动设备上进行训练,关键是采用了 深度可分离卷积(depthwise separable convolution)来提高效率,下面注重介绍介绍 深度可分离卷积。传统卷积方法假设输入特征图大小为 DF×DF×MD_F×D_F×MDF​×DF​×M,输出特征图大小为 DF×DF×ND_F×D_F×NDF​×DF​×N,卷积核大小为 DK×DK×...

2020-02-27 20:04:11 1889

原创 Inception V1 理解

在论文《Going Deeper with Convolutions》提出了GoogLeNet网络,并在 ILSVRC 2014(ImageNet Large Scale Visual Recognition Competition) 上取得了第一名,GoogLeNet 对网络中的传统卷积层进行了修改,提出了被称为 Inception 的结构,用于增加网络深度和宽度,提高深度神经网络性能。我们知...

2020-02-17 20:12:00 1508

原创 pytorch中squeeze()和unsqueeze()函数介绍

squeeze的用法主要就是对数据的维度进行压缩或者解压。torch.squeeze() 函数主要是对数据的维度进行压缩,去掉维数为1的的维度。比如对于一行或者一列这种,一个一行三列(1,3)的数去掉第一个维数为一的维度之后就变成(3)行。squeeze(a)就是将a中所有为1的维度删掉。不为1的维度没有影响。还有一种形式就是b=torch.squeeze(a,N) a中去掉指定的维数为一...

2020-02-15 20:13:21 1339

原创 pytorch中的item()用法

pytorch中,.item()方法 是得到一个元素张量里面的元素值具体就是 用于将一个零维张量转换成浮点数,比如计算loss,accuracy的值就比如:loss = (y_pred - y).pow(2).sum()print(loss.item())...

2020-02-15 20:05:33 21843 2

原创 卷积和池化操作对图片尺寸改变

卷积操作对于输入图像尺寸为Nw∗NhN_w * N_hNw​∗Nh​,图片通道数为C,那么 j假设卷积核尺寸为FxF,通道数也为C 步幅为S,Padding使用P,经过该卷积层后输出的图像尺寸为WxH:图片宽度W=⌊Nw+2P−FS+1⌋ W=\left \lfloor \frac{N_w+2P-F}{S} +1 \right \rfloor W=⌊SNw​+2P−F​+1⌋图片长...

2020-02-09 12:51:08 3434

2020年1月山东大学计算机视觉期末考试试题(计算机学院人工智能班).docx

2020年1月山东大学计算机科学与技术学院人工智能班的计算机视觉期末考试试题回忆版(计算机学院人工智能班)

2020-01-05

基于opencv的BackgroundSubtractorMOG2和BackgroundSubtractorKNN的 原视频 和结果视频

基于opencv的BackgroundSubtractorMOG2和BackgroundSubtractorKNN的 原视频 和结果视频

2019-11-03

山东大学计算机网络复习资料.zip

山东大学计算机网络课程的复习资料和往年题目

2019-06-16

objdata.zip

这是obj文件,里面有大概7,8种特别小的obj文件,用于读取,便于完成opengl 和 openmesh 读取obj文件,显示3d模型,并可以进行旋转、平移、缩放的实验任务

2019-06-06

数组描述线性表

1、创建线性表类:线性表的存储结构使用数组描述,提供操作: 插入、删除、 查找等。 2、设通讯录中每一个联系人的内容有:姓名、电话号码、班级、宿舍。由键 盘输入或文件录入的通讯录信息建立通讯录表,使用线性表中操作实现 通讯录管理功能,包括:插入、删除、编辑、查找(按姓名查找);键盘 输入一班级,输出通讯录中该班级所有人信息。

2018-11-15

空空如也

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

TA关注的人

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