torch.nn学习

2023-05-16

torch.nn学习

文章目录

  • torch.nn学习
  • 1. 卷积层
    • 1.1 Conv2d
  • 2. 池化层
    • 2.1 MaxPool2d
    • 2.2 MaxUnpool2d
    • 2.3 AvgPool2d
  • 3. 代码实践
    • 3.1 Inception Module
    • 3.2 Residual Block

1. 卷积层

1.1 Conv2d

# 原型
torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True, padding_mode='zeros', device=None, dtype=None)

二维卷积,输入的tensor的尺寸为(B,C,H,W)

参数主要有:

  • in_channels(int):输入通道数
  • out_channels(int):输出通道数
  • kernel_size(int or tuple):卷积核大小
  • stride(int or tuple,optional):卷积核移动的步长,默认为1
  • padding(int or tuple or str,optional):给输入添加0的边距,默认为0
  • padding_mode(string, optional):可选参数有zeros、reflect、replicate和circular,默认是zeros
  • dilation(int or tuple, optional):卷积核膨胀(可以理解为卷积核每个像素之间的间隔),默认值为1
  • groups(int, optional):通道分组数,in_channels和out_channels的公约数,默认值为1
  • bias(bool, optional):是否需要可学习的偏差值,默认为True

参数kernel_size, stride, padding,dilation的取值可以是整数或者元组:

  • 整数:在高度和宽度维度应用相同的值。
  • 包含两个整数的元组:第一个int应用于高度维度,第二个int应用于宽度维度。

在这里插入图片描述

卷积可视化链接:https://github.com/vdumoulin/conv_arithmetic/blob/master/README.md

>>> # With square kernels and equal stride
>>> m = nn.Conv2d(16, 33, 3, stride=2)
>>> # non-square kernels and unequal stride and with padding
>>> m = nn.Conv2d(16, 33, (3, 5), stride=(2, 1), padding=(4, 2))
>>> # non-square kernels and unequal stride and with padding and dilation
>>> m = nn.Conv2d(16, 33, (3, 5), stride=(2, 1), padding=(4, 2), dilation=(3, 1))
>>> input = torch.randn(20, 16, 50, 100)
>>> output = m(input)

2. 池化层

2.1 MaxPool2d

# 原型
torch.nn.MaxPool2d(kernel_size, stride=None, padding=0, dilation=1, return_indices=False, ceil_mode=False)

最大池化,也称下采样,输入的tensor的尺寸为(B,C,H,W)。

主要参数有:

  • kernel_size:池化窗口的大小。
  • stride:窗口移动的步长,默认和池化窗口大小一样。
  • padding:填充0的边距大小。
  • dilation:池化窗口膨胀,可以理解为窗口各像素之间相隔的距离。
  • return_indices:如果为True,返回最大索引和输出值。
  • ceil_mode:如果为True,将使用ceil模式计算输出形状;否则使用floor模式计算。

在这里插入图片描述

>>> # pool of square window of size=3, stride=2
>>> m = nn.MaxPool2d(3, stride=2)
>>> # pool of non-square window
>>> m = nn.MaxPool2d((3, 2), stride=(2, 1))
>>> input = torch.randn(20, 16, 50, 32)
>>> output = m(input)

2.2 MaxUnpool2d

# 原型
torch.nn.MaxUnpool2d(kernel_size, stride=None, padding=0)

上采样,可以将多个输入大小映射到相同的输出大小。

主要参数有:

  • kernel_size:池化窗口的大小。
  • stride:窗口移动的步长,默认和池化窗口大小一样。
  • padding:填充0的边距大小。

输入有:

  • input:需要上采用的输入张量。
  • indices:MaxPool2d返回的最大索引下标数组。
  • output_size (optional):输出张量的形状。

在这里插入图片描述

>>> pool = nn.MaxPool2d(2, stride=2, return_indices=True)
>>> unpool = nn.MaxUnpool2d(2, stride=2)
>>> input = torch.tensor([[[[ 1.,  2.,  3.,  4.],
                            [ 5.,  6.,  7.,  8.],
                            [ 9., 10., 11., 12.],
                            [13., 14., 15., 16.]]]])
>>> output, indices = pool(input)
>>> unpool(output, indices)
tensor([[[[  0.,   0.,   0.,   0.],
          [  0.,   6.,   0.,   8.],
          [  0.,   0.,   0.,   0.],
          [  0.,  14.,   0.,  16.]]]])
>>> # Now using output_size to resolve an ambiguous size for the inverse
>>> input = torch.torch.tensor([[[[ 1.,  2.,  3., 4., 5.],
                                  [ 6.,  7.,  8., 9., 10.],
                                  [11., 12., 13., 14., 15.],
                                  [16., 17., 18., 19., 20.]]]])
