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

PyTorch 实现动态输入

使用 PyTorch 实现动态输入:支持训练和推理输入维度不一致的 CNN 和 LSTM/GRU 模型

在深度学习中,处理不同大小的输入数据是一个常见的挑战。许多实际应用需要模型能够灵活地处理可变长度的输入。本文将介绍如何使用 PyTorch 实现支持动态输入的 CNN 和 LSTM/GRU 模型,并打印每一层的输入和输出。

  • 卷积神经网络(CNN):CNN 通常用于处理图像数据。它通过卷积层提取局部特征,并能够处理不同大小的输入图像。通过使用全局池化层,CNN 可以将不同大小的特征图转换为固定大小的输出。

  • 长短期记忆网络(LSTM)和门控循环单元(GRU):LSTM 和 GRU 是处理序列数据的 RNN 变体。它们能够捕捉时间序列中的长期依赖关系,并支持可变长度的输入序列。

模型搭建

1. CNN 模型

我们将构建一个简单的 CNN 模型,支持动态输入大小,并打印每一层的输入和输出。

import torch
import torch.nn as nn
import torch.nn.functional as Fclass DynamicCNN(nn.Module):def __init__(self):super(DynamicCNN, self).__init__()self.conv1 = nn.Conv2d(in_channels=3, out_channels=16, kernel_size=3)self.conv2 = nn.Conv2d(in_channels=16, out_channels=32, kernel_size=3)self.pool = nn.AdaptiveAvgPool2d((1, 1))  # 自适应池化层self.fc = nn.Linear(32, 10)  # 输出10个类别def forward(self, x):print(f'Input to CNN: {x.shape}')x = F.relu(self.conv1(x))print(f'Output after conv1: {x.shape}')x = F.relu(self.conv2(x))print(f'Output after conv2: {x.shape}')x = self.pool(x)print(f'Output after pooling: {x.shape}')x = x.view(x.size(0), -1)  # 展平x = self.fc(x)print(f'Output after fc: {x.shape}')return x# 创建模型
cnn_model = DynamicCNN()# 测试动态输入
input_tensor_cnn = torch.randn(1, 3, 64, 64)  # 输入形状为 (batch_size, channels, height, width)
output_cnn = cnn_model(input_tensor_cnn)
Input to CNN: torch.Size([1, 3, 55, 64])
Output after conv1: torch.Size([1, 16, 53, 62])
Output after conv2: torch.Size([1, 32, 51, 60])
Output after pooling: torch.Size([1, 32, 1, 1])
Output after fc: torch.Size([1, 10])
Input to CNN: torch.Size([1, 3, 64, 64])
Output after conv1: torch.Size([1, 16, 62, 62])
Output after conv2: torch.Size([1, 32, 60, 60])
Output after pooling: torch.Size([1, 32, 1, 1])
Output after fc: torch.Size([1, 10])

2. LSTM/GRU 模型

接下来,我们将构建一个支持动态输入的 LSTM 模型,并打印每一层的输入和输出。

import torch
import torch.nn as nnclass DynamicLSTM(nn.Module):def __init__(self):super(DynamicLSTM, self).__init__()self.lstm = nn.LSTM(input_size=10, hidden_size=20, batch_first=True)self.fc = nn.Linear(20, 1)  # 输出一个值def forward(self, x):print(f'Input to LSTM: {x.shape}')x, _ = self.lstm(x)print(f'Output after LSTM: {x.shape}')x = self.fc(x[:, -1, :])  # 取最后一个时间步的输出print(f'Output after fc: {x.shape}')return x# 创建模型
lstm_model = DynamicLSTM()# 测试动态输入
input_tensor_lstm = torch.randn(5, 15, 10)  # 输入形状为 (batch_size, seq_length, input_size)
output_lstm = lstm_model(input_tensor_lstm)
Input to LSTM: torch.Size([5, 15, 10])
Output after LSTM: torch.Size([5, 15, 20])
Output after fc: torch.Size([5, 1])
Input to LSTM: torch.Size([5, 20, 10])
Output after LSTM: torch.Size([5, 20, 20])
Output after fc: torch.Size([5, 1])

