4.读取dataloader中的数据,并进行卷积,查看卷积前和卷积后的变化
卷积层
1. nn.conv2d的使用
红色为常用的
in_channels:输入的通道数
out_channels:输出的通道数
kernel_size:卷积核大小
stride: 卷积过程中步径大小
padding:填充
dilation
bias:偏置
2.用CIFAR作为数据集输入
# 数据集创建
dataset = torchvision.datasets.CIFAR10(root="dataset", train=False, transform=torchvision.transforms.ToTensor())
# 加载数据,64个图片为一个包
dataloader = DataLoader(dataset, batch_size=64)
3.卷积层的设置
class M(nn.Module):
def __init__(self):
super().__init__() # 父类初始化
self.conv1 = Conv2d(in_channels=3, out_channels=6, kernel_size=3, stride=1, padding=0)
def forward(self, x):
output = self.conv1(x)
return output
4.读取dataloader中的数据,并进行卷积,查看卷积前和卷积后的变化
conv = M() # 实例化
for data in dataloader:
imgs, targets = data
output = conv(imgs)
print(imgs.shape)
print(output.shape)
可以看到由三通道变为六通道,
像素32*32由于卷积的影响变成30*30
5.用tensorboard读取卷积后的图像
writer = SummaryWriter("logs")
step = 0
for data in dataloader:
imgs, targets = data
output = conv(imgs)
print(imgs.shape)
print(output.shape)
# torch.Size([64, 3, 32, 32])
writer.add_images(tag="image_input", img_tensor=imgs, global_step=step)
# torch.Size([64, 6, 30, 30]) -> [XXX, 3, 30, 30] 六个通道变为三个通道
output = torch.reshape(input=output, shape=(-1, 3, 30, 30))
writer.add_images(tag="image_conv", img_tensor=output, global_step=step)
step = step + 1
writer.close()
结果展示
完整代码
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(root="dataset", train=False, transform=torchvision.transforms.ToTensor())
# 加载数据,64个图片为一个包
dataloader = DataLoader(dataset, batch_size=64)
class M(nn.Module):
def __init__(self):
super().__init__() # 父类初始化
self.conv1 = Conv2d(in_channels=3, out_channels=6, kernel_size=3, stride=1, padding=0)
def forward(self, x):
y = self.conv1(x)
return y
conv = M() # 实例化
writer = SummaryWriter("logs")
step = 0
for data in dataloader:
imgs, targets = data
output = conv(imgs)
print(imgs.shape)
print(output.shape)
# torch.Size([64, 3, 32, 32])
writer.add_images(tag="image_input", img_tensor=imgs, global_step=step)
# torch.Size([64, 6, 30, 30]) -> [XXX, 3, 30, 30] 六个通道变为三个通道
output = torch.reshape(input=output, shape=(-1, 3, 30, 30))
writer.add_images(tag="image_conv", img_tensor=output, global_step=step)
step = step + 1
writer.close()