• PyTorch入门学习(八):神经网络-卷积层


    目录

    一、数据准备

    二、创建卷积神经网络模型

    三、可视化卷积前后的图像


    一、数据准备

    首先,需要准备一个数据集来演示卷积层的应用。在这个示例中,使用了CIFAR-10数据集,该数据集包含了10个不同类别的图像数据,用于分类任务。使用PyTorch的torchvision库来加载CIFAR-10数据集,并进行必要的数据转换。

    1. import torch
    2. import torchvision
    3. from torch.utils.data import DataLoader
    4. # 数据集准备
    5. dataset = torchvision.datasets.CIFAR10(root="D:\\Python_Project\\pytorch\\dataset2", train=False, transform=torchvision.transforms.ToTensor(), download=True)
    6. # 使用DataLoader加载数据集,每批次包含64张图像
    7. dataLoader = DataLoader(dataset, batch_size=64)

    二、创建卷积神经网络模型

    接下来,创建一个简单的卷积神经网络模型,以演示卷积层的使用。这个模型包含一个卷积层,其中设置了输入通道数为3(因为CIFAR-10中的图像是彩色的,有3个通道),卷积核大小为3x3,输出通道数为6,步长为1,填充为0。

    1. import torch.nn as nn
    2. from torch.nn import Conv2d
    3. class Tudui(nn.Module):
    4. def __init__(self):
    5. super(Tudui, self).__init__()
    6. # 卷积层
    7. self.conv1 = Conv2d(in_channels=3, out_channels=6, kernel_size=3, stride=1, padding=0)
    8. def forward(self, x):
    9. x = self.conv1(x)
    10. return x
    11. tudui = Tudui()
    12. print(tudui)

    上述代码定义了一个Tudui类,该类继承了nn.Module,并在初始化方法中创建了一个卷积层。forward方法定义了数据在模型中的前向传播过程。

    三、可视化卷积前后的图像

    卷积层通常会改变图像的维度和特征。使用TensorBoard来可视化卷积前后的图像以更好地理解卷积操作。首先,导入SummaryWriter类,并创建一个SummaryWriter对象用于记录日志。

    1. from torch.utils.tensorboard import SummaryWriter
    2. writer = SummaryWriter("logs")

    然后,使用DataLoader遍历数据集,对每个批次的图像应用卷积操作,并将卷积前后的图像以及输入的图像写入TensorBoard。

    1. step = 0
    2. for data in dataLoader:
    3. imgs, targets = data
    4. # 卷积操作
    5. output = tudui(imgs)
    6. # 将输入图像写入TensorBoard
    7. writer.add_images("input", imgs, step)
    8. # 由于TensorBoard不能直接显示具有多个通道的图像,我们需要重定义输出图像的大小
    9. output = torch.reshape(output, (-1, 3, 30, 30))
    10. # 将卷积后的图像写入TensorBoard
    11. writer.add_images("output", output, step)
    12. step += 1
    13. writer.close()

    在上述代码中,使用writer.add_images将输入和输出的图像写入TensorBoard,并使用torch.reshape来重定义输出图像的大小,以满足TensorBoard的显示要求。

    运行上述代码后,将在TensorBoard中看到卷积前后的图像,有助于理解卷积操作对图像的影响。

    完整代码如下:

    1. import torch
    2. import torchvision
    3. from torch import nn
    4. from torch.nn import Conv2d
    5. from torch.utils.data import DataLoader
    6. from torch.utils.tensorboard import SummaryWriter
    7. #数据集准备
    8. dataset = torchvision.datasets.CIFAR10("D:\\Python_Project\\pytorch\\dataset2",train=False,transform=torchvision.transforms.ToTensor(),download=True)
    9. #使用dataloader加载数据集,批次数为64
    10. dataLoader = DataLoader(dataset,batch_size=64)
    11. class Tudui(nn.Module):
    12. def __init__(self):
    13. super(Tudui,self).__init__()
    14. # 该神经网络调用conv2d进行一层卷积,输入通道为3层(彩色图像为3通道),卷积核大小为3*3,输出通道为6,设置步长为1,padding为0,不进行填充。
    15. self.conv1 = Conv2d(in_channels=3,out_channels=6,kernel_size=3,stride=1,padding=0)
    16. def forward(self,x):
    17. x = self.conv1(x)
    18. return x
    19. tudui = Tudui()
    20. print(tudui)
    21. # 生成日志
    22. writer = SummaryWriter("logs")
    23. step = 0
    24. # 输出卷积前的图片大小和卷积后的图片大小
    25. for data in dataLoader:
    26. imgs,targets = data
    27. # 卷积操作
    28. output = tudui(imgs)
    29. print(imgs.shape)
    30. print(output.shape)
    31. writer.add_images("input",imgs,step)
    32. """
    33. 注意:使用tensorboard输出时需要重新定义图片大小
    34. 对于输入的图片集imgs来说,tensor.size([64,3,32,32]),即一批次为64张,一张图片为三个通道,大小为32*32
    35. 对于经过卷积后输出的图片集output来说,tensor.size([64,6,30,30]),通道数变成了6,tensorboard不知道怎么显示通道数为6的图片,所以如果直接输出会报错
    36. 解决方案:
    37. 使用reshape方法对outputs进行重定义,把通道数改成3,如果不知道批次数大小,可以使用-1代替,程序会自动匹配批次大小。
    38. """
    39. #重定义输出图片的大小
    40. output = torch.reshape(output,(-1,3,30,30))
    41. # 显示输出的图片
    42. writer.add_images("output",output,step)
    43. step = step + 1
    44. writer.close()

    参考资料:

    视频教程:PyTorch深度学习快速入门教程(绝对通俗易懂!)【小土堆】

  • 相关阅读:
    kotlin函数
    Python抓取高考网图片
    猿创征文|Redis删除策略
    uni-app - H5 页面路由不存在时,跳转到自己定制的 404.vue 页面(当路由不存在时自动重定向到自定义的 404 组件)超详细简约高效的解决方案
    [Java安全]—再探Filter内存马
    【mysql 高级】索引介绍,索引结构 ,哪些情况下需要创建索引 ,哪些情况下不需要创建索引
    数据库主从切换过程中Druid没法获取连接错误
    PaddleOCR实验过程记录
    详解中小微风控中的财税票数据
    【分布式】入门级NCCL多机并行实践 - 02
  • 原文地址:https://blog.csdn.net/qq_46179411/article/details/134091066