pytorch深度学习框架—torch.nn模块(一)

news2025/4/22 12:41:03

pytorch深度学习框架—torch.nn模块

torch.nn模块中包括了pytorch中已经准备好的层,方便使用者调用构建的网络。包括了卷积层,池化层,激活函数层,循环层,全连接层。

卷积层

pytorch中针对使用场景的不同,有一维卷积,二维卷积,三维卷积和转置卷积等。都可以从torch.nn模块中进行调用。

层对应的类功能作用
troch.nn.Conv1d()应用1D卷积
troch.nn.Conv2d()应用2D卷积
troch.nn.Conv3d()应用3D卷积
troch.nn.Transpose1d()应用1D转置卷积
troch.nn.Transpose2d()应用2D转置卷积
troch.nn.Transpose3d()应用3D转置卷积

conv1d常用在文本、conv2d常用在图片、conv3d常用在帧图片

以torch.nn.Conv2d为例介绍卷积在图像上的操作

torch.nn.Conv2d(in_channels,
				out_channels,
				kernel_size,
				stride=1,
				padding=0,
				dilation=1,
				groups=1,
				bias=True)
  • in_channels:(整数) 输入图像的通道数
  • out_channels(整数)经过卷积运算后,输出特征映射的数量。
  • kernel_size(整数或者数组):卷积核大小
  • stride(步长)默认为1
  • padding:在输入两边进行0填充的数量,默认为0
  • dilation:卷积核元素之间的步幅
  • groups:从输入通道到输出通道的阻塞连接数
  • bias:添加偏置默认为True

输入为一个张量,输出为一个张量

将一张图像经过卷积之后,输出特征结果并查看对应的数据。

import torch
import torch.nn as nn
import matplotlib.pyplot as plt
from PIL import Image
import numpy as np
# 读取图像-转化为灰度图片-转化为numpy数组
myim = Image.open("data/bg.jpg")
myimgray = np.array(myim.convert("L"),dtype=np.float32)

在这里插入图片描述

#可视化图片
plt.figure(figsize=(6,6))
plt.imshow(myimgray,cmap=plt.cm.gray)
plt.axis("off")
plt.show()

在这里插入图片描述

## 将数组转化为张量
imh,imw = myimgray.shape
myimgray_t = torch.from_numpy(myimgray.reshape(1,1,imh,imw))
myimgray_t.shape

经过上面的操作得到了一个560 * 989的数组,进行卷积操作之前先将其转化为张量

卷积操作

卷积时先将图像转化为四维表示[batch,channel,h,w]在对图像进行卷积操作以后获取两个特征映射
第一个特征映射用图像轮廓提取卷积核获取,第二个特征映射使用的卷积核为随机数,卷积核大小为5x5图像边缘不使用0填充

# 对灰度图像进行卷积提取图像轮廓
kersize = 5
ker = torch.ones(kersize,kersize,dtype=torch.float32)*-1
ker[2,2] = 24
ker = ker.reshape((1,1,kersize,kersize))

进行卷积操作提取特征,并压缩维度尺寸

## 进行卷积操作
conv2d = nn.Conv2d(1,2,(kersize,kersize),bias=False)
# 设置卷积时使用的核,第一个核使用边缘检测核
conv2d.weight.data[0] = ker
# 对灰度图像进行卷积操作
imconv2dout = conv2d(myimgray_t)
#对卷积后的输出进行维度压缩
imconv2dout_im = imconv2dout.data.squeeze()
#输出卷积后的尺寸
imconv2dout_im.shape

在这里插入图片描述

#可视化卷积后的图像
plt.figure(figsize=(12.,6))
plt.subplot(1,2,1)
plt.imshow(imconv2dout_im[0],cmap=plt.cm.gray)
plt.axis("off")
plt.show()

在这里插入图片描述

池化层

池化层的目的是对卷积之后的特征进行进一步的处理,可以起到对数据进行进一步浓缩的效果。

整个池化的过程包括了最大池化(MaxPool)平均池化(AvgPool)与自适应池化。每一种池化都包括了1d 2d 3d三种类型的池化过程

