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


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

相关推荐
Blossom.1181 小时前
使用Python和Scikit-Learn实现机器学习模型调优
开发语言·人工智能·python·深度学习·目标检测·机器学习·scikit-learn
scdifsn2 小时前
动手学深度学习12.7. 参数服务器-笔记&练习(PyTorch)
pytorch·笔记·深度学习·分布式计算·数据并行·参数服务器
恰薯条的屑海鸥3 小时前
零基础在实践中学习网络安全-皮卡丘靶场(第十六期-SSRF模块)
数据库·学习·安全·web安全·渗透测试·网络安全学习
喜欢吃燃面3 小时前
C++刷题:日期模拟(1)
c++·学习·算法
海盗儿3 小时前
Attention Is All You Need (Transformer) 以及Transformer pytorch实现
pytorch·深度学习·transformer
不爱写代码的玉子4 小时前
HALCON透视矩阵
人工智能·深度学习·线性代数·算法·计算机视觉·矩阵·c#
2301_797604244 小时前
学习记录:DAY32
学习
sbc-study4 小时前
PCDF (Progressive Continuous Discrimination Filter)模块构建
人工智能·深度学习·计算机视觉
蓝婷儿5 小时前
6个月Python学习计划 Day 16 - 面向对象编程(OOP)基础
开发语言·python·学习
小喵喵生气气5 小时前
Python60日基础学习打卡Day46
深度学习·机器学习