PyTorch学习笔记(三)卷积池化线性激活和Dropout层

maskrcnn_benchmark理解记录——关于batch norm、relu、dropout 的相对顺序以及dropout可不可用 ps: 1.如何在卷积神经网络中实现全局平均池化。在此之前,建议阅读ResNet这篇论文,以了解全局平均池化操作的好处。代替全连接层。 2.dropout只可能在box分支的两个全连接层那里,这个可以后期finetuning下。全连接网络可以使feature map的维度减少,进而输入到softmax,但是又会造成过拟合,可以用pooling来代替全连接。那就解决了之前的问题:要不要在f... 阅读详情

Environment

  • OS: macOS Mojave
  • Python version: 3.7
  • PyTorch version: 1.4.0
  • IDE: PyCharm


0. 写在前面

PyTorch 主要是用 torch.nn 模块来构建神经网络,该模块包含以下几个内容

  • 基本网络层,卷积、池化等,如 Conv2d、ReLU;
  • functional 模块,函数的具体实现,如卷积、池化、激活函数等,Conv2d、ReLU 等类均为调用这里的函数;
  • Container 类,模型容器,用于组装和管理网络的属性;
  • Parameter 类,Tensor 的子类,用于表示可学习的参数;
  • init 模块,一些初始化的方法。

搞一下 torch.nn 中提供的各种层,包括卷积层(卷积、转置卷积)、池化层(平均池化、最大池化、反池化)、全连接层、激活函数层。

这里主要记录对于二维的情况,以经典的 Lenna 图为例,尺寸 299 x 299 ,观察

  1. 卷积的输出
  2. 转置卷积的输出
  3. 最大池化的输出
  4. 平均池化的输出
  5. 去池化的输出

在这里插入图片描述

1. 卷积与转置卷积

1.1 卷积层

  • torch.nn.Conv2d 类,该类的实例对象能够对一个 batch 的二维 Tensor 进行卷积,要求输入的格式为 (B, C, H, W)。

卷积层输出与输入的尺寸关系,以高为例,宽同理
H o u t = ⌊ H i n + 2 × p a d d i n g [ 0 ] − d i l a t i o n [ 0 ] × ( k e r n e l _ s i z e [ 0 ] − 1 ) − 1 s t r i d e [ 0 ] + 1 ⌋ H_{out} = \lfloor \frac{H_{in} + 2 \times padding[0] - dilation[0] \times (kernel\_size[0] - 1) - 1}{stride[0]} + 1 \rfloor Hout​=⌊stride[0]Hin​+2×padding[0]−dilation[0]×(kernel_size[0]−1)−1​+1⌋

from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import torch
from torch.nn import Conv2d
from torchvision.transforms import ToTensor, ToPILImage


img_pil = Image.open('Lenna.jpg')
img_tensor = ToTensor()(img_pil)  # (299, 299, 3) -> (3, 299, 299)
x = torch.unsqueeze(img_tensor, dim=0)  # (3, 299, 299) -> (1, 3, 299, 299)

# 定义卷积层
conv_layer = Conv2d(
    in_channels=3,  # 输入通道数
    out_channels=1,  # 输出通道数,即卷积核的个数
    kernel_size=3,  # 卷积核的尺寸,传入整数表示高宽相同;若要不同可传入元组,表示卷积核的 (高, 宽)
    stride=1,  # 步长。同样可传入元组,表示高和宽方向上的分别步长
    padding=0,  # 边缘填充。同样可传入元组,表示高宽方向上分别填充的大小
    dilation=1,  # 空洞卷积大小,增大可以扩大感受野,常在图像分割任务中使用
    groups=1,  # 分组卷积
    bias=True,  # 是否设置偏置
    padding_mode='zeros'  # 填充的模式
)

