当前位置: 首页 > news >正文

【Pytorch笔记】7.torch.nn (Convolution Layers)

我们常用torch.nn来封装网络,torch.nn为我们封装好了很多神经网络中不同的层,如卷积层、池化层、归一化层等。我们会把这些层像是串成一个牛肉串一样串起来,形成网络。

先从最简单的,都有哪些层开始学起。

Convolution Layers - 卷积层

torch.nn.Conv1d()

1维卷积层。

torch.nn.Conv1d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True, padding_mode='zeros', device=None, dtype=None)

in_channels:输入tensor的通道数;
out_channels:输出tensor的通道数;
kernel_size:卷积核的大小;
stride:步长;
padding:输入tensor的边界填充尺寸;
dilation:卷积核之间的间距(下面这个图为dilation=2),默认为1;
在这里插入图片描述

groups:从输入通道到输出通道的阻塞连接数。in_channelout_channel需要能被groups整除。更具体地:
groups=1时所有输入均与所有输出进行卷积,groups=2时该操作相当于并排设置两个卷积层,每卷积层看到一半的输入通道,产生一半的输出通道,然后将两个卷积层连接起来。groups=in_channel时输入的每个通道都和相应的卷积核进行卷积;
bias:是否添加可学习的偏差值,True为添加,False为不添加。
padding_mode:填充模式,有以下取值:zeros(这个是默认值)、reflectreplicatecircular

import torch
import torch.nn as nnm = nn.Conv1d(in_channels=16,out_channels=33,kernel_size=3,stride=2)
# input: 批大小为20,每个数据通道为16,size=50
input = torch.randn(20, 16, 50)
output = m(input)
print(output.size())

输出

# output: 批大小为20,每个数据通道为33,size=24
torch.Size([20, 33, 24])

torch.nn.Conv2d()

2维卷积层。

torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True, padding_mode='zeros', device=None, dtype=None)

参数与Conv1d()基本一样,不再赘述。

import torch
import torch.nn as nnm = nn.Conv2d(in_channels=2,out_channels=3,kernel_size=3,stride=2)
input = torch.randn(20, 2, 5, 6)
output = m(input)
print(output.size())

输出

torch.Size([20, 3, 2, 2])

torch.nn.Conv3d()

3维卷积层。

torch.nn.Conv3d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True, padding_mode='zeros', device=None, dtype=None)

参数与Conv1d()基本一样,不再赘述。

import torch
import torch.nn as nnm = nn.Conv3d(in_channels=2,out_channels=3,kernel_size=3,stride=2)
input = torch.randn(20, 2, 4, 5, 6)
output = m(input)
print(output.size())

输出

torch.Size([20, 3, 1, 2, 2])

torch.nn.ConvTranspose1d()

1维转置卷积层。

torch.nn.ConvTranspose1d(in_channels, out_channels, kernel_size, stride=1, padding=0, output_padding=0, groups=1, bias=True, dilation=1, padding_mode='zeros', device=None, dtype=None)

参数与Conv1d()基本一样,不再赘述。
唯一不同的是output_padding,与padding不同的是,output_padding是输出tensor的每一个边,外面填充的层数。
padding是输入tensor的每个边填充的层数)

import torch
import torch.nn as nnm = nn.ConvTranspose1d(in_channels=2,out_channels=3,kernel_size=3,stride=1)
input = torch.randn(20, 2, 2)
output = m(input)
print(output.size())

输出

torch.Size([20, 3, 4])

torch.nn.ConvTranspose2d()

2维转置卷积层。

torch.nn.ConvTranspose2d(in_channels, out_channels, kernel_size, stride=1, padding=0, output_padding=0, groups=1, bias=True, dilation=1, padding_mode='zeros', device=None, dtype=None)

参数与Conv1d()基本一样,不再赘述。

