# 【深度学习】:《PyTorch入门到项目实战》(十三)卷积神经网络:多通道输入和多通道输出

简介: 我们之前已经介绍了单通道的卷积是如何进行填充**padding、stride**的。然而在实际分析中,我们的目标任务往往是**多通道**的。本文介绍一下如何进行**多通道输入和多通道输出。**

【深度学习】:《PyTorch入门到项目实战》(十三)卷积神经网络:多通道输入和多通道输出

  • ✨本文收录于【深度学习】:《PyTorch入门到项目实战》专栏,此专栏主要记录如何使用PyTorch实现深度学习笔记,尽量坚持每周持续更新,欢迎大家订阅!
  • 🌸个人主页:JoJo的数据分析历险记
  • 📝个人介绍:小编大四统计在读,目前保研到统计学top3高校继续攻读统计研究生
  • 💌如果文章对你有帮助,欢迎✌关注、👍点赞、✌收藏、👍订阅专栏
  • 参考资料:本专栏主要以沐神《动手学深度学习》为学习资料,记录自己的学习笔记,能力有限,如有错误,欢迎大家指正。同时沐神上传了的教学视频和教材,大家可以前往学习。
  • 视频:动手学深度学习
  • 教材:动手学深度学习

请添加图片描述

多通道输入和多通道输出

前言

我们之前已经介绍了单通道的卷积是如何进行填充padding、stride的。然而在实际分析中,我们的目标任务往往是多通道的。本文介绍一下如何进行多通道输入和多通道输出。

1.多通道输入

假如说我们不仅想检测灰度图像的特征,而是想要检测 RGB彩色图像的特征。彩色图像如果是 6×6×3,这里的3指的是三个颜色通道,可以把它想象成三个 6×6图像的堆叠。为了检测图像的边缘或者其他的特征,不是把它跟原来的 3×3的过滤器做卷积,而是跟一个三维的过滤器,它的维度是 3×3×3,这样这个过滤器也有三层,对应红、绿、蓝三个通道。具体如下所示

image-20220613205927832

注意:这个的输出会是一个4×4的图像,而不是不是4×4×3,。我们来分析一下这是如何计算的。首先,会拿这个3×3×3的卷积核先放到最左上角的位置,这个3×3×3的卷积核有27个数字,分别与原始图像对应的27个数字做内积。这样就得到了第一个数字,然后再根据相应的步长向右、向下移动。具体过程如下所示

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XjyipGpN-1655134705156)(img/image-20220613204352346.png)]

这样就将一个多输入通道的图像通过三维卷积核转换到了单输出通道图像。这意味着不论有多少输入通道,我们都只有一个输出通道。下面我们来看看如何进行多通道输出

2.多通道输出

在卷积神经网络中,有多个输出通道是至关重要的。在经典的神经网络架构中(例如LeNet,AlexNet,VGG等),随着神经网络层数的加深,我们常会增加输出通道的维数,通过减少空间分辨率以获得更大的通道深度。直观地说,我们可以将每个通道看作是对不同特征的反应。如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-t9Vt4tIC-1655134475936)(img/image-20220613213103761.png)]

我们让这个6×6×3的图像和两个3×3×3的过滤器卷积。第一个是黄色卷积核,假设是一个垂直边界检测器。第二个卷积核是橘色,假设是一个水平边界检测器。这样就得到4×4×2的输出。根据这个我们可以发现,假设$c_0$表示输入通道数,$c_1$表示输出通道数,则有n×n×$c_0$和一个$c_1\times f\times f\times c_0$的卷积核进行处理,得到一个$(n-f+1\times c_1)\times (n-f+1 \times c_1)$的输出。

3.代码实现

3.1 多通道输入实现

# 导入相关库
import torch
from d2l import torch as d2l

def corr2d_multi_in(X, K):
    # 先遍历“X”和“K”的第0个维度(通道维度),再把它们加在一起。
    return sum(d2l.corr2d(x, k) for x, k in zip(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]]])
X.shape,K.shape
(torch.Size([2, 3, 3]), torch.Size([2, 2, 2]))

可以看出,输入是一个2通道$3\times3$的数据,卷积核是$2\times2\times2$,得到的结果为$2\times2$。

corr2d_multi_in(X, K)
tensor([[ 56.,  72.],
        [104., 120.]])

3.2 多通道输出实现

定义多通道输出函数

def corr2d_multi_in_out(X, K):
    # 迭代“K”的第0个维度,每次都对输入“X”执行互相关运算。
    # 最后将所有结果都叠加在一起,注意,这里我们只对K进行遍历
    return torch.stack([corr2d_multi_in(X, k) for k in K], 0)

使用stack将卷积核堆叠

K = torch.stack((K, K + 1, K + 2), 0)
K.shape
torch.Size([3, 2, 2, 2])

可以看出这是一个3个输出通道,2个输入通道的2×2卷积核,因此得到的结果为$3\times2\times2$。

corr2d_multi_in_out(X, K)
tensor([[[ 56.,  72.],
         [104., 120.]],

        [[ 76., 100.],
         [148., 172.]],

        [[ 96., 128.],
         [192., 224.]]])

