Pytorch学习 day07(神经网络基本骨架的搭建、2D卷积操作、2D卷积层)

news2024/12/26 23:42:22

神经网络基本骨架的搭建

  • Module:给所有的神经网络提供一个基本的骨架,所有神经网络都需要继承Module,并定义_ _ init _ _方法、 forward() 方法
  • 在_ _ init _ _方法中定义,卷积层的具体变换,在forward() 方法中定义,神经网络的前向传播具体是什么样的
  • 官方代码样例如下:
import torch.nn as nn
import torch.nn.functional as F

class Model(nn.Module):
    def __init__(self):
        super().__init__()
        self.conv1 = nn.Conv2d(1, 20, 5)
        self.conv2 = nn.Conv2d(20, 20, 5)

    def forward(self, x):
        x = F.relu(self.conv1(x))
        return F.relu(self.conv2(x))
  • 表明输入 x 经过一个卷积层A,一个非线性层a,一个卷积层B,一个非线性层b,最后输出,如下图:
    在这里插入图片描述
  • 简单模型代码如下:
from torch import nn
import torch

# 定义一个简单的Module
class Tudui(nn.Module):
    def __init__(self): # 初始化函数
        super().__init__()  # 调用父类的初始化函数

    def forward(self, input):   # 前向传播函数
        output = input + 1  # 定义张量的加法运算
        return output   # 返回输出张量

tudui = Tudui() # 实例化一个Tudui对象
x = torch.tensor(1.0)   # tensor()函数可以将任意数据转换为张量
print(tudui(x))
* 注意:可以在调试模式中,选择单步执行代码,一步一步执行更清晰

2D卷积操作(了解原理即可,实际直接使用卷积层)

在这里插入图片描述

  • 2D卷积操作:卷积核在输入图像上不断移动,并把对应位相乘再求和,最后得到输出结果,以下是参数设置:
    • input:输入张量的维数要是四维,batch表示一次输入多少张图像,channel表示通道数,RGB图像的通道数为3,灰度图像(二维张量)的通道数为1,H为高度,W为宽度
    • weight:卷积核,维数也要是四维,out_channel表示卷积核的数量,in_channel表示输入图像的通道数,一般groups为1,H为高度,W为宽度
    • stride:卷积核每次移动的步长(为整数或者长度为2的元组),如果是整数,表示在水平和垂直方向上使用相同的步长。如果是元组,分别表示在水平和垂直方向上的步长。默认为1。
    • padding:控制在输入张量的边界周围添加的零填充的数量(为整数或长度为2的元组),如果是整数,表示在水平和垂直方向上使用相同的填充数量。如果是元组,分别表示在水平和垂直方向上的填充数量。默认为0
  • 例如,将一张灰度图经过2D卷积操作得到输出的代码,如下:
import torch

# 因为想让输入数据是tensor类型的,所以使用torch.tensor
input = 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]])

# 因为想让卷积核是tensor类型的,所以使用torch.tensor
kernel = torch.tensor([[1,2,1],
                      [0,1,0],
                      [2,1,0]])
print(input.shape) # torch.Size([5, 5])
print(kernel.shape) # torch.Size([3, 3])

# 由于卷积核的尺寸和输入的尺寸都不满足卷积运算的要求,所以需要对输入和卷积核进行维度的扩展
input = torch.reshape(input, [1,1,5,5]) # 输入是一张二维图片,所以batch_size=1(一张),通道数为1(二维张量)
kernel = torch.reshape(kernel, [1,1,3,3]) # 卷积核的个数为1,所以输出通道数为1,输入通道数由上可知为1

print(input.shape) # torch.Size([1, 1, 5, 5])
print(kernel.shape) # torch.Size([1, 1, 3, 3])

output = torch.nn.functional.conv2d(input, kernel, stride=1)   # 经过2D卷积运算后的输出 
print(output)
  • 可视化图如下:
    在这里插入图片描述
  • padding设置为1的可视化图如下:
    在这里插入图片描述

2D卷积层