>>> output, indices = pool(input)
>>> # This call will not work without specifying output_size
>>> unpool(output, indices, output_size=input.size())
tensor([[[[ 0.,  0.,  0.,  0.,  0.],
          [ 0.,  7.,  0.,  9.,  0.],
          [ 0.,  0.,  0.,  0.,  0.],
          [ 0., 17.,  0., 19.,  0.]]]])

2.3 AvgPool2d

# 原型
torch.nn.AvgPool2d(kernel_size, stride=None, padding=0, ceil_mode=False, count_include_pad=True, divisor_override=None)

平均池化。

主要参数有:

  • kernel_size:池化窗口的大小。
  • stride:窗口移动的步长,默认和池化窗口大小一样。
  • padding:填充0的边距大小。
  • ceil_mode:如果为True,将使用ceil模式计算输出形状;否则使用floor模式计算。
  • count_include_pad:如果为True,在平均计算中会包含0填充边距。
  • divisor_override:如果指定,则为除数,否则使用池化窗口的大小作为除数。

在这里插入图片描述

>>> # pool of square window of size=3, stride=2
>>> m = nn.AvgPool2d(3, stride=2)
>>> # pool of non-square window
>>> m = nn.AvgPool2d((3, 2), stride=(2, 1))
>>> input = torch.randn(20, 16, 50, 32)
>>> output = m(input)

3. 代码实践

3.1 Inception Module

在这里插入图片描述

代码实现:

import torch
import torch.nn as nn
import torch.nn.functional as F


class Inception(nn.Module):
    def __init__(self, in_channles):
        super(Inception, self).__init__()
        self.cov1x1_1 = nn.Conv2d(in_channles, 16, kernel_size=1)
        self.cov1x1_2 = nn.Conv2d(in_channles, 24, kernel_size=1)

        self.cov3x3_1 = nn.Conv2d(16, 24, kernel_size=3)
        self.cov3x3_2 = nn.Conv2d(24, 24, kernel_size=3)

        self.cov5x5 = nn.Conv2d(16, 24, kernel_size=5)

    def forward(self, x):
        # 第1个分支
        branch1 = F.avg_pool2d(x, kernel_size=3, stride=1, padding=1)
        branch1 = self.cov1x1_2(x)
        # 第2个分支
        branch2 = self.cov1x1_1(x)
        # 第3个分支
        branch3 = self.cov1x1_1(x)
        branch3 = self.cov5x5(branch3)
        # 第4个分支
        branch4 = self.cov1x1_1(x)
        branch4 = self.cov3x3_1(branch4)
        branch4 = self.cov3x3_2(branch4)
        branchs = [branch1, branch2, branch3, branch4]
        return torch.cat(branchs, dim=1)

3.2 Residual Block

在这里插入图片描述

代码实现:

import torch
import torch.nn as nn
import torch.nn.functional as F


class ResidualBlock(nn.Module):
    def __init__(self, channles):
        super(ResidualBlock, self).__init__()
        self.conv = nn.Conv2d(channles, channles, kernel_size=3, padding=1)

    def forward(self, x):
        block = F.relu(self.conv(x))
        block = self.conv(block)
        return F.relu(block + x)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

torch.nn学习 的相关文章

