神经网络学习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()


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

相关推荐
云上艺旅20 小时前
K8S学习之基础七十四:部署在线书店bookinfo
学习·云原生·容器·kubernetes
你觉得20520 小时前
哈尔滨工业大学DeepSeek公开课:探索大模型原理、技术与应用从GPT到DeepSeek|附视频与讲义下载方法
大数据·人工智能·python·gpt·学习·机器学习·aigc
hyshhhh21 小时前
【算法岗面试题】深度学习中如何防止过拟合?
网络·人工智能·深度学习·神经网络·算法·计算机视觉
薛定谔的猫-菜鸟程序员21 小时前
零基础玩转深度神经网络大模型:从Hello World到AI炼金术-详解版(含:Conda 全面使用指南)
人工智能·神经网络·dnn
A旧城以西21 小时前
数据结构(JAVA)单向,双向链表
java·开发语言·数据结构·学习·链表·intellij-idea·idea
无所谓จุ๊บ21 小时前
VTK知识学习(50)- 交互与Widget(一)
学习·vtk
FAREWELL000751 天前
C#核心学习(七)面向对象--封装(6)C#中的拓展方法与运算符重载: 让代码更“聪明”的魔法
学习·c#·面向对象·运算符重载·oop·拓展方法
Listennnn1 天前
优雅的理解神经网络中的“分段线性单元”,解剖前向和反向传播
人工智能·深度学习·神经网络
吴梓穆1 天前
UE5学习笔记 FPS游戏制作38 继承标准UI
笔记·学习·ue5
Three~stone1 天前
MySQL学习集--DDL
数据库·sql·学习