代码说明

  1. DynamicCNN:该模型包含两个卷积层和一个全连接层。使用自适应平均池化层将特征图的大小调整为 (1, 1),从而支持不同大小的输入图像。每一层的输入和输出形状在前向传播中被打印出来。

  2. DynamicLSTM:该模型包含一个 LSTM 层和一个全连接层。LSTM 层能够处理可变长度的输入序列,输出的形状在前向传播中被打印出来。

相关文章:

PyTorch 实现动态输入

使用 PyTorch 实现动态输入:支持训练和推理输入维度不一致的 CNN 和 LSTM/GRU 模型 在深度学习中,处理不同大小的输入数据是一个常见的挑战。许多实际应用需要模型能够灵活地处理可变长度的输入。本文将介绍如何使用 PyTorch 实现支持动态输入的 CNN 和…...

【Linux相关】查看conda路径和conda和cudnn版本、安装cudnn、cuDNN无需登录官方下载链接

【Linux相关】 查看conda路径和conda和cudnn版本 安装cudnn cuDNN无需登录官方下载链接 文章目录 1. 查看信息1.1 查看 Conda 路径1.2 查看 Conda 版本1.3 查看 cuDNN 版本1.4 总结 2. 安装cudnn2.1 安装cudnn步骤2.2 cuDNN无需登录官方下载链接 1. 查看信息 查看Conda 路径、C…...

基于Java Springboot环境保护生活App且微信小程序

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术:Html、Css、Js、Vue、Element-ui 数据库:MySQL 后端技术:Java、Spring Boot、MyBatis 三、运行环境 开发工具:IDEA/eclipse 微信…...

简单的springboot使用sse功能

什么是sse? 1、SSE 是Server-Sent Events(服务器发送事件) 2、SSE是一种允许服务器主动向客户端推送实时更新的技术。 3、它基于HTTP协议,并使用了其长连接特性,在客户端与服务器之间建立一条持久化的连接。 通过这条连接&am…...

【服务器问题】xshell 登录远程服务器卡住( 而 vscode 直接登录不上)

打开 xshell ssh 登录远程服务器:卡在下面这里,迟迟不继续 当 SSH 连接卡在 Connection established. 之后,但没有显示远程终端提示符时,这通常意味着连接已经成功建立,说明不是网络连接和服务器连接问题,…...

AI×5G 市场前瞻及应用现状

本文为《5GAI时代:生活方式和市场的裂变》一书读后总结及研究。 本书的上架建议是“经营”,内容也更偏向于市场分析。书出版于2021年,现在是2024年,可以收集整理一些例子,看看书里的前瞻性5GAI应用预测,到…...

利用 Redis 与 Lua 脚本解决秒杀系统中的高并发与库存超卖问题

1. 前言 1.1 秒杀系统中的库存超卖问题 在电商平台上,秒杀活动是吸引用户参与并提升销量的一种常见方式。秒杀通常会以极低的价格限量出售某些商品,目的是制造紧迫感,吸引大量用户参与。然而,这种活动的特殊性也带来了许多技术挑…...

【MySQL】创建数据库、用户和密码

创建数据库、用户和密码参考sql语句 drop database if exists demoshop; drop user if exists demoshop%; -- 支持emoji:需要mysql数据库参数: character_set_serverutf8mb4 create database demoshop default character set utf8mb4 collate utf8mb4_un…...

leetcode hot100【Leetcode 72.编辑距离】java实现

Leetcode 72.编辑距离 题目描述 给定两个单词 word1 和 word2,返回将 word1 转换为 word2 所使用的最少操作数。 你可以对一个单词执行以下三种操作之一: 插入一个字符删除一个字符替换一个字符 示例 1: 输入: word1 "horse", word2 &…...