在这里插入图片描述
本章的介绍到此介绍,如果文章对你有帮助,请多多点赞、收藏、评论、关注支持!!

相关文章
|
11天前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习中的卷积神经网络(CNN)及其应用
【9月更文挑战第24天】本文将深入探讨深度学习中的一种重要模型——卷积神经网络(CNN)。我们将通过简单的代码示例,了解CNN的工作原理和应用场景。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的信息。
36 1
|
7天前
|
机器学习/深度学习 PyTorch 调度
在Pytorch中为不同层设置不同学习率来提升性能,优化深度学习模型
在深度学习中,学习率作为关键超参数对模型收敛速度和性能至关重要。传统方法采用统一学习率,但研究表明为不同层设置差异化学习率能显著提升性能。本文探讨了这一策略的理论基础及PyTorch实现方法,包括模型定义、参数分组、优化器配置及训练流程。通过示例展示了如何为ResNet18设置不同层的学习率,并介绍了渐进式解冻和层适应学习率等高级技巧,帮助研究者更好地优化模型训练。
15 4
在Pytorch中为不同层设置不同学习率来提升性能,优化深度学习模型
|
11天前
|
机器学习/深度学习 人工智能 算法
【新闻文本分类识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
文本分类识别系统。本系统使用Python作为主要开发语言,首先收集了10种中文文本数据集("体育类", "财经类", "房产类", "家居类", "教育类", "科技类", "时尚类", "时政类", "游戏类", "娱乐类"),然后基于TensorFlow搭建CNN卷积神经网络算法模型。通过对数据集进行多轮迭代训练,最后得到一个识别精度较高的模型,并保存为本地的h5格式。然后使用Django开发Web网页端操作界面,实现用户上传一段文本识别其所属的类别。
24 1
【新闻文本分类识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
|
4天前
|
机器学习/深度学习 人工智能 算法框架/工具
深度学习中的卷积神经网络(CNN)及其在图像识别中的应用
【9月更文挑战第31天】本文旨在通过浅显易懂的语言和直观的比喻,为初学者揭开深度学习中卷积神经网络(CNN)的神秘面纱。我们将从CNN的基本原理出发,逐步深入到其在图像识别领域的实际应用,并通过一个简单的代码示例,展示如何利用CNN进行图像分类。无论你是编程新手还是深度学习的初学者,这篇文章都将为你打开一扇通往人工智能世界的大门。
|
6天前
|
机器学习/深度学习 人工智能 算法
深度学习中的对抗性生成网络
本文将深入探讨深度学习中的对抗性生成网络,通过通俗易懂的语言解释其工作原理及应用。我们将从基本原理入手,逐步解析对抗性生成网络的组成部分和训练过程,并结合具体实例展示其在图像生成和风格转换等领域的应用。同时,文章也将讨论在实际应用中可能面临的挑战及未来发展方向。
|
8天前
|
机器学习/深度学习 数据采集 网络安全
使用Python实现深度学习模型:智能网络安全威胁检测
使用Python实现深度学习模型:智能网络安全威胁检测
33 5
|
5天前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习中的卷积神经网络(CNN)入门与实践
【8月更文挑战第62天】本文以浅显易懂的方式介绍了深度学习领域中的核心技术之一——卷积神经网络(CNN)。文章通过生动的比喻和直观的图示,逐步揭示了CNN的工作原理和应用场景。同时,结合具体的代码示例,引导读者从零开始构建一个简单的CNN模型,实现对图像数据的分类任务。无论你是深度学习的初学者还是希望巩固理解的开发者,这篇文章都将为你打开一扇通往深度学习世界的大门。
|
6天前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习的奥秘:探索神经网络背后的原理与实践
【9月更文挑战第29天】本文将带你深入理解深度学习的核心概念,从基础理论到实际应用,逐步揭示其神秘面纱。我们将探讨神经网络的工作原理,并通过实际代码示例,展示如何构建和训练一个简单的深度学习模型。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供宝贵的知识和技能。
15 2
|
9天前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习与神经网络:探索复杂数据的表示
【9月更文挑战第26天】深度学习作为人工智能领域的明珠,通过神经网络自动从大数据中提取高级特征,实现分类、回归等任务。本文介绍深度学习的基础、张量表示、非线性变换、反向传播及梯度下降算法,并探讨其在计算机视觉、自然语言处理等领域的应用与挑战。未来,深度学习将更加智能化,揭示数据背后的奥秘。
|
13天前
|
机器学习/深度学习 监控 PyTorch
PyTorch 模型调试与故障排除指南
在深度学习领域,PyTorch 成为开发和训练神经网络的主要框架之一。本文为 PyTorch 开发者提供全面的调试指南,涵盖从基础概念到高级技术的内容。目标读者包括初学者、中级开发者和高级工程师。本文探讨常见问题及解决方案,帮助读者理解 PyTorch 的核心概念、掌握调试策略、识别性能瓶颈,并通过实际案例获得实践经验。无论是在构建简单神经网络还是复杂模型,本文都将提供宝贵的洞察和实用技巧,帮助开发者更高效地开发和优化 PyTorch 模型。
19 3
PyTorch 模型调试与故障排除指南
下一篇
无影云桌面