在这里插入图片描述
在这里插入图片描述

  • 2D卷积层,通常我们直接使用卷积层即可,上一节仅供了解,以下是参数设置:
    • in_channels:输入通道数,RGB图像为3,灰度图像为1
    • out_channels:输出通道数,即卷积核的个数
    • kernel_size:卷积核的高宽(整数或元组),整数时表示高宽都为该整数,元组时表示分别在水平和垂直方向上的长度。我们只需要设置卷积核的高宽,而卷积核内部的具体参数不需要我们指定,它是在神经网络的训练中不断地对分布进行采样,同时进行不断调整
    • stride:卷积核每次移动的步长(整数或元组),整数时表示在水平和垂直方向上使用相同的步长。元组时分别表示在水平和垂直方向上的步长。默认为1。
    • padding:控制在输入张量的边界周围添加的零填充的数量(为整数或元组),如果是整数,表示在水平和垂直方向上使用相同的填充数量。如果是元组,分别表示在水平和垂直方向上的填充数量。默认为0
    • padding_mode:控制以什么样的模式进行填充,默认为 zeros 零填充
    • dilation:卷积核之间的距离,空洞卷积,默认为1
    • groups:默认为1
    • bias:给输出加一个偏置,默认为True
  • 以下是2D卷积层的可视化图像,青色的为输出图像,蓝色为输入图像,深蓝色为卷积核:
请添加图片描述请添加图片描述
No padding,No stridesAribitrary padding,No strides
请添加图片描述请添加图片描述
Half padding,No stridesFull padding,No strides
请添加图片描述请添加图片描述请添加图片描述
No padding,stridesPadding,stridesPadding,strides(odd)

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

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

相关文章

Java设计模式:适配器模式的三种形式(五)

码到三十五 : 个人主页 心中有诗画,指尖舞代码,目光览世界,步履越千山,人间尽值得 ! 适配器模式用于将一个类的接口转换为客户端所期望的另一个接口,以实现不兼容接口之间的协作。它像电器插头转换器一样…

单调栈(例题+解析)

1、应用场景 找出一个数的左面离概述最近的且小于该数的数&#xff08;同理右面也可以&#xff09; 例如&#xff1a; 数组a[i] 3 4 2 7 5 答案&#xff1a; -1 3 -1 2 2 2、如何实现找到规律 暴力写法&#xff1a; for(int i0;i<n;i) {for(int ji-1;j>0;j--){i…

金融数据采集与风险管理:Open-Spider工具的应用与实践

一、项目介绍 在当今快速发展的金融行业中&#xff0c;新的金融产品和服务层出不穷&#xff0c;为银行业务带来了巨大的机遇和挑战。为了帮助银行员工更好地应对这些挑战&#xff0c;我们曾成功实施了一个创新的项目&#xff0c;该项目采用了先进的爬虫技术&#xff0c;通过ope…

苍穹外卖学习-----2024/03/08

