小土堆pytorch--神经网路-卷积层池化层

神经网路-卷积层&池化层

  • 一级目录
    • 二级目录
      • 三级目录
  • 1. 神经网路-卷积层
  • 2. 神经网路最大池化的应用

一级目录

二级目录

三级目录

1. 神经网路-卷积层

在这里插入图片描述
在PyTorch中,torch.nn.Conv2d函数定义了一个二维卷积层,其常用参数包括:
in_channels:输入图像的通道数,例如RGB图像为3。
out_channels:经过卷积运算后,输出特征映射的数量,即卷积核的数量。
kernel_size:卷积核的大小,可以是一个整数或一个元组指定高度和宽度,例如3或(3, 3)。
stride:卷积核在输入特征图上滑动的步长,控制输出特征图的大小。
padding:在输入特征图的边缘添加的像素数,用于控制输出特征图的大小。
dilation:卷积核元素之间的间距,影响卷积核覆盖的区域大小,也称为空洞卷积。
groups:分组卷积中的组数,可以减少参数数量和计算量。
bias:布尔值,指定是否添加偏置项,默认为True。
padding_mode:指定填充类型,例如’zeros’、‘reflect’等,默认为’zeros’。
其中前五个参数比较常用,后四个一般使用默认值就可以了
这些在我上一个博客中也有所解释
在这里插入图片描述

import torch
import torchvision
from torch import nn
from torch.nn import Conv2d
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter#准备测试集
dataset = torchvision.datasets.CIFAR10("./das", train=False, transform=torchvision.transforms.ToTensor(),download = True)dataloader = DataLoader(dataset, batch_size=64)class Test(nn.Module):def __init__(self):super(Test, self).__init__()self.conv1 = Conv2d(in_channels=3,out_channels=6,kernel_size=3,stride=1,padding=0)def forward(self, x):x = self.conv1(x)return xtest = Test()
print(test)
writer = SummaryWriter("logs")
step = 0
for data in dataloader:imgs, targets = dataoutput = test(imgs)# print(output.shape)writer.add_images("input",imgs, step)writer.add_images("output", output, step)step = step + 1

如果运行上述代码的话会发现这样的报错
在这里插入图片描述
就是通道数不符造成的,因此我们可以使用reshape操作

import torch
import torchvision
from torch import nn
from torch.nn import Conv2d
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter#准备测试集
dataset = torchvision.datasets.CIFAR10("./das", train=False, transform=torchvision.transforms.ToTensor(),download = True)dataloader = DataLoader(dataset, batch_size=64)class Test(nn.Module):def __init__(self):super(Test, self).__init__()self.conv1 = Conv2d(in_channels=3,out_channels=6,kernel_size=3,stride=1,padding=0)def forward(self, x):x = self.conv1(x)return xtest = Test()
print(test)
writer = SummaryWriter("logs")
step = 0
for data in dataloader:imgs, targets = dataoutput = test(imgs)# print(output.shape)writer.add_images("input",imgs, step)output = torch.reshape(output, (-1,3,30,30)) # 根据错误提示进行修改writer.add_images("output", output, step)step = step + 1

请添加图片描述
我们来看一下size的变化
input[64,3,32,32]
output[64,6,30,30]–(经过reshape)–>[xxx, 3, 30,30]

我们在pytorch官网上面可以找到input/output的形状的计算方法
在这里插入图片描述
input[64,3,32,32]
output[64,6,30,30]
在这里插入图片描述
利用上述公式确实得到了output的Hout,Wout为30

2. 神经网路最大池化的应用

在这里插入图片描述

在PyTorch中,torch.nn.MaxPool2d是一个二维最大池化层,用于对输入信号进行下采样。以下是该操作的主要参数及其作用:

  1. kernel_size:池化窗口的大小,可以是单个整数或两个整数的元组,分别指定高度和宽度。

  2. stride:池化窗口滑动的步长,控制输出特征图的大小。可以是单个整数或两个整数的元组,分别对应高度和宽度。默认值为kernel_size

  3. padding:在输入特征图的边缘添加的零填充的数量,用于控制输出特征图的大小。可以是单个整数或两个整数的元组,分别对应高度和宽度。默认值为0。

  4. dilation:控制池化窗口中元素之间的间距,影响池化窗口覆盖的区域大小。可以是单个整数或两个整数的元组,分别对应高度和宽度。默认值为1。

  5. return_indices:如果设置为True,则会返回每个最大值的索引,这在后续使用torch.nn.MaxUnpool2d时非常有用。默认值为False。

  6. ceil_mode:当设置为True时,输出形状的计算会使用向上取整而不是向下取整。默认值为False。