# forward and visualization
sns.set_style('white')
plt.figure(figsize=(15, 15))
for i in range(4):
    # 对图像执行卷积操作
    torch.manual_seed(i)
    torch.nn.init.xavier_normal_(conv_layer.weight.data)  # 参数初始化
    out = conv_layer(x)  # 对图像进行卷积操作 size: (1, 1, 297, 297)

    # 将 torch tensor 转换为 PIL Image 再转换为 numpy array
    out_pil = ToPILImage()(out[0])  # (1, 297, 297) -> (297, 297, 1)
    out_array = np.asarray(out_pil)

    # visualization
    plt.subplot(10, 10, i + 1)
    plt.xticks([])
    plt.yticks([])
    plt.imshow(out_array, cmap='gray')

plt.show()

在这里插入图片描述

1.2 转置卷积层

  • torch.nn.ConvTranspose2d 类,该类的实例对象能够对一个 batch 的二维 Tensor 进行卷积,同样,要求输入的格式为 (B, C, H, W)。

转置卷积(Transposed Convolution),又称为反卷积(Deconvolution)或部分跨越卷积(Fractionally-strided Convolution),对图像进行上采样(upsampling)。为避免与信号处理中反卷积的概念混淆,深度学习中一般不建议称作"反卷积",而称为"转置卷积"。

