AI学习记录 - 怎么理解 torch 的 nn.Conv2d

有用就点个赞

怎么理解 nn.Conv2d 参数

conv_layer = nn.Conv2d(in_channels=3, out_channels= 64, kernel_size=3, stride=1, padding=0, bias=False)

in_channels

in_channels 可以设置成1,2,3,4等等都可以,一般来说做图像识别的时候,先使用图片解析工具把一个彩色图片变成三个通道的图片,所以一张图片对应有三张图,in_channels 一般来说等于3,当然你可以发明一个四通道图片,in_channels就等于4。又或者你直接使用原图,那么in_channels 的值就相当于有多少张不同的图片,怎么理解都可以。

在这里插入图片描述

先看参数对应什么,一般说卷积核都是二维的,但是这里指的是三维卷积核,一共有64个三维卷积核,如果变成二维的话,就有192个二维卷积核,可以理解为将三个通道的图片通过一个三维卷积核压缩成一个特征图,64个三维卷积核那就压缩成64个特征图

在这里插入图片描述

如果再不懂,举个简单的例子,input_tensor 的尺寸是 3*3 ,真实情况下肯定是100 * 100以上啦,图片一般都很大,这里不会滑动而已

import torch
import torch.nn as nn

# 定义输入张量,形状为 (batch_size, in_channels, height, width)
input_tensor = torch.tensor([[[[1, 1, 1],
                               [1, 1, 1],
                               [1, 1, 1]],

                              [[0, 1, 0],
                               [0, 1, 0],
                               [0, 1, 0]],

                              [[1, 0, 1],
                               [1, 0, 1],
                               [1, 0, 1]]]], dtype=torch.float32)

# 定义一个卷积层,输入通道数为3,输出通道数为6,卷积核大小为3x3
conv_layer = nn.Conv2d(in_channels=3, out_channels=6, kernel_size=3, bias=False)
print(input_tensor.size())
# 修改第一个通道的权重,但其实这里有6个三维卷积核
with torch.no_grad():
    conv_layer.weight[0] = torch.nn.Parameter(torch.tensor([[[1, 1, 1],
                                                             [1, 1, 1],
                                                             [1, 1, 1]],

                                                            [[1, 1, 1],
                                                             [1, 1, 1],
                                                             [1, 1, 1]],

                                                            [[1, 1, 1],
                                                             [1, 1, 1],
                                                             [1, 1, 1]]], dtype=torch.float32))
print(conv_layer.weight.size())
# 进行卷积操作
output = conv_layer(input_tensor)

# 输出结果
print("输入张量:")
print(input_tensor)
print("\n卷积核权重(仅第一个输出通道显示):")
print(conv_layer.weight[0])
print("\n输出结果(仅显示第一个输出通道的卷积结果):")
print(output[0][0])  # 只显示第一个输出通道的结果

再不懂,画个线
在这里插入图片描述

通道图和卷积核的计算方式,简单的例子

在这里插入图片描述
计算:
在这里插入图片描述

卷积核的数量,由 out_channels 决定,out_channels是多少,就生成多少个卷积核。

padding 参数解析

padding = 1,周围填充0
在这里插入图片描述
padding = 2,周围填充0
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值