这些参数共同决定了池化操作的行为和输出特征图的大小。例如,kernel_sizestride决定了池化窗口的大小和移动步长,而paddingdilation则影响输出特征图的大小和池化窗口的覆盖范围。通过合理设置这些参数,可以在保持重要特征的同时减小数据的空间维度,从而降低计算复杂度。

在这里插入图片描述
图片展示了一个5x5的输入图像经过最大池化操作后的结果。使用的池化核大小为3x3,并且kernel_size参数被设置为3。最大池化操作在图像处理中用于降低特征的空间维度,同时保留最重要的特征信息。

图片中还展示了两种不同情况下池化操作的结果,分别是ceil_mode=Trueceil_mode=False(默认值)。当ceil_mode=True时,池化窗口被允许越界,即如果窗口起始于左侧填充或输入区域,则窗口可以超出边界,而起始于右侧填充区域的窗口将被忽略。这会导致输出特征图的尺寸可能与默认情况下不同。

ceil_mode=False时,输出特征图的大小是向下取整计算得到的。而当ceil_mode=True时,输出特征图的大小是向上取整计算得到的。这种设置对于输出特征图的尺寸有影响,尤其是在输入特征图的尺寸不能被池化窗口整除的情况下。

然后我们可以编写代码验证一下

import torch
from torch import nn
from torch.nn import MaxPool2dinput = torch.tensor([[1,2,0,3,1],[0,1,2,3,1],[1,2,1,0,0],[5,2,3,1,1],[2,1,0,1,1]], dtype = torch.float32)
input = torch.reshape(input, (-1,1,5,5))
print(input.shape)class Test(nn.Module):def __init__(self):super(Test, self).__init__()self.maxpool1 = MaxPool2d(3, ceil_mode=True)def forward(self, input):output = self.maxpool1(input)return outputtest = Test()
output = test(input)
print(output)

运行结果是:
在这里插入图片描述

然后我们可以更改ceil_mode

class Test(nn.Module):def __init__(self):super(Test, self).__init__()self.maxpool1 = MaxPool2d(3, ceil_mode=False) # 更改ceil_modedef forward(self, input):output = self.maxpool1(input)return output

运行结果是:
在这里插入图片描述
在tensorboard中打开
请添加图片描述
在这里插入图片描述
池化操作不会减少图片数量,但会通过下采样减小图片尺寸,从而降低后续层的计算量和参数数量。

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

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

相关文章

C++显式声明explicit

C显示声明explicit 在 C 中,explicit 关键字用于修饰单参数构造函数或多参数构造函数(C11 起),其核心作用是禁止编译器的隐式类型转换。 一、必须加 explicit 的典型场景 1. 单参数构造函数 当构造函数只有一个参数时&#xff…

【springboot】HttpClient快速入门

介绍 HttpClient 是Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议 就是我们可以在java程序中使用HttpClient构造http请求,还可以发送h…

安全版4.5.8开启审计后,hac+读写分离主备切换异常

文章目录 环境BUG/漏洞编码症状触发条件解决方案 环境 系统平台:UOS (飞腾) 版本:4.5.8 BUG/漏洞编码 3043 症状 BUG安装包: hgdb-see-4.5.8-db43858.aarch64.rpm 异常:hac集群一主两备环境&#xff…

企业级 Go 多版本环境部署指南-Ubuntu CentOS Rocky全兼容实践20250520

🛠️ 企业级 Go 多版本环境部署指南-Ubuntu / CentOS / Rocky 全兼容实践 兼顾 多版本管理、安全合规、最小权限原则与 CI/CD 可复现性,本指南以 Go 官方 toolchain 为主,结合 asdf 实现跨语言统一管理,并剔除已过时的 GVM。支持 …

Linux 的 TCP 网络编程 -- 回显服务器,翻译服务器

目录 1. 相关函数介绍 1.1 listen() 1.2 accept() 1.3 connect() 2. TCP 回显服务器 2.1 Common.hpp 2.2 InetAddr.hpp 2.3 TcpClient.cc 2.4 TcpServer.hpp 2.5 TcpServer.cc 2.6 demo 测试 3. TCP 翻译服务器 3.1 demo 测试 1. 相关函数介绍 其中一些函数在之前…

Unity3D仿星露谷物语开发46之种植/砍伐橡树

1、目标 种植一棵橡树,从种子变成大树。 然后可以使用斧头砍伐橡树。 2、删除totalGrowthDays字段 修改growthDays的含义,定义每个值为到达当前阶段的累加天数。此时最后一个阶段就是totalGrowthDays的含义。所以就可以删除totalGrowthDays字段。 &…

容器化-K8s-镜像仓库使用和应用