转置卷积层输出与输入的尺寸关系,以高为例,宽同理
H o u t = ( H i n − 1 ) × s t r i d e [ 0 ] − 2 × p a d d i n g [ 0 ] + d i l a t i o n [ 0 ] × ( k e r n e l _ s i z e [ 0 ] − 1 ) + o u t p u t _ p a d d i n g [ 0 ] + 1 H_{out} = (H_{in} - 1) \times stride[0] - 2 \times padding[0] + dilation[0] \times (kernel\_size[0] - 1) + output\_padding[0] + 1 Hout​=(Hin​−1)×stride[0]−2×padding[0]+dilation[0]×(ke

Dropout层到底在干些什么(Pytorch实现) Dropout操作对隐藏层中的神经元随机“丢弃”,每批次数据Dropout丢弃的神经元并不固定,这就导致此时的网络结构是不同的,所以进行网络训练时其实就相当于在训练不同的网络,整个网络训练过程就好比对不同的网络模型进行平均法集成,以此得到更好的泛化能力,有效缓解过拟合。(2)输入X沿着网络前向传播,然后通过误差回传更新神经元参数,需要注意的是此时只有未被“置零”的神经元参数被更新,处于“睡眠”状态的神经元参数与上一次参数更新的结果保持一致;评估时,Dropout不会对神经元进行操作,可以忽略。 阅读详情

相关推荐

pytorch学习笔记四:torch.nn下常用网络层(layer)详解

一、卷积层 卷积:Conv2d ''' in_channels:输入通道数 out_channels:输出通道数 kernel_size:卷积核尺寸,整数或者元组 stride:卷积操作的步幅,整数或者元组 padding:数据hw方向上填充的层数,整数或者元组,默认填充的是0 dilation:卷积核内部各点的间距,整数或者元组 groups:控制输入和输出之间的连接;group...

耐心的小黑的博客 5859

IIS - 会话cookie中缺少HttpOnly属性

不啰嗦,我们直接开始! 先进行常规设置 打开配置编辑器 选中图中节点,将httpOnlyCookies设置为true 然后。。。不起作用。。。 换种方式 通过配置出站规则getcookie添加HttpOnly 在Web.config中添加如下出站规则 <rewrite> <outboundRules> <rule name="Add HttpOnly"> <match serverVa.

。 21万+

差分放大电路的计算

反馈,对于运算放大电路来说,运放工作在线性区,所以这里一定是负反馈,没有反馈(开环)或者是正反馈,那是比较器电路而不是放大电路,这时候运放工作在饱和区或称为非线性工作区,正因为饱和,输出才是电源电压的幅值。图2是一种带正反馈的运放电路,这里就不能叫运算放大电路了,因为运放的开环放大倍数理想是无限大,当然实际中不可能无限大,所以如下结构是迟滞电压比较器,运放工作在非线性区或饱和区。实际应用电路中,我们为了简化计算,也是用最简方法计算,经常使用的电路也是上述电路,令电阻相等关系,简化计算。

qq_40170041的博客 354

嵌入式主板系统配置实战:OTG切换、双网共存与开机自启详解

在嵌入式Linux系统开发中,系统配置是连接硬件平台与应用功能的关键桥梁。其核心原理在于通过内核参数、文件系统接口和系统服务等机制,实现对硬件资源和系统行为的精细控制。掌握这些配置技术,对于提升开发效率、保障系统稳定性和实现产品差异化至关重要。无论是工业物联网网关、智能终端还是边缘计算设备,都需要对网络、USB、启动项等基础功能进行可靠配置。本文聚焦于嵌入式主板开发中的高频需求,例如OTG功能模式切换、双网共存路由策略以及基于systemd的开机自启动实现,通过具体的命令和脚本示例,为开发者提供一套可直接复

weixin_30827827的博客 321

解锁笔记智能对话:手把手配置 Obsidian Copilot 插件与硅基流动模型

本文详细介绍了如何为Obsidian笔记软件配置Copilot插件,并接入硅基流动AI模型,从而为个人知识库添加智能对话能力。通过手把手教程,指导用户完成插件安装、API Key获取、模型配置及索引构建,最终实现基于个人笔记内容的深度语义问答,提升知识管理效率。

corn8的博客 613

树莓派4在Bookworm Raspbian系统下无法进入桌面模式(启动后出现彩色画面,然后一直黑屏,但是可以正常启动和ssh)

本文记录了这段比较坎坷的探索之路,由于你的问题不一定是我最终解决方案的,可能是前面探索路上试过的,所以建议按顺序看排除前置问题。 双十一又买了个树莓派 4B,插上之前树莓派 4B 的 TF 卡直接就能使用(毕竟是一样规格的)。但是由于用来连接硬盘的 USB 线是坏的,我以为是系统问题就进行了重装(所以坏掉的线还是直接扔了好)。 重新安装系统就装了最新的 2023-10-10 版本的 64 位的 Raspberry Pi OS,但是出现了一个问题: 启动后出现彩色画面,然后一直黑屏。

ZhongUncle的博客 3735

HanLP的分词

HanLP的分词

sikh_0529的博客 1万+

在 SAP BTP 中通过 MTA 自动创建 Service Broker 的原理与实战

本文探讨了如何在SAP BTP的Cloud Foundry环境中通过MTA部署自动创建和注册Service Broker。传统手动注册方式存在依赖管理员、环境一致性差等问题。通过MTA部署可实现自动化Broker注册,利用占位符生成安全凭证,并确保平台端与应用端认证一致。文章详细解析了关键配置参数,包括create-service-broker标志、Broker名称、认证凭据和访问URL的设置方法。这种基础设施即代码(IaC)方式能提升DevOps实践水平,使服务注册成为应用部署流水线的有机组成部分。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 201

QT开发串口程序与单片机通讯

如果有对象对这个信号感兴趣,想要处理的信号和自己的一个函数(称为槽(slot))绑定来处理这个信号。的内容,虽然实现的功能很简单,但是QT上位机开发的步骤基本就是这些步骤,通过这个基础实例把这些套路摸透我们就可以接着进行后续更多QT程序地开发学习了。QWidget类:所有用户界面对象的基类,窗口部件是用户界面的一个基本单元,它从窗口系统接收鼠标,键盘和其他消息,并在屏幕上绘制自己。我们上面运行的上位机都是在Qt Creator中编译运行的,如果我们需要把编写好的可执行文件发送给别人使用的话还需要进行打包。

谢谢大家的关注和点赞!这里只有纯纯的知识干货,没有一句废话。希望能实实在在帮到大家~要是觉得有用,别忘了给我点支持哟,你 947

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

上一篇: PyTorch学习笔记(二)读取数据
下一篇: PyTorch学习笔记(三)参数初始化与各种Norm层
longrootchen
博客等级 码龄7年 19粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值