pytorch学习(六):卷积层的使用

卷积函数的概念

  • 卷积核从输入特征图的左上角开始,按照设定的步长(Stride)滑动。步长决定了卷积核每次滑动的像素数,这里我们假设步长 s=1
  • 在每次滑动时,卷积核与输入特征图对应位置的元素相乘,然后将这些乘积相加得到一个输出值。

torch.nn.functional 

conv2d卷积函数的参数为例:

参数说明:

input:要求的输入shape为4个。(minibatch,通道,高,宽)

        如果输入的input的shape不符合要求,可以通过torch.reshape来进行reshape。

stride:步数,卷积核移动的步长 

padding:在图像的上下左右进行填充(填充的数一般设置为0),可以指定一个数,也可以指定一个元组。填充的目的是为了增加感受野,充分利用边缘信息,使里面的数被用到的次数均匀一些。

遇见问题1:为什么二维张量卷积后变成了四维张量呢?

解决办法:在进行规范性输入的时候,二维张量reshpe成了四维张量,所以变成了四维张量。

torch.nn

卷积层:

in_chanels:输入图片的数量,比如,输入一个图片就是in_chanel为1.

out_chanels:输出的由卷积后产物的数量,比如out_chanel=1就是卷积后的产物有一个;out_chanel=2就是卷积核会有两个,每个卷积核分别与输入进行卷积,得到两个卷积后的产物,然后两个叠加起来(三明治有两篇面包)就是一个输出。

dilation: 卷积核对应位的距离

bias:对卷积的结果是否加减一个常数。

groups:分组卷积(一半设置为1,很少使用)

padding:在图像的上下左右进行填充(填充的数一般设置为0),可以指定一个数,也可以指定一个元组。填充的目的是为了增加感受野,充分利用边缘信息,使里面的数被用到的次数均匀一些。

padding_mode:填充模式,选择0填充还是1填充。

import torch
import torchvision
from torch.utils.data import DataLoader
from torch import nn
from torch.nn import Conv2d
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 WWJ(nn.Module):
    def __init__(self):
        super().__init__()
        self.conv1 =Conv2d(in_channels=3,out_channels=6,kernel_size=3,stride=1)

    def forward(self,x):
        x=self.conv1(x)
        return x

wang=WWJ()

print(wang)

# write=SummaryWriter('logs')
# step=0
for data in dataloader:
    imgs,targets=data
    output=wang(imgs)
    # print(imgs.shape) #torch.Size([64, 3, 32, 32])
    # print(output.shape)  #torch.Size([64, 6, 30, 30])
    # write.add_images("input",imgs,step)
    # write.add_image("output",output,step)
    # step=step+1

    

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-17 02:26:04       70 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-17 02:26:04       74 阅读
  3. 在Django里面运行非项目文件

    2024-07-17 02:26:04       62 阅读
  4. Python语言-面向对象

    2024-07-17 02:26:04       72 阅读

热门阅读

  1. PHP基础认知

    2024-07-17 02:26:04       23 阅读
  2. 探索Eureka的高级用法:在服务中实现分布式锁

    2024-07-17 02:26:04       22 阅读
  3. Rust编程-函数式编程

    2024-07-17 02:26:04       25 阅读
  4. 前端打包部署后源码安全问题总结

    2024-07-17 02:26:04       25 阅读
  5. 前端实现调用ChatGPT

    2024-07-17 02:26:04       24 阅读
  6. 萝卜快跑的「悖论」

    2024-07-17 02:26:04       24 阅读
  7. Dart语法问答到实践

    2024-07-17 02:26:04       18 阅读
  8. c++将utf8转gb2312

    2024-07-17 02:26:04       25 阅读
  9. 理解 extern “C“:跨语言链接的桥梁

    2024-07-17 02:26:04       25 阅读
  10. 记录第一次因为数据库事务产生的BUG

    2024-07-17 02:26:04       19 阅读