一、K8s 镜像仓库使用 1、启动镜像仓库 cd/usr/local/harbor ./install.sh2、配置镜像仓库地址 在 master 节点和 slaver 节点上,需要配置 Docker 的镜像仓库地址,以便能够访问本地的镜像仓库。编辑 Docker 的配置文件 vi /etc/docker/daemon.json(如果不存在则创建),添…

塔式服务器都有哪些重要功能?

塔式服务器作为一种拥有着独特立式设计的服务器,能够帮助企业节省一定的放置空间,提供一系列的功能和优势,可以运用在多种应用场景当中,下面将探讨一下塔式服务器的主要功能都有哪些? 塔式服务器可以支持基本的应用程序…

2025年- H36-Lc144 --739. 每日温度(单调栈)--Java版

1.题目描述 2.思路 (1)单调栈维护单调递增或者单调递减的数列 (2)因为要求找到当前元素 右边区域,第一个比当前元素大的元素,所以取单调增数量。 (3)单调栈存储元素的索引。如果遇到…

架构选择/区别

目录 一、分层架构(Layered Architecture) 二、微服务架构(Microservices Architecture) 三、分布式架构(Distributed Architecture) 四、单体架构(Monolithic Architecture) 五…

Python----循环神经网络(WordEmbedding词嵌入)

一、编码 当我们用数字来让电脑“认识”字符或单词时,最简单的方法是为每个字符或单词分配一个唯一的编号,然后用一个长长的向量来表示它。比如,假设“我”这个字在字典中的编号是第10个,那么它的表示就是一个很多0组成的向量&…

深入解析Spring Boot与微服务架构:从入门到实践

深入解析Spring Boot与微服务架构:从入门到实践 引言 随着云计算和分布式系统的快速发展,微服务架构已成为现代软件开发的主流模式。Spring Boot作为Java生态中最受欢迎的框架之一,为开发者提供了快速构建微服务的强大工具。本文将深入探讨…

DeepSeek 赋能数字孪生:重构虚实共生的智能未来图景

目录 一、数字孪生技术概述1.1 数字孪生的概念1.2 技术原理剖析1.3 应用领域与价值 二、DeepSeek 技术解读2.1 DeepSeek 的技术亮点2.2 与其他模型的对比优势 三、DeepSeek 赋能数字孪生3.1 高精度建模助力3.2 实时数据处理与分析3.3 智能分析与预测 四、实际案例解析4.1 垃圾焚…

Amazon Q 从入门到精通 – 测试与重构

Amazon Q Developer 是亚马逊推出的一个专为专业开发人员设计的人工智能助手,旨在提升代码开发和管理效率。其主要功能包括代码生成、调试、故障排除和安全漏洞扫描,提供一站式代码服务。 众所周知,在软件开发领域,测试代码是软件…

专题五:floodfill算法(图像渲染深度优先遍历解析与实现)

以leetcode733题为例 题目解析: 给一个初始坐标(sr,sc)比如示例中的粉色的1,如果周围上下左右都是1,就是连通块(性质相同的地方),把它涂上颜色(2&#xff09…

在金融发展领域,嵌入式主板有什么优点?

在金融发展领域,嵌入式主板能够有力推动金融行业的智能化与高效化进程。主板的强大计算能力可以保障业务高效运行。例如在银行的高频交易场景下,其强大计算能力可确保系统在高负荷下依然保持流畅稳定,快速响应用户需求,大大提升金…

《Python星球日记》 第94天:走近自动化训练平台

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、自动化训练平台简介1. Kubeflow Pipelines2. TensorFlow Extended (TFX)二、自动化训练流程1. 数据预处理2. 模型训练3. 评估与部署三、构建…

PHP、JAVA、Shiro反序列化

目录 一、PHP反序列化 二、JAVA反序列化 三、Shiro反序列化 Shiro-550 反序列化漏洞原理 Shiro-721 反序列化漏洞原理 Padding Oracle 漏洞补充: 防御措施: 一、PHP反序列化 主要是分为有类和无类: 1、有类:就有相关的魔术…

AM32电调学习解读六:main.c文件的函数介绍

最近在学习AM32电调的2.18版本的源码,我用的硬件是AT32F421,整理了部分流程处理,内容的颗粒度是按自己的需要整理的,发出来给有需要的人参考。按自己的理解整理的,技术能力有限,可能理解有误,欢…

WebSocket实时双向通信:从基础到实战

一、WebSocket 基础概念 1. 什么是 WebSocket? 双向通信协议:与 HTTP 的单向请求不同,WebSocket 支持服务端和客户端实时双向通信。 低延迟:适用于聊天室、实时数据推送、在线游戏等场景。 协议标识:ws://&#xff…