下面对torch.nn.MaxPool2d()池化操作的相关参数的应用进行说明

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

参数的使用说明

  • kernel_size 最大池化的窗口大小
  • stride:最大池化窗口移动的步长,默认值是kernel_size
  • padding:输入的每一条边补充0的层数
  • dilation:控制窗口元素步幅参数
  • return_indices:如果为true则返回最大索引,便于之后的torch.nn.MaxUnpool2d操作

输入为张量,同时输出为张量

下面以最大池化为例子进行说明

# 对卷积后的结果进行最大池化
maxpool2 = nn.MaxPool2d(2,stride=2)
pool2_out = maxpool2(imconv2dout)
pool2_out_im = pool2_out.squeeze()
pool2_out.shape

可视化最大池化后的结果

将两个特征映射可视化之后得到对应结果。

plt.figure(figsize=(12,6))
plt.subplot(1,2,1)
plt.imshow(pool2_out_im[0].data,cmap=plt.cm.gray)
plt.subplot(1,2,2)
plt.imshow(pool2_out_im[1].data,cmap=plt.cm.gray)
plt.show()

在这里插入图片描述

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

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

相关文章

多云时代来临,容器存储谁敢横刀立马?

多云时代来临,容器存储谁敢横刀立马? 原创2023-06-12 21:54大数据在线 2011年,Gartner提出了数字化转型的理念;十多年来,企业数字化经历了移动化、云化等几次变革潮流,如今走入一个新的时代:多…

Docker 生成 golang 程序镜像

