pytorch中的view、expand、unsqueeze、squeeze的对比

1.squeeze是压缩维度1,即将(2,3,1)的张量转成(2,3)张量

import torch
tensor=torch.randn(2,3,1)
print(tensor)
new_tensor=tensor.squeeze()
print("squeeze:\n",new_tensor)

2.view与unsqueeze是扩展维度1
(1)unsqueeze是在某个索引位置加入维度1
(2)view(1,4,-1)在-1位置加入维度1

print("unsqueeze:\n",torch.unsqueeze(new_tensor,2))
tensor1=torch.randn(1,4)
print(tensor1.size())
print("tensor1:\n",tensor1)
print("view:\n",tensor1.view(1,4,-1))

3.expand是扩充维度1

print("expend:\n",tensor.expand(2,3,4))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Squeezenet是一种轻量级的卷积神经网络,适用于移动设备和嵌入式设备。PyTorch是一种深度学习框架,可以用于构建和训练神经网络。如果您想了解如何在PyTorch实现Squeezenet,可以参考以下代码: ```python import torch import torch.nn as nn class Fire(nn.Module): def __init__(self, inplanes, squeeze_planes, expand1x1_planes, expand3x3_planes): super(Fire, self).__init__() self.inplanes = inplanes self.squeeze = nn.Conv2d(inplanes, squeeze_planes, kernel_size=1) self.squeeze_activation = nn.ReLU(inplace=True) self.expand1x1 = nn.Conv2d(squeeze_planes, expand1x1_planes, kernel_size=1) self.expand1x1_activation = nn.ReLU(inplace=True) self.expand3x3 = nn.Conv2d(squeeze_planes, expand3x3_planes, kernel_size=3, padding=1) self.expand3x3_activation = nn.ReLU(inplace=True) def forward(self, x): x = self.squeeze_activation(self.squeeze(x)) return torch.cat([ self.expand1x1_activation(self.expand1x1(x)), self.expand3x3_activation(self.expand3x3(x)) ], 1) class SqueezeNet(nn.Module): def __init__(self, num_classes=100): super(SqueezeNet, self).__init__() self.features = nn.Sequential( nn.Conv2d(3, 96, kernel_size=7, stride=2), nn.ReLU(inplace=True), nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True), Fire(96, 16, 64, 64), Fire(128, 16, 64, 64), Fire(128, 32, 128, 128), nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True), Fire(256, 32, 128, 128), Fire(256, 48, 192, 192), Fire(384, 48, 192, 192), Fire(384, 64, 256, 256), nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True), Fire(512, 64, 256, 256), ) self.classifier = nn.Sequential( nn.Dropout(p=.5), nn.Conv2d(512, num_classes, kernel_size=1), nn.ReLU(inplace=True), nn.AvgPool2d(kernel_size=13, stride=1) ) def forward(self, x): x = self.features(x) x = self.classifier(x) return x.view(x.size(), -1) ``` 这个代码定义了SqueezeNet和Fire两个类,其SqueezeNet包含了多个Fire模块。Fire模块由一个squeeze卷积层和两个expand卷积层组成,用于提取特征。SqueezeNet的前半部分是特征提取器,后半部分是分类器。在前半部分,使用了多个Fire模块来提取特征,其每个模块都包含了一个squeeze卷积层和两个expand卷积层。在后半部分,使用了一个dropout层、一个卷积层和一个平均池化层来进行分类。最终输出的是一个大小为num_classes的向量,表示每个类别的概率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值