泰州建设企业网站,科技制作网站,一站式服务中心,兰州网站推目录
神经网络-卷积层 torch.nn.Conv2d
神经网络-最大池化的使用 torch.nn.MaxPool2d 神经网络-卷积层 torch.nn.Conv2d
torch.nn.Conv2d的官方文档地址
CLASS torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride1, padding0, dilation1, groups1, biasTrue,…目录
神经网络-卷积层 torch.nn.Conv2d
神经网络-最大池化的使用 torch.nn.MaxPool2d 神经网络-卷积层 torch.nn.Conv2d
torch.nn.Conv2d的官方文档地址
CLASS torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride1, padding0, dilation1, groups1, biasTrue, padding_mode‘zeros’, deviceNone, dtypeNone) 卷积动画的链接https://github.com/vdumoulin/conv_arithmetic/blob/master/README.mdhttps://github.com/vdumoulin/conv_arithmetic/blob/master/README.md
注意
默认biasTrue这说明PyTorch中Con2d是默认给卷积操作加了偏置的。还有一些默认值stride1padding0等。out_channels输出通道数相当于就是卷积核的个数。dilation需要使用空洞卷积时再进行设置。 import torch
from torch import nn
from torch.nn import Conv2d
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter
from torchvision import datasets
from torchvision.transforms import transforms# 1. 加载数据
dataset datasets.CIFAR10(./dataset, trainFalse, transformtransforms.ToTensor(), downloadTrue)
dataloader DataLoader(dataset, batch_size64, shuffleTrue, num_workers0, drop_lastFalse)# 2. 构造模型
class Model(nn.Module):def __init__(self):super(Model, self).__init__()self.conv1 Conv2d(in_channels3, out_channels6, kernel_size3, stride1)def forward(self, x):return self.conv1(x)writer SummaryWriter(./logs/Conv2d)# 3. 实例化一个模型对象进行卷积
model Model()
step 0for data in dataloader:imgs, targets datawriter.add_images(imgs_ch3, imgs, step)# 4. 用tensorboard打开查看图像。但是注意add_images的输入图像的通道数只能是3
# 所以如果通道数3则可以先采用小土堆的这个不严谨的做法在tensorboard中查看一下图片outputs model(imgs)outputs torch.reshape(outputs, (-1, 3, 30, 30))writer.add_images(imgs_ch6, outputs, step)step 1writer.close()神经网络-最大池化的使用 torch.nn.MaxPool2d
池化也可成为下采样就是缩小输入图像尺寸但是不会改变输入图像的通道数。常见的有MaxPool2d、AvgPool2d等。相反有上采样MaxUnPool2d。
MaxPool2d的官方文档地址MaxPool2d — PyTorch 2.0 documentation
CLASS torch.nn.MaxPool2d(kernel_size, strideNone, padding0, dilation1, return_indicesFalse, ceil_modeFalse)
注意
stride默认kernel_sizeceil_mode默认是False也就是说事向下取整
pool和conv后的图像尺寸N计算公式是一样的N ( W − F 2 ∗ P ) / S 1 N(W-F2*P)/S1N(W−F2∗P)/S1且都是默认N向下取整。
在构造tensor的时候最好指定元素的数据类型是float即在最后加上dtypetorch.float32这样后面有些操作才不会出错。池化的作用保持输入图像的特征且减小输入量能加快训练。就类似于B站视频有10080P的也会有720P的720P虽然不如1080P那么高清但是仍然能够看出视频中物体的特征信息有点像打了马赛克一样 import torch
import torchvision.datasets
from torch import nn
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriterclass Model(nn.Module):def __init__(self):super(Model, self).__init__()self.maxpool1 nn.MaxPool2d(kernel_size3) # 默认:stridekernel_size,ceil_modeFalseself.maxpool2 nn.MaxPool2d(kernel_size3, ceil_modeTrue)def forward(self, x):return self.maxpool1(x), self.maxpool2(x)model Model()# -------------1.上图例子查看ceil_mode为True或False的池化结果--------------- #
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]], dtypetorch.float32)input torch.reshape(input, (-1, 1, 5, 5))
out1, out2 model(input)
print(out1{}\nout2{}.format(out1, out2))# --------------2.加载数据集并放入tensorboard查看图片----------------------- #
dataset torchvision.datasets.CIFAR10(dataset, trainFalse, transformtorchvision.transforms.ToTensor(),downloadTrue)
dataloader DataLoader(dataset, batch_size64, shuffleTrue)writer SummaryWriter(./logs/maxpool)
step 0
for data in dataloader:imgs, targets datawriter.add_images(imgs, imgs, step)imgs, _ model(imgs)writer.add_images(imgs_maxpool, imgs, step)step 1writer.close()