因为图像是2d的所以选择的是二维卷积
常用设置的阐述
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) :卷积过程步径大小
padding (int, tuple or str, optional):是否填充
padding_mode (string, optional) :以什么方式填充,默认为zroe
dilation (int or tuple, optional):内核元素之间的间距
groups (int, optional) :常值为1
bias (bool, optional):偏置 常值为1
测试代码 数据集为CIFAR10
from torch.nn import Conv2d
from torch.utils.data import DataLoader
dataset= torchvision.datasets.CIFAR10("./dataset",train=False,transform=torchvision.transforms.ToTensor(),
download=True)
dataloader =DataLoader(dataset,batch_size=64)
class LL(nn.Module):
def __init__(self) :
super(LL,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 x
ll=LL()
print(ll)
输出结果
在trnsorboard中显示
import torch
import torchvision
from torch import nn
from torch.nn import Conv2d
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter
dataset= torchvision.datasets.CIFAR10("./dataset",train=False,transform=torchvision.transforms.ToTensor(),
download=True)
dataloader =DataLoader(dataset,batch_size=64)
class LL(nn.Module):
def __init__(self) :
super(LL,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 x
ll=LL()
writer =SummaryWriter("conv2d")
step=0
for data in dataloader:
imgs,targets=data
output =ll(imgs)
print(imgs.shape)
print(output.shape)
writer.add_images("input",imgs,step)
# output 的out_channel为6 彩色图片为3 无法显示 应该把他变成 [64,6,30,30]->[xxx,3,30,30] 当xxx不知道是多少时 用-1代替他会自己计算
output=torch.reshape(output,(-1,3,30,30))
writer.add_images("output",output,step)
step=step+1
显示结果