首先打開官方函數,檢視conv2d的使用方法。
conv函數由三個必填的參數,
in_channels指輸入的通道數,out_channels指輸出的通道數,kernel_size是指的卷積核的核心數,
還有一些非必填的參數。例如padding和stride參數,這兩個參數的詳細作用如下圖所示。
stride控制的是卷積一次能經過幾個矩陣的行和列,padding則是對要處理的資料進行一次填充。
1.padding=0、stride=0的情況。
2.padding=2、stride=0的情況。
https://github.com/vdumoulin/conv_arithmetic/blob/master/gif/arbitrary_padding_no_strides.gif
3.padding=1、stride=0的情況。
conv_arithmetic/same_padding_no_strides.gif at master · vdumoulin/conv_arithmetic · GitHub
對于2維卷積更多詳細示範圖的github連結:
conv_arithmetic/README.md at master · vdumoulin/conv_arithmetic · GitHub
#coding=utf-8
#主要學習torch.nn.conv2d()
import torch
import torchvision
from torch.utils.data import DataLoader
from PIL import Image
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 this_network(torch.nn.Module):
def __init__(self):
super(this_network,self).__init__()
self.conv1 = torch.nn.Conv2d(in_channels=3,out_channels=6,kernel_size=3,stride=1,padding=0)
def forward(self,x):
x = self.conv1(x)
return x
init_network = this_network()
print(init_network)
writer = SummaryWriter("./logs")
step = 0
for data in dataloader:
imgs,targets = data
output = init_network(imgs)
#print(imgs.shape)
#print(output.shape)
#使用tensorboard進行資料浏覽
writer.add_images("input",imgs,step)
output = torch.reshape(output,(-1,3,30,30))
writer.add_images("output",output,step)
step = step + 1