1.新增菜品 工具类AliOssUtil .java Data AllArgsConstructor Slf4j public class AliOssUtil {private String endpoint;private String accessKeyId;private String accessKeySecret;private String bucketName;/*** 文件上传** param bytes* param objectName* return*/pub…

STM32day3

1.思维导图 1.总结任务的调度算法&#xff0c;把实现代码再写一下 /* Definitions for myTask02 */ osThreadId_t myTask02Handle; uint32_t myTask02Buffer[ 64 ]; osStaticThreadDef_t myTask02ControlBlock; const osThreadAttr_t myTask02_attributes {.name "myTa…

PostgreSQL容器安装

docker中的centos7中安装 选择对应的版本然后在容器中的centos7中执行下面命令 但是启动容器的时候需要注意 开启端口映射开启特权模式启动init进程 docker run -itd --name centos-postgresql -p 5433:5432 --privilegedtrue centos:centos7 /usr/sbin/init 启动然后进入后先…

Mysql的Cardinality值

什么是Cardinality值&#xff1f; Cardinality值是Mysql做索引优化时一个非常关键的值&#xff0c;优化器会根据这个值来判断是否使用这个索引&#xff0c;它表示索引中唯一值的数目估计值&#xff0c;该值应该尽可能接近1&#xff0c;如果非常小&#xff0c;则用户需要考虑是否…

Clickhouse表引擎介绍

作者&#xff1a;俊达 1 引擎分类 ClickHouse表引擎一共分为四个系列&#xff0c;分别是Log、MergeTree、Integration、Special。其中包含了两种特殊的表引擎Replicated、Distributed&#xff0c;功能上与其他表引擎正交&#xff0c;根据场景组合使用。 2 Log系列 Log系列…

运维知识点-Apache HTTP Server

Apache 介绍 介绍 Apache是一个开源的Web服务器软件&#xff0c;全称为Apache HTTP Server&#xff0c;由Apache软件基金会开发和维护。它是目前全球使用最广泛的Web服务器软件之一&#xff0c;占全球所有网络服务器的很大比例。Apache服务器具有跨平台的特性&#xff0c;可以…

ChatGPT Plus 支付出现「您的银行卡被拒绝/your card has been declined」怎么办?

ChatGPT Plus 支付出现「您的银行卡被拒绝/your card has been declined」怎么办&#xff1f; 在订阅 ChatGPT Plus 或者 OpenAI API 时&#xff0c;有时候会出现已下报错 &#xff1a; Your card has been declined. 您的银行卡被拒绝 出现这种错误&#xff0c;有以下几个解…

Linux操作系统的vim常用命令和vim 键盘图

在vi编辑器的命令模式下&#xff0c;命令的组成格式是&#xff1a;nnc。其中&#xff0c;字符c是命令&#xff0c;nn是整数值&#xff0c;它表示该命令将重复执行nn次&#xff0c;如果不给出重复次数的nn值&#xff0c;则命令将只执行一次。例如&#xff0c;在命令模式下按j键表…

FPGA高端项目:FPGA基于GS2971的SDI视频接收+GTX 8b/10b编解码SFP光口传输,提供2套工程源码和技术支持

目录 1、前言免责声明 2、相关方案推荐本博已有的 SDI 编解码方案本方案的SDI接收转HDMI输出应用本方案的SDI接收图像缩放应用本方案的SDI接收纯verilog图像缩放纯verilog多路视频拼接应用本方案的SDI接收HLS图像缩放Video Mixer多路视频拼接应用本方案的SDI接收OSD动态字符叠加…

防火墙配置实验

配置 配置IPSec FW1 FW3 NAT策略 FW1 FW3 安全策略 FW1 FW3 最后测试

软考高级:系统工程生命周期方法(计划驱动方法、渐进迭代式方法等)概念和例子

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;大厂高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

Windows按文件类型指定默认应用程序方法,.py文件设置默认打开程序实例演示

有两种方法可以设置按文件类型指定默认应用。 一个是系统的设置&#xff0c;但是部分类型里面是没有的&#xff0c;这种就要通过注册表来添加。 如果没有的话&#xff0c;通过 winR 打开运行&#xff0c;然后输入 regedit 打开注册表&#xff0c;在 计算机\HKEY_CLASSES_ROO…

【leetcode热题】重排链表

给定一个单链表 L 的头节点 head &#xff0c;单链表 L 表示为&#xff1a; L0 → L1 → … → Ln - 1 → Ln请将其重新排列后变为&#xff1a; L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → … 不能只是单纯的改变节点内部的值&#xff0c;而是需要实际的进行节点交换。 示…

<商务世界>《第8课 Leads——MQL——SQL——商机——成交》

1 各种概念 英文缩写概念Traffic流量Leads潜在客户&#xff0c;销售线索&#xff1b;简称潜在线索MQLMarketing-Qualified Leads市场认可线索SQLSales-Qualified Leads销售认可线索OPPOpportunity商机Account成单客户 2 线索到商机 一般企业会把自身线索进行如下的划分&…

ubuntu18.04编译OpenCV-3.4.19+OpenCV_contrib-3.4.19

首先确保安装了cmake工具 安装opencv依赖文件 sudo apt-get install build-essential sudo apt-get install git libgtk-3-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev sudo apt-get install python3-dev python3-numpy libtbb2 libtbb-dev libjpeg-dev li…

瑞_23种设计模式_模板方法模式

文章目录 1 模板方法模式&#xff08;Template Pattern&#xff09; ★ 钩子函数1.1 介绍1.2 概述1.3 模板方法模式的结构1.4 模板方法模式的优缺点1.5 模板方法模式的使用场景 2 案例一2.1 需求2.2 代码实现 3 案例二3.1 需求3.2 代码实现 4 JDK源码解析&#xff08;InputStre…

Javaweb day13 day14 day15

spring boot 快速入门 写法 http协议 请求协议 响应协议 协议解析 Tomcat