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

【代码实现】torch实现F.pixel_shuffle和F.pixel_unshuffle

原理

pixel_shuffle 和 pixel_unshuffle 常用于神经网络减少特征图尺寸以减少计算量,由于有些硬件不支持这两个算子,可以根据原理使用torch实现。

代码实现

import torch.nn.functional as F
import torch
def pixelshuffle_inv(tensor, scale=2):N, ch, height, width = tensor.shapenew_ch = ch * (scale * scale)new_height = height // scalenew_width = width // scaletensor = tensor.view(N, ch, new_height, scale, new_width, scale)tensor = tensor.permute(0, 1, 3, 5, 2, 4).contiguous()tensor = tensor.view(N, ch * (scale ** 2), new_height, new_width)return tensordef pixelshuffle(tensor, scale=2):N, ch, height, width = tensor.shapenew_ch = ch // (scale * scale)new_height = height * scalenew_width = width * scale# 重新排列张量output_tensor = tensor.view(N, new_ch, scale, scale, height, width)output_tensor = output_tensor.permute(0, 1, 4, 2, 5, 3).contiguous()output_tensor = output_tensor.view(N, new_ch, new_height, new_width)return output_tensorif __name__ == '__main__':input = torch.randn(1, 3, 256, 256)scale = 2unshuffle_ = pixelshuffle_inv(input,scale)unshuffle_F = F.pixel_unshuffle(input,scale)print(torch.equal(unshuffle_,unshuffle_F))print(torch.max(unshuffle_-unshuffle_F))shuffle_ = pixelshuffle(unshuffle_F,scale)shuffle_F = F.pixel_shuffle(unshuffle_F,scale)print(torch.equal(shuffle_,shuffle_F))print(torch.max(shuffle_-shuffle_F))

运行结果,与官方结果完全一致。
在这里插入图片描述

相关文章:

  • Go基础学习07-map注意事项;多协程对map的资源竞争;sync.Mutex避免竟态条件
  • 数据清洗第1篇章 - 处理缺失值和重复值
  • 代码训练营 day17|LeetCode 235,LeetCode 701,LeetCode 450
  • [每周一更]-(第117期):硬盘分区表类型:MBR和GPT区别
  • 开源节流计划:数字化学习创业提升
  • 【2025】基于Spring Boot的智慧农业小程序(源码+文档+调试+答疑)
  • 【vs code(cursor) ssh连不上服务器(2)】但是 Terminal 可以连上,问题解决 ✅
  • windows 桌面采集音频
  • 为什么 Kubernetes 的设计中有 Pod,而不是直接使用容器
  • sysbench 命令:跨平台的基准测试工具
  • 算法训练营打卡Day19
  • 66 使用注意力机制的seq2seq_by《李沐:动手学深度学习v2》pytorch版
  • python如何判断图片路径是否存在
  • Ubuntu网卡配置
  • 微信小程序 图片的上传
  • canvas实际项目操作,包含:线条,圆形,扇形,图片绘制,图片圆角遮罩,矩形,弧形文字...
  • go语言学习初探(一)
  • JS专题之继承
  • k8s如何管理Pod
  • python docx文档转html页面
  • Python学习笔记 字符串拼接
  • vuex 学习笔记 01
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 跨域
  • 前端 CSS : 5# 纯 CSS 实现24小时超市
  • 深度解析利用ES6进行Promise封装总结
  • No resource identifier found for attribute,RxJava之zip操作符
  • ​Java基础复习笔记 第16章:网络编程
  • ​TypeScript都不会用,也敢说会前端?
  • ​补​充​经​纬​恒​润​一​面​
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (39)STM32——FLASH闪存
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (done) Go 语言:三种多文件协作方式
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (LeetCode 49)Anagrams
  • (Redis使用系列) SpringBoot 中对应2.0.x版本的Redis配置 一
  • (windows2012共享文件夹和防火墙设置
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (三)centos7案例实战—vmware虚拟机硬盘挂载与卸载
  • (实战)静默dbca安装创建数据库 --参数说明+举例
  • (转)重识new
  • ****三次握手和四次挥手
  • .NET CORE 3.1 集成JWT鉴权和授权2
  • .NET Core 控制台程序读 appsettings.json 、注依赖、配日志、设 IOptions
  • .net core 依赖注入的基本用发
  • .NET/C# 的字符串暂存池
  • .net操作Excel出错解决
  • .NET开源全面方便的第三方登录组件集合 - MrHuo.OAuth
  • /usr/lib/mysql/plugin权限_给数据库增加密码策略遇到的权限问题
  • @entity 不限字节长度的类型_一文读懂Redis常见对象类型的底层数据结构
  • @vue/cli 3.x+引入jQuery