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

【CNN】卷积神经网络多通道卷积与偏置过程- part2

多通道卷积 的核心思想是:对每个通道分别进行卷积,然后把结果加起来。

以彩色图像为例,包含三个通道,分别表示RGB三原色的像素值,输入为(3,5,5),分别表示3个通道,每个通道的宽为5,高为5。假设卷积核只有1个,卷积核通道为3,每个通道的卷积核大小仍为3x3,padding=0,stride=1。

卷积过程如下,每一个通道的像素值与对应的卷积核通道的数值进行卷积,因此每一个通道会对应一个输出卷积结果,三个卷积结果对应位置累加求和,得到最终的卷积结果(这里卷积输出结果通道只有1个,因为卷积核只有1个。卷积多输出通道下面会继续讲到)。

可以这么理解:最终得到的卷积结果是原始图像各个通道上的综合信息结果。

上述过程中,每一个卷积核的通道数量,必须要求与输入通道数量一致,因为要对每一个通道的像素值要进行卷积运算,所以每一个卷积核的通道数量必须要与输入通道数量保持一致

我们把上述图像通道如果放在一块,计算原理过程还是与上面一样,堆叠后的表示如下:

2.单卷积核多通道

我们来看下面的单卷积核多通道卷积的演变过程。

 

import torch
import torch.nn as nn
import numpy as npmatrix_np = np.array([[[[0,1,1],[0,0,1],[0,0,0]],[[0,0,1],[1,0,1],[0,0,0]],[[1,0,1],[1,1,1],[1,0,0]]]])    kernel = torch.tensor([[[1,0],[0,0]],[[0,1],[0,0]],[[0,0],[1,0]]
], dtype=torch.float32)  matrix_np = np.array(matrix_np).astype(np.float32)conv_layer = nn.Conv2d(in_channels=3, out_channels=1, kernel_size=2, stride=1, padding=0,bias=False)conv_layer.weight.data = kernel.view(1,3,2,2)output_data = conv_layer(input_data)print(output_data.shape)
print(torch.round(output_data))

 3.多卷积核多通道

import torch
import torch.nn as nn
import numpy as np# 创建一个大小为 28*28 的单通道图像
# input_data = torch.randn(1, 3, 3, 3)  # 一个大小为28x28的单通道图像# 创建一个 NumPy 数组matrix_np = np.array([[[[0.0, 1.0, 1.0],[0.0, 0.0, 1.0],[0.0, 0.0, 0.0]],[[0.0, 0.0, 1.0],[1.0, 0.0, 1.0],[0.0, 0.0, 0.0]],[[1.0, 0.0, 1.0],[1.0, 1.0, 1.0],[1.0, 0.0, 0.0]]]])kernel = torch.tensor([[[[1., 0.],[0., 0.]],[[0., 1.],[0., 0.]],[[0., 0.],[1., 0.]]],[[[1., 0.],[0., 0.]],[[1., 0.],[0., 0.]],[[1., 0.],[0., 0.]]]], dtype=torch.float32)matrix_np = np.array(matrix_np).astype(np.float32)
# 转换为 PyTorch 张量
input_data = torch.from_numpy(matrix_np)print(input_data)# 创建卷积层,输入通道数为 3
# 输出通道数1
# 步长默认是1
# 卷积核大小2*2
# 0个0填充
# 默认没有偏置项 bias=False
conv_layer = nn.Conv2d(in_channels=3, out_channels=2, stride=1, kernel_size=2, padding=0, bias=True)
# conv_layer = nn.Conv2d(in_channels=3, out_channels=2, stride=1, kernel_size=2, padding=0, bias=True)# 手动设置卷积核权重(权重形状:[out_channels, in_channels, height, width])
conv_layer.weight.data = kernel.view(2, 3, 2, 2)# 手动设置卷积核偏置项(偏置项形状:[out_channels])
# conv_layer.bias.data.fill_(-1.0)
# 对输入数据进行卷积操作
output_data = conv_layer(input_data)# 输出结果
print(output_data.shape)
print(torch.round(output_data))

http://www.dtcms.com/a/291457.html

相关文章:

  • AI Red Teaming 分析
  • 鸿蒙开发中与 AI 编码助手的共处之道(ArkTS 视角)
  • sky-take-out项目中Redis的使用
  • 【每日算法】专题十七_多源 BFS
  • Java 实现 UDP 多发多收通信
  • 图论(2):最短路
  • http协议学习-body各种类型
  • cs336 Lecture2
  • SQL基础入门② | 运算符篇
  • 【HarmonyOS】ArkTS语法详细解析
  • 阿里云技术三面:java社招面经+面试题分享!
  • rancher使用rke在华为云多网卡的服务器上安装k8s集群问题处理
  • Supervisor 核心原理:如何实现进程管理?
  • 机器视觉的食品包装贴标应用
  • [论文阅读] 人工智能 | ZipMPC:让短视的MPC拥有长远眼光——通过模仿学习压缩长 horizon 智慧
  • A1-静态Mpls
  • 二、计算机网络技术——第2章:物理层
  • [1-01-01].第90节:如何学习新特性:
  • 一文速通《矩阵的特征值和特征向量》
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘pywifi’问题
  • 马斯克布局儿童 AI 领域,xAI 推出 Baby Grok,将带来哪些变革?
  • Windows防火墙配置详解
  • PDF限制功能如何用?简单教程来了!
  • 网络设备功能对照表
  • TipTap 富文本编辑器在小说写作中的应用实践
  • PyCharm 未正确关联 .jpg 为图片格式
  • 重学前端008 --- 响应式网页设计 CSS 无障碍 Quiz
  • React探索高性能Tree树组件实现——react-window、react-vtree
  • 安装cobalt_Strike_4.7
  • B树、B+树的区别及MySQL为何选择B+树