import torch
import torch.nn as nnm = nn.ConvTranspose2d(in_channels=2,out_channels=3,kernel_size=3,stride=1)
input = torch.randn(20, 2, 2, 2)
output = m(input)
print(output.size())

输出

torch.Size([20, 3, 4, 4])

torch.nn.ConvTranspose3d()

3维转置卷积层。

torch.nn.ConvTranspose3d(in_channels, out_channels, kernel_size, stride=1, padding=0, output_padding=0, groups=1, bias=True, dilation=1, padding_mode='zeros', device=None, dtype=None)

参数与Conv1d()基本一样,不再赘述。

import torch
import torch.nn as nnm = nn.ConvTranspose3d(in_channels=2,out_channels=3,kernel_size=3,stride=1)
input = torch.randn(20, 2, 2, 2, 2)
output = m(input)
print(output.size())

输出

torch.Size([20, 3, 4, 4, 4])

torch.nn.LazyConv1d()

1维延迟初始化卷积层,当in_channel不确定时可使用这个层。
关于延迟初始化,大家可以参考这篇文章,我认为讲的很好:
俱往矣… - 延迟初始化——【torch学习笔记】

torch.nn.LazyConv1d(out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True, padding_mode='zeros', device=None, dtype=None)

LazyConv1d没有in_channel参数
这不代表这个层没有输入的通道,而是在调用时自动适配,并进行初始化。
引用文章中的一段代码,改成LazyConv1d,讲述使用方法。

import torch
import torch.nn as nnnet = nn.Sequential(nn.LazyConv1d(256, 2),nn.ReLU(),nn.Linear(9, 10)
)
print(net)
[net[i].state_dict() for i in range(len(net))]low = torch.finfo(torch.float32).min / 10
high = torch.finfo(torch.float32).max / 10
X = torch.zeros([2, 20, 10], dtype=torch.float32).uniform_(low, high)
net(X)
print(net)

输出

Sequential((0): LazyConv1d(0, 256, kernel_size=(2,), stride=(1,))(1): ReLU()(2): Linear(in_features=9, out_features=10, bias=True)
)
Sequential((0): Conv1d(20, 256, kernel_size=(2,), stride=(1,))(1): ReLU()(2): Linear(in_features=9, out_features=10, bias=True)
)

可以看出,未进行初始化时,in_features=0。只有传入参数使用网络后才会根据输入进行初始化。

torch.nn.LazyConv2d()

2维延迟初始化卷积层。

torch.nn.LazyConv2d(out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True, padding_mode='zeros', device=None, dtype=None)

torch.nn.LazyConv3d()

3维延迟初始化卷积层。

torch.nn.LazyConv3d(out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True, padding_mode='zeros', device=None, dtype=None)

torch.nn.LazyConvTranspose1d()

1维延迟初始化转置卷积层。

torch.nn.LazyConvTranspose1d(out_channels, kernel_size, stride=1, padding=0, output_padding=0, groups=1, bias=True, dilation=1, padding_mode='zeros', device=None, dtype=None)

torch.nn.LazyConvTranspose2d()

2维延迟初始化转置卷积层。

torch.nn.LazyConvTranspose2d(out_channels, kernel_size, stride=1, padding=0, output_padding=0, groups=1, bias=True, dilation=1, padding_mode='zeros', device=None, dtype=None)

torch.nn.LazyConvTranspose3d()

3维延迟初始化转置卷积层。

torch.nn.LazyConvTranspose3d(out_channels, kernel_size, stride=1, padding=0, output_padding=0, groups=1, bias=True, dilation=1, padding_mode='zeros', device=None, dtype=None)

torch.nn.Unfold()

从一个批次的输入张量中提取出滑动的局部区域块。

torch.nn.Unfold(kernel_size, dilation=1, padding=0, stride=1)

kernel_size:滑动块的大小;
dilation:卷积核之间的间距(torch.nn.Conv1d中有图示);
padding:输入tensor的边界填充尺寸;
stride:滑块滑动的步长。

