神经网络学习3-卷积层

膨胀卷积,也被称为空洞卷积或扩张卷积,是一种特殊的卷积运算,它在标准卷积的基础上引入了一个额外的超参数,即膨胀率(dilation rate)。这个超参数决定了在卷积核的元素之间插入多少额外的空间。通过这种方式,膨胀卷积能够在不增加计算复杂度的同时,扩大卷积运算的采样范围,从而增加感受野(receptive field)的大小。感受野指的是卷积神经网络中某一层输出结果中一个元素所对应的输入层的区域大小,它代表了卷积核在图像上看到的区域大小。感受野越大,包含的上下文关系越多,有利于捕捉更广泛的图像信息。

c 复制代码
import torch
import torchvision
from torch import nn
from torch.nn import Conv2d
from torch.utils.data import DataLoader

data_transform=torchvision.transforms.Compose(
    [torchvision.transforms.ToTensor()]
)
test_data=torchvision.datasets.CIFAR10('./dataset',train=False,transform=data_transform,download=True)
dataloader=DataLoader(dataset=test_data,batch_size=64)
class Yizhou(nn.Module):
    def __init__(self) -> None:
        super().__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

yizhou=Yizhou()
print(yizhou)

输出的是init中定义的卷积

Yizhou(

(conv1): Conv2d(3, 6, kernel_size=(3, 3), stride=(1, 1))

)

卷积后的结果是H-kernel_size +1,W也是

c 复制代码
import torch
import torchvision
from torch import nn
from torch.nn import Conv2d
from torch.utils.data import DataLoader

data_transform=torchvision.transforms.Compose(
    [torchvision.transforms.ToTensor()]
)
test_data=torchvision.datasets.CIFAR10('./dataset',train=False,transform=data_transform,download=True)
dataloader=DataLoader(dataset=test_data,batch_size=64)
class Yizhou(nn.Module):
    def __init__(self) -> None:
        super().__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

yizhou=Yizhou()
for data in dataloader:
    imgs,targets=data
    output=yizhou(imgs)
    print(imgs.shape)
    print(output.shape)

如图所示可得输出3通道转为了6通道

大小变为了30x30

一个错误:

c 复制代码
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

data_transform=torchvision.transforms.Compose(
    [torchvision.transforms.ToTensor()]
)
test_data=torchvision.datasets.CIFAR10('./dataset',train=False,transform=data_transform,download=True)
dataloader=DataLoader(dataset=test_data,batch_size=64)
class Yizhou(nn.Module):
    def __init__(self) -> None:
        super().__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

yizhou=Yizhou()
step=0
writer=SummaryWriter('../logs')
for data in dataloader:
    imgs,targets=data
    output=yizhou(imgs)
    print(imgs.shape)
    print(output.shape)
    writer.add_images('input',imgs,step)
    writer.add_images('output',output,step)

    step=step+1

这里出现了报错

因为add_images方法一般只接受三通道CHW或者1通道的

因此要用reshape方法进行调整

c 复制代码
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

data_transform=torchvision.transforms.Compose(
    [torchvision.transforms.ToTensor()]
)
test_data=torchvision.datasets.CIFAR10('./dataset',train=False,transform=data_transform,download=True)
dataloader=DataLoader(dataset=test_data,batch_size=64)
class Yizhou(nn.Module):
    def __init__(self) -> None:
        super().__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

yizhou=Yizhou()
step=0
writer=SummaryWriter('logs')#../是父文件夹
for data in dataloader:
    imgs,targets=data
    output=yizhou(imgs)
    print(imgs.shape)
    print(output.shape)
    writer.add_images('input',imgs,step)
    output=torch.reshape(output,(-1,3,30,30))#这里的-1指的是占位,让torch自行计算batchsize
    writer.add_images('output',output,step)#SummaryWriter 的 add_images 方法希望输入张量有1个或3个通道
    #因为这里输出的是6通道,我们需要将6通道转为3通道,多余的放在batchsize里面

    step=step+1
writer.close()


卷积层:多少个卷积核就输出多少层

相关推荐
AI视觉网奇7 小时前
ue c++ 编译常量
c++·学习·ue5
2501_941864968 小时前
高效记忆与学习能力提升方法
学习
RisunJan8 小时前
【华夷之辨】什么是华夷之辨
学习
程芯带你刷C语言简单算法题8 小时前
Day48~对于高度为 n 的台阶,从下往上走,每一步的阶数为 1,2,3 中的一个。问要走到顶部一共有多少种走法
c语言·开发语言·学习·算法·c
五羟基己醛8 小时前
【半小时入门深度学习】从零开始的Pytorch入门指南
人工智能·深度学习
北京地铁1号线8 小时前
BERT(Bidirectional Encoder Representations from Transformers)架构详解
人工智能·深度学习·bert
风送雨8 小时前
FastAPI 学习教程 · 第6部分
学习·fastapi
风送雨8 小时前
FastAPI 学习教程 · 第5部分
jvm·学习·fastapi
副露のmagic8 小时前
更弱智的算法学习 day48
学习·算法