pytorch(5)——卷积、

一、卷积

  1. 使用之前需要引入:

import torch

import torch.nn.functional as F

  1. 参数:

官网提供数据如上,其中:

input:输入。需要是 tensor 型的,要写明有数据分成几批,输入通道有几个,高和宽是多少

weight:权重,卷积核(kernel)。要写明输出通道有几个,(group一般取1)输入通道数,高和宽

bias:偏置

stride:步长,可以是单个数,或者元组(sH:控制横向步径,sW:控制纵向步径)

padding:填充

  1. 使用方法举例:

import torch
import torch.nn.functional as F

input = torch.tensor([[1,2,0,3,1],
                      [0,1,2,3,1],
                      [1,2,1,0,0],
                      [5,2,3,1,1],
                      [2,1,0,1,1]])  # 这是输入矩阵
# 下面是卷积核
kernel = torch.tensor([[1,2,1],
                        [0,1,0],
                        [2,1,0]])

# pytorch 提供的尺寸变换
input = torch.reshape(input,(1,1, 5, 5))  # batchsize=1*1   宽高=5*5 通道=1
'''
reshape要求输入:tensor形式的矩阵,输入像变换的尺寸大小
'''
kernel = torch.reshape(kernel,(1,1, 3, 3))  # 卷积核宽高,通道等信息重置

output = F.conv2d(input, kernel, stride=1)
output2 = F.conv2d(input, kernel, stride=2)
print(output)
print(output2)

# padding操作

output3 = F.conv2d(input, kernel, stride=1, padding=1)
print(output3)

#结果:
tensor([[[[10, 12, 12],
          [18, 16, 16],
          [13,  9,  3]]]])
tensor([[[[10, 12],
          [13,  3]]]])
tensor([[[[ 1,  3,  4, 10,  8],
          [ 5, 10, 12, 12,  6],
          [ 7, 18, 16, 16,  8],
          [11, 13,  9,  3,  4],
          [14, 13,  9,  7,  4]]]])

Process finished with exit code 0
  1. 信息补充:

kernel:卷积核;

batch:神经网络训练模型时,有1000个样本,分成10批,就是10个batch,每批100个样本,那么:batch = 10, batch_size = 100;

Epoch:1个epoch等于使用训练集中的全部样本训练一次,通俗的讲几次epoch就是整个数据集被轮几次;

参考:(38条消息) 神经网络训练中batch的作用(从更高角度理解)_神经网络batch_做个好男人!的博客-CSDN博客


二、卷积层

1、官网定义:

参数说明(数据都要转换成 tensor 型):

in_channels:输入通道数;int型

out_channels:输出通道数;int型 输出通道有几个,卷积核就有几个;

kernel_size:卷积核大小;int/tuple型(一个数或者元组)

stride:步长;int/tuple型

padding:填充;int/tuple型

dilation:卷积核对应位的距离,空洞卷积;int/tuple型

groups:一般是1,如果改变就是分组卷积;int型

bias:偏置,True表示计算时偏置要加上去;bool型

padding_mode:填充的模式 'zeros':填充部分都设置成0,还有'reflect''replicate''circular'型;string型

其中只有前三个参数是需要自己设置的,其他都有默认值,比较常用的是前面五个参数。

2、实例:

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

dataset = torchvision.datasets.CIFAR10("F:\\pycharm\\text\\dataset", train=False, transform=torchvision.transforms.ToTensor(),
                                        download=False)
# 这里是需要一个测试数据集,数据集在F:\pycharm\text\dataset里面,将数据集里的数据集变成 tensor 型
dataloader = DataLoader(dataset,batch_size=64)
# 数据集被分组,每组64张图片,图片取自 dataset,最后赋值给 dataloader

class Tudui(nn.Module):
    def __init__(self):
        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)  # x 经过一个卷积层后得到一个输出,还叫他 x
        return x

tudui = Tudui()
print(tudui)
# 输出:Tudui(
#   (conv1): Conv2d(3, 6, kernel_size=(3, 3), stride=(1, 1))
# )  输出卷积的名字叫 conv1,后面是他的信息,3个输入通道,6个输出通道,卷积核原来输入的是
# 3,但是卷积核自动填充,变成了:3*3,后面的步长也是一样,自动扩变成1*1(横向每次走一步,纵向每次走一步)

上面是基本的引用和创建卷积层,接下来是进入的层和输出的层处理数据的具体形况:

for data in dataloader:
    imgs, targets = data
    output = tudui(imgs)
    print(output.shape)  # torch.Size([64, 6, 30, 30]) 输出通道变多了,但是经过卷积图片尺寸变小了
    print(imgs.shape)  # torch.Size([64, 3, 32, 32])

3、计算公式:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值