腾讯阅文集团Java后端开发面试题及参考答案

Java 的基本数据类型有哪些?Byte 的数值范围是多少? Java 的基本数据类型共有 8 种,可分为 4 类: 整数类型:包括 byte、short、int 和 long。byte 占 1 个字节,其数值范围是 - 128 到 127,用于表示较小范围的整数,节省内存空间,在处理一些底层的字节流数据或对内存要求…...

protobuf实现Hbase数据压缩

目录 前置HBase数据压缩效果获取数据(反序列化) 前置 安装说明 使用说明 HBaseDDL和DML操作 HBase数据压缩 问题 在上文的datain中原文 每次写入数据会写入4个单元格的内容,现在希望能对其进行筛减,合并成1格,减少存储空间(序列…...

论文阅读之方法: Single-cell transcriptomics of 20 mouse organs creates a Tabula Muris

The Tabula Muris Consortium., Overall coordination., Logistical coordination. et al. Single-cell transcriptomics of 20 mouse organs creates a Tabula Muris. Nature 562, 367–372 (2018). 论文地址:https://doi.org/10.1038/s41586-018-0590-4 代码地址…...

PHP语法学习(第三天)

老规矩,先回顾一下昨天学习的内容 PHP语法学习(第二天) 主要学习了PHP变量、变量的作用域、以及参数作用域。 今天由Tom来打开新的篇章 文章目录 echo 和 print 区别PHP echo 语句实例 PHP print 语句实例 PHP 数组创建数组利用array() 函数 数组的类型索引数组关联…...

PostgreSQL添加PostGIS扩展和存储坐标

一、安装 1、PostGIS安装:Getting Started | PostGIS 2、安装好后,执行下面sql CREATE EXTENSION postgis;SELECT PostGIS_Full_Version(); 二、使用 PostGIS文档:PostGIS 简介 — Introduction to PostGIS 建表: CREATE TAB…...

Flink四大基石之State(状态) 的使用详解

目录 一、有状态计算与无状态计算 (一)概念差异 (二)应用场景 二、有状态计算中的状态分类 (一)托管状态(Managed State)与原生状态(Raw State) 两者的…...

Linux中dos2unix详解

dos2unix 是一个用于将文本文件从DOS/Windows格式转换为Unix/Linux格式的工具。在不同的操作系统中,文本文件中的换行符表示方式是不一样的。具体来说: 在DOS和Windows系统中,换行由两个字符组成:回车(Carriage Retur…...

MySQL MVCC 介绍

MVCC(Multi-Version Concurrency Control)是一种并发控制机制,用于在多个并发事务同时读写数据库时保持数据的一致性和隔离性。MVCC通过在每个数据行上维护多个版本的数据来实现。当一个事务要对数据库中的数据进行修改时,MVCC不会…...

Linux篇之日志管理工具Logrotate介绍并结合crontab使用

1. Logrotate介绍 logrotate 是一个用于管理和轮换日志文件的工具,通常用于 Unix 和 Linux 系统。它可以自动化日志文件的轮换、压缩、删除和邮寄等操作,确保日志文件不会无限制地增长,占用过多的磁盘空间。 2. 主要功能 轮换:定期将日志文件移动到备份目录,并生成新的…...

Vulnhub靶场 Matrix-Breakout: 2 Morpheus 练习

目录 0x00 准备0x01 主机信息收集0x02 站点信息收集0x03 漏洞查找与利用1. 文件上传2. 提权 0x04 总结 0x00 准备 下载连接:https://download.vulnhub.com/matrix-breakout/matrix-breakout-2-morpheus.ova 介绍: This is the second in the Matrix-Br…...

秒杀项目 超卖问题 详解

秒杀项目中的超卖问题详解 秒杀场景是一种高并发场景,用户在短时间内大量涌入抢购有限的商品。超卖问题指的是由于系统设计不合理,导致实际售出的商品数量超过库存数量。 1. 为什么会出现超卖问题? 超卖问题通常由以下原因引发:…...

突破Cursor AI限制:从原理到实践的Pro功能解锁全攻略

突破Cursor AI限制:从原理到实践的Pro功能解锁全攻略 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached your tria…...

Unity 2018/2019下,Mega-Fires 3.48插件20种变形效果实测与避坑指南

Unity 2018/2019下Mega-Fires 3.48插件20种变形效果深度解析与实战避坑 在Unity 2018和2019版本中,Mega-Fires 3.48插件以其强大的Mesh变形能力吸引了大量开发者。这款插件提供了20种独特的变形效果,从基础的弯曲、扭曲到复杂的自由变形和翻页效果&#…...

DS4Windows进阶指南:让PlayStation手柄在PC平台发挥极致性能

DS4Windows进阶指南:让PlayStation手柄在PC平台发挥极致性能 【免费下载链接】DS4Windows Like those other ds4tools, but sexier 项目地址: https://gitcode.com/gh_mirrors/ds/DS4Windows DS4Windows是一款开源工具,专为解决PlayStation手柄在…...

5分钟搞定USR-K5模块配置:串口转以太网通讯的保姆级教程

5分钟搞定USR-K5模块配置:串口转以太网通讯的保姆级教程 当你需要在嵌入式系统中快速实现串口设备与以太网的互联时,USR-K5模块是个不错的选择。这款小巧的串口转以太网模块,能够帮助开发者省去复杂的网络协议栈开发工作,特别适合…...

从read()到硬盘:用strace和bpftrace动态追踪Linux内核文件读取的完整路径(附实战脚本)

从read()到硬盘:用strace和bpftrace动态追踪Linux内核文件读取的完整路径(附实战脚本) 当线上服务出现文件读取延迟时,大多数系统工程师的第一反应是检查磁盘I/O指标。但真正的挑战在于:如何准确定位从用户态系统调用到…...

如何快速实现jsTree上下文菜单:为树形节点添加智能右键操作功能

如何快速实现jsTree上下文菜单:为树形节点添加智能右键操作功能 【免费下载链接】jstree jquery tree plugin 项目地址: https://gitcode.com/gh_mirrors/js/jstree jsTree上下文菜单插件是jQuery树形插件中最实用的功能之一,它能让用户通过右键点…...

快速上手:IronPython 3开发环境配置与第一个程序

快速上手:IronPython 3开发环境配置与第一个程序 【免费下载链接】ironpython3 Implementation of Python 3.x for .NET Framework that is built on top of the Dynamic Language Runtime. 项目地址: https://gitcode.com/gh_mirrors/ir/ironpython3 IronPy…...

基于FireRedASR-AED-L的会议语音转写系统实战

基于FireRedASR-AED-L的会议语音转写系统实战 会议记录不再需要人工逐字整理,智能语音转写让会议纪要自动生成 1. 会议语音转写的痛点与解决方案 每次开完会,最头疼的就是整理会议纪要。人工记录不仅效率低下,还容易遗漏重要内容。特别是多人…...

5分钟本地部署Asian Beauty Z-Image Turbo:零基础生成东方美学人像写真

5分钟本地部署Asian Beauty Z-Image Turbo:零基础生成东方美学人像写真 在数字内容创作蓬勃发展的今天,高质量人像图像的需求与日俱增。特别是对于东方审美风格的人像写真,传统拍摄方式成本高昂且效率低下。今天,我将带你快速部署…...

QT开发环境搭建:如何在Linux上快速配置Python和C++支持(含清华镜像源加速)

Linux下高效搭建QT开发环境:Python与C双语言支持实战指南 在Linux系统上搭建QT开发环境是许多跨平台应用开发者的必经之路。不同于Windows或macOS的一键式安装,Linux环境下的配置往往需要处理更多依赖关系和系统级设置。本文将带你从零开始,在…...