这里的输入必须是4维的tensor,否则会报这样的错误:

NotImplementedError: Input Error: Only 4D input Tensors are supported (got 2D)

示例

import torch
from torch import nnt = torch.tensor([[[[1.,  2.,  3.,  4.],[5.,  6.,  7.,  8.],[9.,  10., 11., 12.],[13., 14., 15., 16.],]]])unfold = nn.Unfold(kernel_size=(2, 2), dilation=1, padding=0, stride=1)
output = unfold(t)
print(output)

输出

tensor([[[ 1.,  2.,  3.,  5.,  6.,  7.,  9., 10., 11.],[ 2.,  3.,  4.,  6.,  7.,  8., 10., 11., 12.],[ 5.,  6.,  7.,  9., 10., 11., 13., 14., 15.],[ 6.,  7.,  8., 10., 11., 12., 14., 15., 16.]]])

在这里插入图片描述

torch.nn.Fold()

Unfold()的逆操作。当Unfold()时出现滑块有重复覆盖时会导致结果和原来不一样。因为Fold()的过程中对于同一个位置的元素进行加法处理。

torch.nn.Fold(output_size, kernel_size, dilation=1, padding=0, stride=1)

下面是Unfold()和Fold()结合的代码,Unfold()部分和上面代码相同。

import torch
from torch import nnt = torch.tensor([[[[1., 2., 3., 4.],[5., 6., 7., 8.],[9., 10., 11., 12.],[13., 14., 15., 16.]]]])unfold = nn.Unfold(kernel_size=(2, 2), dilation=1, padding=0, stride=1)
output = unfold(t)
print(output)
fold = nn.Fold(output_size=(4, 4), kernel_size=(2, 2))
out = fold(output)
print(out)

输出

tensor([[[ 1.,  2.,  3.,  5.,  6.,  7.,  9., 10., 11.],[ 2.,  3.,  4.,  6.,  7.,  8., 10., 11., 12.],[ 5.,  6.,  7.,  9., 10., 11., 13., 14., 15.],[ 6.,  7.,  8., 10., 11., 12., 14., 15., 16.]]])
tensor([[[[ 1.,  4.,  6.,  4.],[10., 24., 28., 16.],[18., 40., 44., 24.],[13., 28., 30., 16.]]]])

相关文章:

【Pytorch笔记】7.torch.nn (Convolution Layers)

我们常用torch.nn来封装网络,torch.nn为我们封装好了很多神经网络中不同的层,如卷积层、池化层、归一化层等。我们会把这些层像是串成一个牛肉串一样串起来,形成网络。 先从最简单的,都有哪些层开始学起。 Convolution Layers -…...

MySQL内部组件与日志详解

MySQL的内部组件结构 MySQL 可以分为 Server 层和存储引擎层两部分。 Server 层主要包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等)&am…...

【LeetCode】94. 二叉树的中序遍历

94. 二叉树的中序遍历 难度:简单 题目 给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。 示例 1: 输入:root [1,null,2,3] 输出:[1,3,2]示例 2: 输入:root [] 输出:[]示…...

IP-guard WebServer 命令执行漏洞复现

简介 IP-guard是一款终端安全管理软件,旨在帮助企业保护终端设备安全、数据安全、管理网络使用和简化IT系统管理。在旧版本申请审批的文件预览功能用到了一个开源的插件 flexpaper,使用的这个插件版本存在远程命令执行漏洞,攻击者可利用该漏…...

TensorFlow案例学习:图片风格迁移

准备 官方教程: 任意风格的快速风格转换 模型下载地址: https://tfhub.dev/google/magenta/arbitrary-image-stylization-v1-256/2 学习 加载要处理的内容图片和风格图片 # 用于将图像裁剪为方形def crop_center(image):# 图片原始形状shape image…...

解密网络世界的秘密——Wireshark Mac/Win中文版网络抓包工具