一. 准备golang程序 package mainimport "github.com/gin-gonic/gin"func main() {go func() {r1 : gin.Default()r1.GET("/sayHello/", func(c *gin.Context) {c.JSON(200, "hello1")})r1.Run(":8992")}()r : gin.Default()r.GET(&q…

详解Linux内核安全技术——磁盘加密技术概述和eCryptfs

一、概述 加密是最常见的数据安全保护技术,在数据生命周期各阶段均有应用。从应用场景和技术实现上,按加密对象、用户是否感知、加密算法等维度,有多种分类及对应方案,并在主流操作系统如Windows、Linux、Android中有广泛应用。 …

AWS CodeWhisperer 简单介绍

一、何为AWS CodeWhisperer Amazon CodeWhisperer能够理解以自然语言(英语)编写的注释,并能实时生成多条代码建议, 以此提高开发人员生产力。 二、主要功能 Amazon CodeWhisperer 的主要功能,包括代码生成、引用追踪…

12.异常检测

12.1 异常检测的应用 异常检测最常见的应用是欺诈检测; 如果你有很多用户,每个用户都在从事不同的的活动,你可以对不同的用户活动计算特征变量,然后可以建立一个模型来表示用户表现出各种行为的可能性,用来表示用户行…

LiangGaRy-学习笔记-Day22

1、shell工具-tput 这个是tput bash工具 具体的操作如下: tput clear:清屏tput cup Y X 第Y行,第X列的位置 tput bold:字体加粗tput sgr0 : 重置命令tput setaf n n:代表数字0-7 0黑色1红色2绿色3黄色4蓝…

【Protobuf速成指南】Map类型的使用

文章目录 2.4 map 类型一、 基本认识二、map相关函数4.3 contact2.4的改写 2.4 map 类型 本系列文章将通过对通讯录项目的不断完善,带大家由浅入深的学习Protobuf的使用。这是Contacts的2.4版本,在这篇文章中将带大家学习Protobuf的 map 语法&#xff0c…

Java自制绘图软件

引言 在大连时接触了Java,Java非常优雅,我非常喜欢。期末老师要做一个项目作品,看着windows自带的画图软件,我决定自己动手做一个绘图软件。经过无数次界面调试,刷新层叠关系令我爆肝了一个月,最终完成了这…

没有AI歌手一键包,纯纯的算法项目

项目地址: https://github.com/PlayVoice/so-vits-svc-5.0 来源丨元语音技术 本项目的目标群体是:深度学习初学者,具备Pyhon和PyTorch的基本操作是使用本项目的前置条件; 本项目旨在帮助深度学习初学者,摆脱枯燥的纯…

2023年6月最新|大屏可视化

大屏可视化 一、可视化适配 大屏下显示一般都是16:9尺寸 1920*1080 ,做适配也就是在这个比例的基础上进行的 方案一:打开VSCode终端,下载flexible npm i lib-flexible修改源码 要修改的源码的路径: 项目/mode_modules/lib-fl…

Springboot+Vue服务器盲盒活动

文章目录 一、项目要求二、说明文档1、用户抽奖主页/raffle2、多种奖品链接1、奖品1 discont /discount2、奖品2 CPU upgrade /cpu3、奖品3 Memory upgrade /memory4、奖品4 Increase duration /duration5、奖品5 Send to server /server6、奖品6 Configuration upgrade /upgra…

信必优成功案例-全球Tops汽车技术供应商

该集团是全球Tops汽车技术供应商,业务范围涵盖了汽油系统、柴油系统、汽车底盘控制系统、汽车电子驱动、起动机与发电机、电动工具、家用电器、传动与控制技术、热力技术和安防系统等。信必优于2021年开始为该客户服务,参与了客户多个项目,以…

Android进阶 四大组件的工作过程(二):Service的工作过程

Android进阶 四大组件的工作过程(二):Service的工作过程 导语 本片文章主要是来介绍Service组件的工作过程的,主要分成Service的启动和Service的绑定两个部分来讲。上一篇文章我们已经介绍了Activity的工作工程,而Ser…

Windows软件:如何安装ideaIU-2020.3.3并使用无限重置插件达到永久使用

​前言: ​在我们做SpringBoot Java项目时,一个好的开发工具可以让我们的效率达到事半功倍,早期的eclipse已经无法满足我们日常需求,当然idea集成开发工具在很早前就已经进入市场,如今取得了无法撼动的地位&#xff0c…

度学习pytorch实战六:ResNet50网络图像分类篇自建花数据集图像分类(5类)超详细代码

1.数据集简介、训练集与测试集划分 2.模型相关知识 3.model.py——定义ResNet50网络模型 4.train.py——加载数据集并训练,训练集计算损失值loss,测试集计算accuracy,保存训练好的网络参数 5.predict.py——利用训练好的网络参数后&#xff0…

为Nomad Web使用添加快捷应用图标

大家好,才是真的好。 上次我们说到Nomad Web已经更新到了1.0.8版本,作为未来的“Notes客户机”(运行在浏览器中),Nomad Web的更新迭代很快。从1.0.5版本开始,就可以直接部署在Domino服务器上,而…

STM32MP157_PRO开发板的第一个驱动程序

文章目录 目的:为什么编译驱动程序之前要先编译内核?编译内核编译设备树编译安装内核模块编译内核模块安装内核模块到 Ubuntu 的NFS目录下备用 安装内核和模块到开发板上编译 led 驱动在开发板安装驱动模块下载驱动程序安装驱动模块 目的: 在…

Netty实战(十三)

WebSocket协议(一) 一、什么是WebSocket 协议二、简单的 WebSocket 程序示例2.1 程序逻辑2.2 添加 WebSocket 支持2.3 处理 HTTP 请求2.4 处理 WebSocket 帧 一、什么是WebSocket 协议 WebSocket 协议是完全重新设计的协议,旨在为 Web 上的双…

读书笔记-《ON JAVA 中文版》-摘要16[第十六章 代码校验]

文章目录 第十六章 代码校验1. 测试1.1 单元测试1.2 JUnit1.3 测试覆盖率的幻觉 2. 前置条件2.1 断言(Assertions)2.2 Java 断言语法2.3 Guava 断言2.4 使用断言进行契约式设计2.4.1 检查指令2.4.2 前置条件2.4.3 后置条件2.4.4 不变性2.4.5 放松 DbC 检…

Frida技术—逆向开发的屠龙刀

简介 Frida是一种基于JavaScript的动态分析工具,可以用于逆向开发、应用程序的安全测试、反欺诈技术等领域。Frida主要用于在已安装的应用程序上运行自己的JavaScript代码,从而进行动态分析、调试、修改等操作,能够绕过应用程序的安全措施&a…