import torch
import torch.nn.functional as F
# 小括号里面有几个[]就代表是几维数据
input = torch.tensor([[1,2,0,3,1],
[0,1,2,3,1],
[1,2,1,0,0],
[5,2,3,1,1],
[2,1,0,1,1]])
kernel = torch.tensor([[1,2,1],
[0,1,0],
[2,1,0]])
input = torch.reshape(input,(1,1,5,5))
kernel = torch.reshape(kernel,(1,1,3,3))
# stride代表的是步长的意思,即每次卷积核向左或者向下移动多少步进行相乘
# 因为conv2d的input和weight对应的tensor是[batch,channel,h,w],所以上述才将它们进行reshape
output = F.conv2d(input,kernel,stride=1)
print(output)
output = F.conv2d(input,kernel,stride=2)
print(output)
# padding代表的是向上下左右填充的行列数,里面数字填写0
output3 = F.conv2d(input,kernel,stride=1,padding=1)
print(output3)
import torch
import torchvision
from torch.utils.data import DataLoader
from torch import nn
from torch.nn import Conv2d
from torch.utils.tensorboard import SummaryWriter
dataset = torchvision.datasets.CIFAR10('./torchvision_dataset', train=False, download=False,
transform=torchvision.transforms.ToTensor())
# 准备好数据集就放在dataloader中进行加载
dataloader = DataLoader(dataset, batch_size=64)
# 开始定义一个卷积类
class Zkl(nn.Module):
def __init__(self):
super(Zkl, 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
writer = SummaryWriter("nn_conv2d")
zkl = Zkl()
# print(zkl)
step = 0
for data in dataloader:
imgs,target = data
output = zkl(imgs)
#print(imgs.shape)
#print(output.shape)
writer.add_images('nn_conv2d_input',imgs,step)
#因为输出是6个通道,tensorboard无法解析,所以需要reshape三个通道
output = torch.reshape(output,(-1,3,30,30))
writer.add_images('nn_conv2d_output',output,step)
step+=1
writer.close()