【动手学习深度学习--逐行代码解析合集】14多输入多输出通道

news2024/11/24 19:32:40

【动手学习深度学习】逐行代码解析合集

14多输入多输出通道


视频链接:动手学习深度学习–多输入多输出通道
课程主页:https://courses.d2l.ai/zh-v2/
教材:https://zh-v2.d2l.ai/

1、多输入通道

在这里插入图片描述

import torch
from d2l import torch as d2l
import os
os.environ["KMP_DUPLICATE_LIB_OK"]="TRUE"

"====================1、多输入通道===================="
def corr2d_multi_in(X, K):
    # 先遍历“X”和“K”的第0个维度(通道维度),再把它们加在一起
    return sum(d2l.corr2d(x, k) for x, k in zip(X, K))

# 初始化X和K
X = torch.tensor([[[0.0, 1.0, 2.0], [3.0, 4.0, 5.0], [6.0, 7.0, 8.0]],
               [[1.0, 2.0, 3.0], [4.0, 5.0, 6.0], [7.0, 8.0, 9.0]]])
K = torch.tensor([[[0.0, 1.0], [2.0, 3.0]], [[1.0, 2.0], [3.0, 4.0]]])
print(corr2d_multi_in(X, K))
'''
输出:
tensor([[ 56.,  72.],
        [104., 120.]])
'''

2、多输出通道

torch.stack:增加新的维度进行堆叠 【若不懂,可参考文章链接】

在这里插入图片描述
在这里插入图片描述

"====================2、多输出通道===================="
def corr2d_multi_in_out(X, K):
    # 迭代“K”的第0个维度,每次都对输入“X”执行互相关运算。
    # 最后将所有结果都叠加在一起
    return torch.stack([corr2d_multi_in(X, k) for k in K], 0)
# torch.stack:增加新的维度进行堆叠
K = torch.stack((K, K + 1, K + 2), 0)  # 三个两层2×2的卷积
print(K.shape)
'''
输出:
torch.Size([3, 2, 2, 2])
'''
print(corr2d_multi_in_out(X, K))
'''
输出:
tensor([[[ 56.,  72.],
         [104., 120.]],
         
        [[ 76., 100.],
         [148., 172.]],
         
        [[ 96., 128.],
         [192., 224.]]])
'''

3、1×1卷积层等价于 一个全连接

在这里插入图片描述

"====================3、1×1卷积层===================="
# 1×1卷积 等价于 一个全连接
def corr2d_multi_in_out_1x1(X, K):
    c_i, h, w = X.shape  # torch.Size([3, 3, 3])
    c_o = K.shape[0]  # 2
    # 将 X 和 K 转化为矩阵
    X = X.reshape((c_i, h * w))  # (3,9) 将高和宽拉成一条向量
    K = K.reshape((c_o, c_i))    # (2,3)
    # 全连接层中的矩阵乘法
    Y = torch.matmul(K, X)  # (2,3) × (3,9) = (2,9)
    return Y.reshape((c_o, h, w))    # (2,9) ==> (2,3,3)

X = torch.normal(0, 1, (3, 3, 3))
K = torch.normal(0, 1, (2, 3, 1, 1))

Y1 = corr2d_multi_in_out_1x1(X, K)
Y2 = corr2d_multi_in_out(X, K)
# 有一些浮点精度的区别,相减小于一个很小的值。几乎认为Y1和Y2是两个完全一样的值
assert float(torch.abs(Y1 - Y2).sum()) < 1e-6

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

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

相关文章

[C语言][小游戏][猜拳游戏]

C语言的奇妙旅行 一、模块化编程二、游戏基本设计2.1 确定计算机要出的手势2.2 显示“石头剪刀布”&#xff0c;然后玩家输入自己要出的手势2.3进行输赢判断&#xff0c;显示结果2.4询问是否继续2.5 基本程序 三、游戏实现的过程3.1将玩家的手势和电脑的手势显示出来 三、总代码…

复习java基础

复习一天有点忘了的知识&#xff1a; 结构化编程 结构化程式设计(英语:Structured programming)是1960年代开始发展起来的一种编程典范。它采用子程序、程式码区块、for循环以及while循环等结构来取代传统的goto。 指导思想 自顶向下、逐步求精、模块化 编程过程 流程图是…

CVPR 2023 | OVSeg: Open-Vocabulary Semantic Segmentation with Mask-adapted CLIP

CVPR 2023 | OVSeg: Open-Vocabulary Semantic Segmentation with Mask-adapted CLIP 论文&#xff1a;https://arxiv.org/abs/2210.04150代码&#xff1a;https://github.com/facebookresearch/ov-seg 架构设计 类别无关的 mask proposal generator&#xff1a;MaskFormer手动…

linux端口被占用 关闭端口

1.查看端口是否被占用 netstat -anp |grep [端口号]2.查看占用的进程 lsof -i:[端口号]3.关闭进程 kill -9 [进程PID]LISTEN 表示被占用&#xff0c;3061/java 分别是&#xff1a;进程PID/进程 通过进程PID关闭进程

桥接模式:解耦抽象与实现

桥接模式是一种结构型设计模式&#xff0c;它将抽象部分与实现部分分离&#xff0c;使它们可以独立地变化。本文将深入探讨桥接模式的原理、结构和使用方法&#xff0c;并通过详细的 Java 示例代码来说明。 1. 桥接模式的定义 桥接模式是一种将抽象部分与实现部分分离的设计模…

数字信号处理复习知识点

目录 第一章&#xff1a;时域离散系统 1.什么是因果性和稳定性 2.模拟频率&#xff0c;模拟角频率&#xff0c; 数字频率之间的关系 3.什么是频谱混叠&#xff1f; 第二章&#xff1a;时域离散信号和系统的频域分析 1.时域离散信号傅立叶变换的定义 2.如何用模拟信号的傅立…

