pytorch里cat、stack、unsqueeze、squeeze、自带网络自适应输入大小方法、初始化一个输入获取最后一层特征向量的维度大小,empty、random

发布时间:2025-04-30 13:01

遭遇网络钓鱼,应立即关闭网页,不输入任何个人信息。 #生活常识# #生活安全# #网络诈骗防范#

1、其中cat是用于拼接矩阵数据:

参考:pytorch中的cat、stack、tranpose、permute、unsqeeze

outputssum = torch.cat((outputs1, outputs2), 0)

outputssum = torch.cat((outputssum, outputs3), 0)

_, preds = torch.max(outputssum.data, 1)

其中cat适合构建残差网络的适合使用,其用于合并通道构建特征图。如下构建densenet的一些基本block模块:

def forward(self, x):

new_features = super(_DenseLayer, self).forward(x)

if self.drop_rate > 0:

new_features = F.dropout(new_features, p=self.drop_rate, training=self.training)

return torch.cat([x, new_features], 1)

B、stack会增加维度信息,用于把多个单图样本构建成一个batchsize的训练数据集或者用于构建3D数据集,集时序数据集:

clip = self.loader(path, frame_indices)

torch.Tensor.transpose(torch.from_numpy(np.array(clip[0])), 0, 2)

if self.spatial_transform is not None:

self.spatial_transform.randomize_parameters()

datalist=[]

for img in clip:

datalist.append(np.array(img))

clip = [self.spatial_transform(img) for img in clip]

clip = torch.stack(clip, 0).permute(1, 0, 2, 3)

其中stack的另一例子:

a = torch.ones([1,2])

b = torch.ones([1,2])

c= torch.stack([a,b],0) // 第0个维度stack

C、transpose进行维度交换:

一次性只能进行多个维度中的其中两个维度进行交换:

torch.manual_seed(1)

x = torch.randn(2,3)

print(x)

x.transpose(0,1)

D、permute适合多维数据交换,比transpose更灵活:

x = torch.randn(2,3,4)

print(x.size())

x_p = x.permute(1,0,2)

print(x_p.size())

E、squeeze 和unsqueeze:

squeeze:进行维度压缩,其去掉的只能是维度值为1的矩阵;

unsqueeze:进行数据维度增维,其增加的值是1;

2、如何调节网络自适应数据的输入大小:

 pytorch自带的网络都是按照224为输入大小构造的,如果输入数据不等于224则会报错。其实只要改一处就可以使其自适应任何输入数据大小。代码如下:

from torch.nn import functional as F

def forward(self, x):

x = self.conv1(x)

x = self.bn1(x)

x = self.relu(x)

x = self.maxpool(x)

x = self.layer1(x)

x = self.layer2(x)

x = self.layer3(x)

x = self.layer4(x)

x = F.avg_pool2d(x, x.size(2), 1)

x = x.view(x.size(0), -1)

x = self.fc(x)

return x

修改自带网络最好备份一个进行修改。

3、如何获取残差网络的最后一层的特征向量:

inputdata=np.ones([1,3,224,224])

inputs=torch.from_numpy(inputdata).float().cuda()

model = models.resnet18(pretrained=True)

model.cuda()

model.forward(inputs)

得到resnet18的最后特征向量维度导大小是512。

4、使用empty跟内建函数random_进行初始化Tensor:

y = torch.empty(3).random_(2)

其中如果函数有下标“_”这个表示时Tensor里的内建函数,其中产生一个0到2-1的整数值来随机初始化y。

网址:pytorch里cat、stack、unsqueeze、squeeze、自带网络自适应输入大小方法、初始化一个输入获取最后一层特征向量的维度大小,empty、random https://www.yuejiaxmz.com/news/view/899550

相关内容

最强总结!神经网络中常用的九种优化技术(一)特征缩放、批量标准化、梯度下降、基于动量的梯度下降(非常详细)大模型入门到精通!
PyTorch经验指南:技巧与陷阱
网络优化:提高传输速度和可靠性
计算机网络 自顶向下方法 第三章 运输层 习题答案
一文让你掌握22个神经网络训练技巧
微信输入法内测AI功能:输入后按=获取AI回答
A 60 Minute Blitz)学习笔记
无人机数据传输网络的路由优化方法及系统与流程
毕业设计:基于机器学习的生活垃圾智能分类系统 多尺度特征融合 轻量型网络
全网最全:机器学习算法模型自动超参数优化方法汇总

随便看看