(pytorch-深度学习)SE-ResNet的pytorch实现

SE-ResNet的pytorch实现

残差块:

class Resiual_block(nn.Module):def __init__(self, in, middle_out, out, kernel_size=3, padding=1):self.out_channel = middle_outsuper(Resiual_block, self).__init__()self.shortcut = nn.Sequential(nn.Conv2d(nin, nout, kernel_size=1),nn.BatchNorm2d(nout))self.block = nn.Sequential(nn.Conv2d(in, middle_out, kernel_size=kernel_size, padding=padding),nn.BatchNorm2d(middle_out),nn.ReLU(inplace=True),nn.Conv2d(middle_out, out, kernel_size=kernel_size, padding=padding),nn.BatchNorm2d(nout))def forward(self, input):x = self.block(input)return nn.ReLU(inplace=True)(x + self.shortcut(input))

注意 在input与输出相加前,这里需要一个shortcut层来调整input的通道大小

SE-NET:

class SE(nn.Module):def __init__(self, in, middle_out, out, reduce=16):super(SE, self).__init__()self.block = Resiual_block(in, middle_out, out)self.shortcut = nn.Sequential(nn.Conv2d(nin, nout, kernel_size=1),nn.BatchNorm2d(nout))self.se = nn.Sequential(nn.Linear(out, out // reduce),nn.ReLU(inplace=True),nn.Linear(out // reduce, out),nn.Sigmoid())def forward(self, input):x = self.block(input)batch_size, channel, _, _ = x.size()y = nn.AvgPool2d(x.size()[2])(x)y = y.view(y.shape[0],-1)y = self.se(y).view(batch_size, channel, 1, 1)y = x * y.expand_as(x)out = y + self.shortcut(input)return out

注意 我们使用平均池化层进行下采样,这里的kernel_size是动态的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/507971.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(pytorch-深度学习)循环神经网络的从零开始实现

循环神经网络的从零开始实现 首先,我们读取周杰伦专辑歌词数据集: import time import math import numpy as np import torch from torch import nn, optim import torch.nn.functional as F import sys sys.path.append("..") device tor…

(pytorch-深度学习)使用pytorch框架nn.RNN实现循环神经网络

使用pytorch框架nn.RNN实现循环神经网络 首先,读取周杰伦专辑歌词数据集。 import time import math import numpy as np import torch from torch import nn, optim import torch.nn.functional as Fimport sys sys.path.append("..") device torch.d…

(pytorch-深度学习)通过时间反向传播

通过时间反向传播 介绍循环神经网络中梯度的计算和存储方法,即通过时间反向传播(back-propagation through time)。 正向传播和反向传播相互依赖。正向传播在循环神经网络中比较直观,而通过时间反向传播其实是反向传播在循环神经…

(pytorch-深度学习)门控循环单元(GRU)

门控循环单元(GRU) 循环神经网络中的梯度计算 当时间步数较大或者时间步较小时,循环神经网络的梯度较容易出现衰减或爆炸。虽然裁剪梯度可以应对梯度爆炸,但无法解决梯度衰减的问题。通常由于这个原因,循环神经网络在…

(pytorch-深度学习)长短期记忆(LSTM)

长短期记忆(LSTM) LSTM 中引入了3个门,即 输入门(input gate)遗忘门(forget gate)输出门(output gate)以及与隐藏状态形状相同的记忆细胞(某些文献把记忆细…

(pytorch-深度学习)深度循环神经网络

深度循环神经网络 循环神经网络只有一个单向的隐藏层,在深度学习应用里,我们通常会用到含有多个隐藏层的循环神经网络,也称作深度循环神经网络。 下图演示了一个有LLL个隐藏层的深度循环神经网络,每个隐藏状态不断传递至当前层的…

(pytorch-深度学习)双向循环神经网络

双向循环神经网络 一般,我们认为循环神经网络模型都是假设当前时间步是由前面的较早时间步的序列决定的,因此它们都将信息通过隐藏状态从前往后传递。 有时候,当前时间步也可能由后面时间步决定。 例如,当我们写下一个句子时&…

pytorch实现梯度下降、随机梯度下降-图像直观展示

深度学习与优化算法原理 优化函数与深度学习 在一个深度学习问题中,通常需要预先定义一个损失函数。有了损失函数以后,使用优化算法试图将其最小化。 在优化中,这样的损失函数通常被称作优化问题的目标函数(objective function…

小批量随机梯度下降

小批量随机梯度下降 在每一次迭代中,梯度下降使用整个训练数据集来计算梯度,因此它有时也被称为批量梯度下降(batch gradient descent)。 随机梯度下降在每次迭代中只随机采样一个样本来计算梯度。可以在每轮迭代中随机均匀采样…

动量法解决梯度下降的一些问题

动量法 目标函数有关自变量的梯度代表了目标函数在自变量当前位置下降最快的方向,因此,梯度下降也叫作最陡下降(steepest descent)。在每次迭代中,梯度下降根据自变量当前位置,沿着当前位置的梯度更新自变…

深度学习AdaGrad算法

AdaGrad算法 在一般的优化算法中,目标函数自变量的每一个元素在相同时间步都使用同一个学习率来自我迭代。 例如,假设目标函数为fff,自变量为一个二维向量[x1,x2]⊤[x_1, x_2]^\top[x1​,x2​]⊤,该向量中每一个元素在迭代时都使…

深度学习优化算法:RMSProp算法

RMSProp算法 在AdaGrad算法中,因为调整学习率时分母上的变量st\boldsymbol{s}_tst​一直在累加按元素平方的小批量随机梯度,所以目标函数自变量每个元素的学习率在迭代过程中一直在降低(或不变)。因此,当学习率在迭代…

深度学习-参数与超参数

参数(parameters)/模型参数 由模型通过学习得到的变量比如权重、偏置 超参数(hyperparameters)/算法参数 根据经验进行设定,影响到权重和偏置的大小比如迭代次数、隐藏层的层数、每层神经元的个数、学习速率等

深度学习优化算法-AdaDelta算法

AdaDelta算法 除了RMSProp算法以外,另一个常用优化算法AdaDelta算法也针对AdaGrad算法在迭代后期可能较难找到有用解的问题做了改进 [1]。 不一样的是,AdaDelta算法没有学习率这个超参数。 它通过使用有关自变量更新量平方的指数加权移动平均的项来替代…

深度学习优化算法-Adam算法

Adam算法 Adam算法在RMSProp算法基础上对小批量随机梯度也做了指数加权移动平均。Adam算法可以看做是RMSProp算法与动量法的结合。 算法内容 Adam算法使用了动量变量vt\boldsymbol{v}_tvt​和RMSProp算法中小批量随机梯度按元素平方的指数加权移动平均变量st\boldsymbol{s}_…

pytorch命令式和符号式混合编程

命令式和符号式编程 命令式编程 命令式编程使用编程语句改变程序状态,如下: def add(a, b):return a bdef fancy_func(a, b, c, d):e add(a, b)f add(c, d)g add(e, f)return gfancy_func(1, 2, 3, 4) # 10在运行语句e add(a, b)时,P…

深度学习-自动并行计算

自动并行计算 异步计算 默认情况下,PyTorch中的 GPU 操作是异步的。当调用一个使用 GPU 的函数时,这些操作会在特定的设备上排队但不一定会在稍后立即执行。这就使我们可以并行更多的计算,包括 CPU 或其他 GPU 上的操作。 一般情况下&…

pytorch多GPU计算

pytorch多GPU计算 如果正确安装了NVIDIA驱动,我们可以通过在命令行输入nvidia-smi命令来查看当前计算机上的全部GPU 定义一个模型: import torch net torch.nn.Linear(10, 1).cuda() netoutput: Linear(in_features10, out_features1, biasTrue)要想…

深度学习-计算机视觉--图像增广

图像增广 大规模数据集是成功应用深度神经网络的前提。图像增广(image augmentation)技术通过对训练图像做一系列随机改变,来产生相似但又不同的训练样本,从而扩大训练数据集的规模。 图像增广的另一种解释是,随机改…

pytorch深度学习-微调(fine tuning)

微调(fine tuning) 首先举一个例子,假设我们想从图像中识别出不同种类的椅子,然后将购买链接推荐给用户。一种可能的方法是先找出100种常见的椅子,为每种椅子拍摄1,000张不同角度的图像,然后在收集到的图像…