nn_conv2d
https://pytorch.org/docs/stable/generated/torch.nn.Conv2d.html#torch.nn.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代表输入的通道数,比如RGB图片 通道数就是3
out_channels代表输出的通道数,可以自己设置
如图所示吗,输入一个5×5的图片数据,in_channels=1,用一个卷积核对其进行卷积运算,最后输出的out_channels= 1
如图当我们设置out_channels=2时,会生成两个卷积核,这两个卷积核的数值可以是不一样的(卷积核数值是随机生成的后续进行学习优化),这两个卷积核分别对原始图像进行卷积运算,生成两个结果,这两个结果就构成输出的两个通道,及out_channels=2。
如图比如一个RGB图channels = 3,那么卷积核的通道数也自动变为3
最后我们设置out_channels = 4,那么就会有4个卷积核对图像进行卷积运算,而每个卷积核的通道数等于in_channles
import torchimport torchvisionfrom torch import nnfrom torch.nn import Conv2dfrom torch.utils.data import DataLoaderfrom torch.utils.tensorboard import SummaryWriterdataset = torchvision.datasets.CIFAR10('./dataset',train=False,transform=torchvision.transforms.ToTensor(),download=True)dataloader = DataLoader(dataset,batch_size=64)class DEMO(nn.Module):def __init__(self):super(DEMO,self).__init__()self.conv1 = Conv2d(in_channels=3, out_channels=6, kernel_size= 3, stride=1, padding=0)def forward(self, x):x = self.conv1(x)return xdemo = DEMO()writer = SummaryWriter('logs')step = 0for data in dataloader:imgs,targets = dataoutput = demo(imgs)print(imgs.shape)# torch.Size([16, 3, 32, 32])print(output.shape)# torch.Size([16, 6, 30, 30])writer.add_images('input',imgs,step)# 由于RGB图片是三通道,channles = 6时无法显示,因此reshape成3通道# tensorboard中可以看到:# out_channels = 3时,输出是8×8# out_channels = 6时,reshape后# 会把另一个3通道的RGB图片平铺在前一个3通道RGB图片上,及16×8output = torch.reshape(output,(-1,3,30,30))writer.add_images('output',output,step)step += 1writer.close()
tips: Alt+Enter可以自动补全需要的库
