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

本文主要是介绍Pytorch学习 day07(神经网络基本骨架的搭建、2D卷积操作、2D卷积层),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

神经网络基本骨架的搭建

  • Module:给所有的神经网络提供一个基本的骨架,所有神经网络都需要继承Module,并定义_ _ init _ _方法、 forward() 方法
  • 在_ _ init _ _方法中定义,卷积层的具体变换,在forward() 方法中定义,神经网络的前向传播具体是什么样的
  • 官方代码样例如下:
import torch.nn as nn
import torch.nn.functional as Fclass 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,输入通道数由上可知为1print(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)

这篇关于Pytorch学习 day07(神经网络基本骨架的搭建、2D卷积操作、2D卷积层)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/789778

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

基本知识点

1、c++的输入加上ios::sync_with_stdio(false);  等价于 c的输入,读取速度会加快(但是在字符串的题里面和容易出现问题) 2、lower_bound()和upper_bound() iterator lower_bound( const key_type &key ): 返回一个迭代器,指向键值>= key的第一个元素。 iterator upper_bou

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

搭建Kafka+zookeeper集群调度

前言 硬件环境 172.18.0.5        kafkazk1        Kafka+zookeeper                Kafka Broker集群 172.18.0.6        kafkazk2        Kafka+zookeeper                Kafka Broker集群 172.18.0.7        kafkazk3

图神经网络模型介绍(1)

我们将图神经网络分为基于谱域的模型和基于空域的模型,并按照发展顺序详解每个类别中的重要模型。 1.1基于谱域的图神经网络         谱域上的图卷积在图学习迈向深度学习的发展历程中起到了关键的作用。本节主要介绍三个具有代表性的谱域图神经网络:谱图卷积网络、切比雪夫网络和图卷积网络。 (1)谱图卷积网络 卷积定理:函数卷积的傅里叶变换是函数傅里叶变换的乘积,即F{f*g}

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学