天天看點

二維卷積——torch.nn.conv2d的使用

首先打開官方函數,檢視conv2d的使用方法。

conv函數由三個必填的參數,

        in_channels指輸入的通道數,out_channels指輸出的通道數,kernel_size是指的卷積核的核心數,

還有一些非必填的參數。例如padding和stride參數,這兩個參數的詳細作用如下圖所示。

stride控制的是卷積一次能經過幾個矩陣的行和列,padding則是對要處理的資料進行一次填充。

1.padding=0、stride=0的情況。

二維卷積——torch.nn.conv2d的使用

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
          

效果圖

繼續閱讀