电信青年员工踏上三千里数字化追梦之旅,数字员工为电信高质量发展注智赋能

导语&#xff1a; 近年来&#xff0c;广西电信紧紧围绕集团战略&#xff0c;聚焦产业数字化发展机遇&#xff0c;加强前瞻性技术研究和人工智能产业应用研究&#xff0c;为夯实高质量发展增添科技动力。 在数字中国建设的大背景下&#xff0c;广西电信全资子公司广西壮族自治区…

推荐一款适合前端宝宝体质的数据库文档工具

先看效果 首页 安心食用 npx dbshowlatest按照提示输入相关信息 Welcome to the DB Show! v0.0.7? Use config from local? no ? Select a database type MySQL ? Enter the host name localhost ? Enter the port number 3306 ? Enter the user name root ? Ente…

Linux slab 分配器源码解析

文章目录 前言一、slab分配器1.1 简介1.2 高速缓存描述符1.3 架构图 二、相关结构体2.1 struct array_cache2.2 struct kmem_list32.3 struct slab2.3.1 简介2.3.2 OFF_SLAB 三、创建和释放slab3.1 创建slab3.1.1 kmem_getpages3.1.2 alloc_slabmgmt3.1.3 slab_map_pages 3.2 释…

常用数据分类算法原理介绍、优缺点分析与代码实现[LR/RF/DT/SVM/NavieBayes/GBDT/XGBoost/DNN/LightGBM等]

本文的主要目的是总结记录日常学习工作中常用到的一些数据分类算法&#xff0c;对其原理简单总结记录&#xff0c;同时分析对应的优缺点&#xff0c;以后需要的时候可以直接翻看&#xff0c;避免每次都要查询浪费时间&#xff0c;欢迎补充。 机器学习领域中常用的分类模型包括以…

分布式事物【Seata实现、下载启动Seata服务、搭建聚合父工程构建】(四)-全面详解(学习总结---从入门到深化)

目录 分布式事物解决方案_XA方案 分布式事物解决方案_Seata实现 Seata提供XA模式实现分布式事务_业务说明 Seata提供XA模式实现分布式事务_下载启动Seata服务 Seata提供XA模式实现分布式事务_搭建聚合父工程构建 创建工程distribute-transaction 字符编码 注解生效激活 Jav…

three js模型旋转

如何让立方体模型旋转到指定的面 父页面 <b-modal ref"modal_mini" size"lg" centered static :hide-footer"true":dialog-class"[modal_mini]":content-class"position-static":body-class"p-0":header-class…

上海亚商投顾:沪指放量调整 两市超4000只个股下跌

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 市场情绪 沪指今日震荡调整&#xff0c;深成指、创业板指午后跌超1%。AI概念股集体下挫&#xff0c;CPO、算力等方向领跌&am…

感知网络安全态势是什么?感知网络安全态势如何实施

网络安全是当今社会中一个非常重要的话题。随着互联网的普及和信息技术的发展&#xff0c;网络安全问题日益突出。为了有效应对各种网络威胁和攻击&#xff0c;网络安全态势感知成为了一种关键的技术手段。 网络安全态势感知的定义 网络安全态势感知是指通过对网络环境中的各种…

2023-07-11力扣每日一题

链接&#xff1a; https://leetcode.cn/problems/maximum-alternating-subsequence-sum/ 题意&#xff1a; 给定一个数组&#xff0c;求一个子序列&#xff0c;使这个子序列的奇数位和-偶数位和最大&#xff08;下标从1开始的话|反正第一个数是&#xff09; 解&#xff1a;…

基于linux下的高并发服务器开发(第一章)-Linux环境开发搭建1.1

1、安装虚拟机 2、在虚拟机中安装Linux系统 &#xff08;1&#xff09;新建虚拟机向导 点击虚拟机设置&#xff0c;使用ISO映像文件(M) &#xff08;2&#xff09;Ubuntu18安装 点击现在安装 点击继续 静静地接下来的安装即可 安装好后&#xff0c;安装VMware Tools 将压缩…

设计原则及设计模式基础

设计模式是一套被反复使用的、多数人知晓的、经过分类编目的代码设计经验的总结&#xff0c;使用设计模式是为了可以重用代码&#xff0c;让代码更容易被他人理解并且提高代码的可靠性。 1 设计模式概述 GoF(Gang Of Four 四人组&#xff0c;指4位著名软件工程学者)&#xff…

ubuntu安装单个redis服务

1.apt-get install redis-server 使用lighthouse用户这样操作会报与权限有关的错误&#xff0c; 改成使用root账号操作 2.安装完成后&#xff0c;Redis服务器会自动启动&#xff0c;查看进程是否正常启动 ps -axu|grep redis redis 18689 0.1 0.4 40136 6860 ? …

第3讲 Camera Sensor 数据流

Camera Sensor Block Camera Sensor Output Format raw8 一个像素点用8bit来表示&#xff0c;范围0&#xff5e;256 raw10 一个像素点用10bit来表示&#xff0c;范围0&#xff5e;1024 raw12 一个像素点用12bit来表示&#xff0c;范围0&#xff5e;4096 Camera Sensor Fr…

智慧园区:如何利用AI识别与视频技术实现工业园区监管模式的升级?

一、背景分析 智慧园区建设的目标是通过运用现代信息技术&#xff0c;通过智能化管理&#xff0c;解决园区管理中存在的许多难题&#xff0c;例如信息不对称、资源浪费等问题&#xff0c;将园区内的设施、设备和系统进行连接和互通&#xff0c;园区可以实现各种资源的高效利用…