pytorch里cat、stack、unsqueeze、squeeze、自带网络自适应输入大小方法、初始化一个输入获取最后一层特征向量的维度大小,empty、random
遭遇网络钓鱼,应立即关闭网页,不输入任何个人信息。 #生活常识# #生活安全# #网络诈骗防范#
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)学习笔记
无人机数据传输网络的路由优化方法及系统与流程
毕业设计:基于机器学习的生活垃圾智能分类系统 多尺度特征融合 轻量型网络
全网最全:机器学习算法模型自动超参数优化方法汇总