随机推荐

  • 忘记hadoop安装路径,忘记hadoop根目录怎么进入根目录启动hadoop

    有时候很久没用VMware虚拟机了 xff0c Linux操作系统如果不是刻意去用 xff0c 基本上没什么机会去使用 更别提计算机小白了 xff0c Windows系统都没弄懂 xff0c 又出来一个Linux系统 某天我打开目录 xff
  • 微服务应用之OAuth2.0的四种授权方式

    引言 OAuth 2 0 是一种授权机制 xff0c 主要用来颁发令牌 xff08 token xff09 OAuth 2 0 的标准是 RFC 6749 文件 xff0c 这个文件写出 xff08 由于互联网有多种场景 xff0c xff
  • 期望、方差、协方差、相关系数的理解

    目录 1 数学期望 xff08 均值 xff09 2 方差 D X 或 Var X 3 协方差 Cov X Y 4 相关系数 5 协方差矩阵 一句话概括 xff1a 期望 反映了平均水平 xff0c 方差 反映了数据波动程度 xff0c 协
  • Ubuntu系统通过脚本实现循环访问网页

    bin bash step 61 5 间隔的秒数 for i 61 0 i lt 60 i 61 i 43 step do curl https www baidu com crul能达到想要的效果 w3m https www csdn n
  • resource not found: roslaunch和Command ‘rosrun‘ not found的解决方法

    安装ros的时候 xff0c 历经种种困难后终于完成了前面的步骤 xff0c 却在运行roscore时再次出现了问题 xff1a Resource not found roslaunch ROS path 0 61 opt ros noet
  • vscode配置clang-tidy插件

    先拥有一个 clang tidy文件 首先确保系统已经安装clang tidy xff0c 在项目的目录下新建一个 clang tidy文件 xff0c 具体如何配置在网上搜索 xff0c 或者用已有的 也可以在vscode的文件中配置 x
  • 4、linux初级——Linux在开发板中的使用

    目录 一 用CRT连接开发板 1 安装CRT调试工具 2 连接开发板 3 开机后ctrl 43 c关闭登录程序可以进入命令行 二 开发板和电脑文件之间的传输 xff08 串口 xff09 1 rx xff08 从电脑下载文件到开发板 xff
  • FreeRtos--中断

    采用二值信号量同步 二值信号量可以在某个特殊的中断发生时 xff0c 让任务解除阻塞 xff0c 相当于让任务与中断同步 这样就可以让中断事件处理量大的工作在同步任务中完成 xff0c 中断服务例程 ISR 中只是快速处理少部份工作 如此
  • FreeRTOS--资源管理

    函数重入 如果一个函数可以安全地被多个任务调用 xff0c 或是在任务与中断中均可调用 xff0c 则这个函数是可重入的 每个任务都单独维护自己的栈空间及其自身在的内存寄存器组中的值 如果一个函数除了访问自己栈空间上分配的数据或是内核寄存器
  • vscode代码提交到gittee码云 第一次提交方法

    学习3 xff1a 今天是第一次将vscode代码提交到gittee xff0c 废话不多说 xff0c 直接上方法 xff1a 查看git仓库 gt git status 将当前项目文件初始化为仓库 如果当前文件夹不是git仓库 xff0
  • 明火烟雾目标检测项目部署(YoloV5+Flask)

    明火烟雾目标检测项目部署 文章目录 明火烟雾目标检测项目部署1 拉取Docker PyToch镜像2 配置系统环境2 1 更换软件源2 2 下载vim2 3 解决vim中文乱码问题 3 运行项目3 1 拷贝项目到容器中3 2 安装项目所需的
  • 操作系统实践课作业(南航)

    操作系统实践课作业 xff08 南航 xff09 文章目录 操作系统实践课作业 xff08 南航 xff09 1 job21 1 main c1 2 math c1 3 Makefile 2 job32 1 myecho c2 2 myca
  • 在Linux系统下安装Neo4j图数据库

    在Linux系统下安装Neo4j图数据库 文章目录 在Linux系统下安装Neo4j图数据库1 Java JDK1 1 安装1 2 查看安装路径 2 Neo4j2 1 下载2 2 拷贝到容器中2 3 修改neo4j conf配置文件2 4
  • 大数定律 与 中心极限定理 的理解

    目录 1 大数定律 2 中心极限定理 1 大数定律 当样本的数量足够大时 xff0c 样本的统计特性就可以近似代表总体的统计特性 大数 是指样本的数量足够大或者试验的次数足够多 2 中心极限定理 设总体为 为总体的 N 个样本集 xff0c
  • 操作系统实践05—文件描述符和系统调用

    操作系统实践05 文件描述符和系统调用 文章目录 操作系统实践05 文件描述符和系统调用1 概念1 1 文件描述符1 2 系统调用1 3 例子 2 内核实现2 1 file结构体2 2 文件描述符表2 3 进程控制块2 4 私有的文件描述符
  • 医疗问答机器人项目部署

    医疗问答机器人项目部署 文章目录 医疗问答机器人项目部署1 拉取TensorFlow镜像2 配置系统环境2 1 更换软件源2 2 下载vim2 3 解决vim中文乱码问题2 4 安装Neo4J图数据库2 5 安装网络工具包 3 运行项目3
  • SimpleITK学习

    SimpleITK学习 文章目录 SimpleITK学习1 SimpleITK ReadImage path 2 SimpleITK GetArrayFromImage itk img 3 itk img GetOrigin 4 itk i
  • 【Docker】服务器部署项目

    服务器部署项目 文章目录 服务器部署项目1 远程连接服务器2 在Linux系统上安装Docker2 1 卸载旧版本2 2 使用 APT 安装2 3 安装Docker2 4 使用脚本自动安装2 5 启动Docker2 6 测试 Docker
  • 计算机网络04—网络层

    网络层 学习参考资料 xff1a 湖南科技大学 计算机网络谢希仁 计算机网络 xff08 第7版 xff09 文章目录 网络层1 概述1 1 IP协议及配套协议 2 两种服务2 1 面向连接的虚电路服务2 2 无连接的数据报服务2 3 对比
  • torch.nn学习

    torch nn学习 文章目录 torch nn学习1 卷积层1 1 Conv2d 2 池化层2 1 MaxPool2d2 2 MaxUnpool2d2 3 AvgPool2d 3 代码实践3 1 Inception Module3 2 R