在当今数字化时代,网络已经成为了人们生活和工作中不可或缺的一部分。然而,对于网络安全和性能的监控和分析却是一项重要而又复杂的任务。为了帮助用户更好地理解和解决网络中的问题,Wireshark作为一款强大的网络抓包工具,应运而生…...

自学ansible笔记

一、认识ansible Ansible是一款开源自动化运维工具。它有如下特点: 1、不需要安装客户端,通过sshd去通信,比较轻量化; 2、基于模块工作,模块可以由任何语言开发,比较自由和开放; 3、不仅支持命…...

笔记53:torch.nn.rnn() 函数详解

参数解释: (1)input_size():即输入信息 Xt 的每个序列的独热编码向量的长度,即 len(vocab) (2)hidden_size():即隐变量 h 的维度(维度是多少,就代表用几个数…...

【Spring】使用三方包进行数据源对象(数据库)管理

在这里使用alibaba的druid来连接数据库&#xff0c;然后再Spring Config下配置数据库 目录 第一步&#xff1a;在pom.xml中导入坐标第二步&#xff1a;在bean中配置连接注 第一步&#xff1a;在pom.xml中导入坐标 在dependencies下写&#xff1a; <dependency><grou…...

EfficientNet:通过模型效率彻底改变深度学习

一、介绍 EfficientNet 是深度学习领域的里程碑&#xff0c;代表了神经网络架构方法的范式转变。EfficientNet 由 Google Research 的 Mingxing Tan 和 Quoc V. Le 开发&#xff0c;在不影响性能的情况下满足了对计算高效模型不断增长的需求。本文深入探讨了 EfficientNet 背后…...

asp.net core mvc之 布局

一、布局是什么&#xff1f; 布局是把每个页面的公共部分&#xff0c;提取成一个布局页面&#xff08;头、导航、页脚&#xff09;。 二、默认布局 _Layout.cshtml 默认的布局是在 /Views/Shared 目录的 _Layout.cshtml文件。通常Shared目录中的视图都是公共视图。该目录下的…...

【QT HTTP】使用QtNetwork模块制作基于HTTP请求的C/S架构

目录 0 引言1 HTTP基本知识1.1 请求类型1.2 HTTP请求报文格式1.3 HTTP响应报文格式1.4 拓展&#xff1a;GET vs POST 请求方法GET请求请求报文&#xff1a;响应报文 POST请求请求报文响应报文 其他注意事项示例&#xff1a;GET请求示例POST请求示例 2 实战2.1 QtNetwork模块介绍…...

R语言绘制精美图形 | 火山图 | 学习笔记

一边学习&#xff0c;一边总结&#xff0c;一边分享&#xff01; 教程图形 前言 最近的事情较多&#xff0c;教程更新实在是跟不上&#xff0c;主要原因是自己没有太多时间来学习和整理相关的内容。一般在下半年基本都是非常忙&#xff0c;所有一个人的精力和时间有限&#x…...

远程创建分支本地VScode看不到分支

在代码存放处右击&#xff0c;点击Git Bash Here 输入git fetch–从远程仓库中获取最新的分支代码和提交历史 就OK啦&#xff0c;现在分支可以正常查看了...

python后台框架简介

python后台框架 Python是一种流行的编程语言&#xff0c;它有许多优点&#xff0c;如简洁、易读、灵活和功能强大。Python也是一种常用的后端开发语言&#xff0c;它可以用来构建各种类型的网站和应用程序。Python有许多后端框架&#xff0c;可以帮助开发者快速地开发和部署后…...

spring boot validation使用

spring-boot-starter-validation 是 Spring Boot 中用于支持数据验证的模块。它建立在 Java Validation API&#xff08;JSR-380&#xff09;之上&#xff0c;提供了一种方便的方式来验证应用程序中的数据。以下是使用 spring-boot-starter-validation 的基本方法&#xff1a; …...

Hadoop3.3.4分布式安装

安装前提&#xff1a;已经配置好java环境&#xff0c;所有机器之间ssh的免密登录。 注意&#xff1a;下文中的flinkv1、flinkv2、flinkv3是三台服务器的别名 1.集群部署规划 注意&#xff1a;NameNode和SecondaryNameNode不要安装在同一台服务器 注意&#xff1a;ResourceMan…...

SQL ALTER TABLE 语句||SQL AUTO INCREMENT 字段

SQL ALTER TABLE 语句 ALTER TABLE 语句 ALTER TABLE 语句用于在现有表中添加、删除或修改列。 SQL ALTER TABLE 语法 若要向表中添加列&#xff0c;请使用以下语法&#xff1a; ALTER TABLE table_name ADD column_name datatype 若要删除表中的列&am…...

【源码系列】短剧系统开发国际版短剧系统软件平台介绍

系统介绍 短剧是一种快节奏、紧凑、有趣的戏剧形式&#xff0c;通过短时间的精彩表演&#xff0c;向观众传递故事的情感和思考。它以其独特的形式和魅力&#xff0c;吸引着观众的关注&#xff0c;成为了当代戏剧娱乐中不可或缺的一部分。短剧每一集都是一个小故事&#xff0c;…...

JavaWeb[总结]

文章目录 一、Tomcat1. BS 与 CS 开发介绍1.1 BS 开发1.2 CS 开发 2. 浏览器访问 web 服务过程详解(面试题)2.1 回到前面的 JavaWeb 开发技术栈图2.2 浏览器访问 web 服务器文件的 UML时序图(过程) &#xff01; 二、动态 WEB 开发核心-Servlet1. 为什么会出现 Servlet2. 什么是…...

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别

一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库&#xff0c;特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

2021-03-15 iview一些问题

1.iview 在使用tree组件时&#xff0c;发现没有set类的方法&#xff0c;只有get&#xff0c;那么要改变tree值&#xff0c;只能遍历treeData&#xff0c;递归修改treeData的checked&#xff0c;发现无法更改&#xff0c;原因在于check模式下&#xff0c;子元素的勾选状态跟父节…...

稳定币的深度剖析与展望

一、引言 在当今数字化浪潮席卷全球的时代&#xff0c;加密货币作为一种新兴的金融现象&#xff0c;正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而&#xff0c;加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下&#xff0c;稳定…...

Xen Server服务器释放磁盘空间

disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...

用机器学习破解新能源领域的“弃风”难题

音乐发烧友深有体会&#xff0c;玩音乐的本质就是玩电网。火电声音偏暖&#xff0c;水电偏冷&#xff0c;风电偏空旷。至于太阳能发的电&#xff0c;则略显朦胧和单薄。 不知你是否有感觉&#xff0c;近两年家里的音响声音越来越冷&#xff0c;听起来越来越单薄&#xff1f; —…...

基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解

JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用&#xff0c;结合SQLite数据库实现联系人管理功能&#xff0c;并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能&#xff0c;同时可以最小化到系统…...

站群服务器的应用场景都有哪些?

站群服务器主要是为了多个网站的托管和管理所设计的&#xff0c;可以通过集中管理和高效资源的分配&#xff0c;来支持多个独立的网站同时运行&#xff0c;让每一个网站都可以分配到独立的IP地址&#xff0c;避免出现IP关联的风险&#xff0c;用户还可以通过控制面板进行管理功…...

Java详解LeetCode 热题 100(26):LeetCode 142. 环形链表 II(Linked List Cycle II)详解

文章目录 1. 题目描述1.1 链表节点定义 2. 理解题目2.1 问题可视化2.2 核心挑战 3. 解法一&#xff1a;HashSet 标记访问法3.1 算法思路3.2 Java代码实现3.3 详细执行过程演示3.4 执行结果示例3.5 复杂度分析3.6 优缺点分析 4. 解法二&#xff1a;Floyd 快慢指针法&#xff08;…...