神经网络——Conv2d的使用

在Convolution Layers 卷积层中有很多函数,像:nn.Conv1d 表示1维的;nn.Conv2d 表示2维的,如图片,等。其中Conv2d使用最多,故本文重点讲下nn.Conv2d的使用。

目录

一、Conv2d的官方文档

二、实例操作

1.理解参数之间的关系

2.实例练习

一、Conv2d的官方文档

torch.nn.Conv2d(in_channels,
out_channels,
kernel_size,
stride=1,
padding=0,
dilation=1,
groups=1,
bias=True,
padding_mode=’zeros’,
device=None,
dtype=None)

看着里面的参数,非常的多,但其实很多都有默认值,下面我们来看下给出的参数解释:

in_channels (int) – 输入图像中的通道数

out_channels (int)– 卷积产生的通道数即输出图片的通道数

kernel_size (int or tuple) – 卷积核的大小(可以是个数,也可以是元组)

stride (int or tuple, optional)– 卷积的步幅。 默认值:1

padding (int, tuple or str, optional)– 填充添加到输入的所有四个边。 默认值:0

padding_mode (string, optional)–填充的几个选择 ‘zeros’, ‘reflect’, ‘replicate’ 或 ‘circular’。 默认值:”零”

dilation (int or tuple, optional)– 内核元素之间的间距。 默认值:1

groups (int, optional) – 从输入通道到输出通道的阻塞连接数。 默认值:1

bias (bool, optional) — 如果为真,则为输出添加可学习的偏差。 默认值:真

其中, 标红的参数使用的较多。

shape:

神经网络——Conv2d的使用

在搭建神经网络中,我们可以根据已知数据来推算出其他的。

; 二、实例操作

1.理解参数之间的关系

Conv2d中常用的参数有 in_channels, out_channels, kernel_size, stride, padding,学习之前可以先了解一些参数之间的关系。

可以进行简单的理解:

当in_channels = 1,out_channels = 1时,表示输入的图像数量是1, 输出的数量也是1,这时有一个卷积核。

而当in_channels = 1,out_channels = 2时,表示输入的图像数量是1, 输出的数量也是2,这时有两个卷积核,这两个卷积核可能一样,也可能不一样。

2.实例练习

练习代码如下:

import torchvision
import torch
from torch import nn
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms
from torch.nn import Conv2d

#使用CIFAR10数据集
dataset_conv = torchvision.datasets.CIFAR10(“./dataset”, train=False, transform=transforms.ToTensor(), download=True)

#将数据集放入dataloader中,让它进行加载
dataloder = DataLoader(dataset=dataset_conv, batch_size=64, shuffle=True, num_workers=0, drop_last=False)

class Test(nn.Module): #创建一个Test类,继承nn.Module
def init(self):
super(Test, self).init() #完成父类的初始化
self.conc1 = Conv2d(in_channels=3, out_channels=6, kernel_size=3, stride=1, padding=0) #在Test这个网络写入个卷积层
def forward(self, x):
x = self.conc1(x)
return (x)

#初始化这个网络并输出
test = Test()
print(test)

#写入tensorboard中
writer = SummaryWriter(“logs”)
step = 0
for data in dataloder:
imgs, target = data
output = test(imgs) #输出的数据是经过神经网络处理的数据

查看数据类型代码

print(imgs.shape)
print(output.shape)

torch.Size([64, 3, 32, 32])

writer.add_images(“conv2d”, imgs, global_step=step) #因为不是一张图片,所以使用images

torch.Size([64, 6, 30, 30]) ——>[xx, 3, 30, 30] 因为彩色图片是3channals的,但是我们输出是6channals,,它识别不出来所以会报错

output = torch.reshape(output, (-1, 3, 30, 30))

使用reshape来变换通道,因为batch我们不知道,直接输入-1,它会根据后面内容,自动推导出来(这个方法有点取巧,供学习理解)

writer.add_images(“output”, output, step)
step = step + 1
writer.close()

Original: https://blog.csdn.net/m0_51816252/article/details/125082831
Author: 晓亮.
Title: 神经网络——Conv2d的使用

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/669939/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球