Pytorch个人学习记录总结 06

news/2024/11/16 4:25:28/

目录

神经网络-卷积层 torch.nn.Conv2d

神经网络-最大池化的使用 torch.nn.MaxPool2d


神经网络-卷积层 torch.nn.Conv2d

torch.nn.Conv2d的官方文档地址

CLASS torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True, padding_mode=‘zeros’, device=None, dtype=None)


卷积动画的链接:https://github.com/vdumoulin/conv_arithmetic/blob/master/README.mdicon-default.png?t=N6B9https://github.com/vdumoulin/conv_arithmetic/blob/master/README.md

注意

  • 默认bias=True,这说明PyTorch中Con2d是默认给卷积操作加了偏置的。
  • 还有一些默认值:stride=1,padding=0等。
  • 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', train=False, transform=transforms.ToTensor(), download=True)
    dataloader = DataLoader(dataset, batch_size=64, shuffle=True, num_workers=0, drop_last=False)# 2. 构造模型
    class Model(nn.Module):def __init__(self):super(Model, self).__init__()self.conv1 = Conv2d(in_channels=3, out_channels=6, kernel_size=3, stride=1)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, stride=None, padding=0, dilation=1, return_indices=False, ceil_mode=False)

注意

  • stride默认=kernel_size
  • ceil_mode默认是False,也就是说事向下取整

pool和conv后的图像尺寸N计算公式是一样的:N = ( W − F + 2 ∗ P ) / S + 1 N=(W-F+2*P)/S+1N=(W−F+2∗P)/S+1,且都是默认N向下取整。
 

  1. 在构造tensor的时候,最好指定元素的数据类型是float,即在最后加上dtype=torch.float32,这样后面有些操作才不会出错。
  2. 池化的作用:保持输入图像的特征,且减小输入量,能加快训练。(就类似于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_size=3)  # 默认:stride=kernel_size,ceil_mode=Falseself.maxpool2 = nn.MaxPool2d(kernel_size=3, ceil_mode=True)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]], dtype=torch.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', train=False, transform=torchvision.transforms.ToTensor(),download=True)
    dataloader = DataLoader(dataset, batch_size=64, shuffle=True)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()
    


http://www.ppmy.cn/news/977755.html

相关文章

面试算法题

1 使用栈实现队列 #include <iostream> #include <stack> class MyQueue { public:MyQueue() {}void push(int x){in.push(x); // 直接将元素push入in栈}int pop(){int data peek(); // 先查一遍&#xff0c;就是更新一遍out栈out.pop();return data;}// 查找队…

linux 驱动开发常用知识点与API

linux 驱动开发常用知识点与API 前言笔记正文最后 前言 之前的读书笔记&#xff0c;以.c 文件的方式记录&#xff0c;在这里也以代码的方式记录 笔记正文 /***************************************中断常用API****************************************/ /* flags 是中断处…

Transformer+医学图像最新进展【2023】

Transformer主要用于自然语言处理领域。近年来,它在计算机视觉(CV)领域得到了广泛的应用。医学图像分析(MIA,Medical image analysis)作为机器视觉(CV,Computer Vision)的一个重要分支,也极大地受益于这一最先进的技术。 机构:新加坡国立大学机械工程系、中山大学智能系…

php套用Iframe访问导致cookie跨域session失效问题

一.背景 a网站&#xff08;www.aa.com&#xff09;嵌入b网站 (www.bb.com) 网站&#xff0c;因为跨域原因&#xff0c;其实如果b网站是以aa.com后缀结尾的话是正常的 二.博客参考 https://juejin.cn/post/7123652955282079751 1.上面的试了这个IE的没什么用&#xff08;有可能…

AI Chat 设计模式:9. 命令模式

本文是该系列的第九篇&#xff0c;采用问答式的方式展开&#xff0c;问题由我提出&#xff0c;答案由 Chat AI 作出&#xff0c;灰色背景的文字则主要是我的一些思考和补充。 问题列表 Q.1 介绍下命令模式A.1Q.2 详细说说命令模式适用于啥场景呢A.2Q.3 举一个命令模式的例子&a…

linux LVM磁盘管理

Linux运维过程中经常会遇到扩容的场景&#xff0c;下面做一点简单笔记&#xff0c;所谓好记性不如烂笔头。 1、新建磁盘挂载 &#xff08;1&#xff09;先看看主机上有没有挂载磁盘或挂载的磁盘有没有剩余的。 如下图可以看到这台机器挂了两个盘&#xff0c;一个/dev/sda,这…

Form Generator 扩展子表单组件之表单校验(超详细)

一、form-generator是什么?✨ ⭐️ 🌟 form-generator的作者是这样介绍的:Element UI表单设计及代码生成器,可将生成的代码直接运行在基于Element的vue项目中;也可导出JSON表单,使用配套的解析器将JSON解析成真实的表单。 但目前它提供的组件并不能满足我们在项目中的…

WPF实战学习笔记06-设置待办事项界面

设置待办事项界面 创建待办待办事项集合并初始化 TodoViewModel&#xff1a; using Mytodo.Common.Models; using Prism.Commands; using Prism.Mvvm; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using Sy…