在Convolution Layers  卷积层中有很多函数,像:nn.Conv1d    表示1维的;nn.Conv2d    表示2维的,如图片,等。其中Conv2d使用最多,故本文重点讲下nn.Conv2d的使用。


目录

一、Conv2d的官方文档

二、实例操作

1.理解参数之间的关系

2.实例练习


一、Conv2d的官方文档

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)

看着里面的参数,非常的多,但其实很多都有默认值,下面我们来看下给出的参数解释:

in_channels (int) - 输入图像中的通道数

out_channels (int) – 卷积产生的通道数即输出图片的通道数

kernel_size (int or tuple) – 卷积核的大小(可以是个数,也可以是元组)

stride (int or tuple, optional) -- 卷积的步幅。 默认值:1

padding (int, tuple or str, optional) – 填充添加到输入的所有四个边。 默认值:0

padding_mode (string, optional) –填充的几个选择 'zeros', 'reflect', 'replicate' 或 'circular'。 默认值:“零”

dilation (int or tuple, optional) – 内核元素之间的间距。 默认值:1

groups (int, optional) – 从输入通道到输出通道的阻塞连接数。 默认值:1

bias (bool, optional) -- 如果为真,则为输出添加可学习的偏差。 默认值:真

其中,标红的参数使用的较多。

shape:

在搭建神经网络中,我们可以根据已知数据来推算出其他的。

二、实例操作

1.理解参数之间的关系

Conv2d中常用的参数有in_channels, out_channels, kernel_size, stride, padding,学习之前可以先了解一些参数之间的关系。

可以进行简单的理解:

当in_channels = 1,out_channels = 1时,表示输入的图像数量是1, 输出的数量也是1,这时有一个卷积核。
 
而当in_channels = 1,out_channels = 2时,表示输入的图像数量是1, 输出的数量也是2,这时有两个卷积核,这两个卷积核可能一样,也可能不一样。

2.实例练习

练习代码如下:

import torchvision
import torch
from torch import nn
from torch.utils.data import  DataLoader
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms
from torch.nn import Conv2d

#使用CIFAR10数据集
dataset_conv = torchvision.datasets.CIFAR10("./dataset", train=False, transform=transforms.ToTensor(), download=True)

#将数据集放入dataloader中,让它进行加载
dataloder = DataLoader(dataset=dataset_conv, batch_size=64, shuffle=True, num_workers=0, drop_last=False)

class Test(nn.Module):  #创建一个Test类,继承nn.Module
    def __init__(self):
        super(Test, self).__init__()    #完成父类的初始化
        self.conc1 = Conv2d(in_channels=3, out_channels=6, kernel_size=3, stride=1, padding=0)                                        #在Test这个网络写入个卷积层

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

#初始化这个网络并输出
test = Test()
print(test)

#写入tensorboard中
writer = SummaryWriter("logs")
step = 0
for data in dataloder:
     imgs, target = data
     output = test(imgs)    #输出的数据是经过神经网络处理的数据

#查看数据类型代码
     # print(imgs.shape)
     # print(output.shape)
     #torch.Size([64, 3, 32, 32])

writer.add_images("conv2d", imgs, global_step=step)     #因为不是一张图片,所以使用images

#torch.Size([64, 6, 30, 30]) ——>[xx, 3, 30, 30] 因为彩色图片是3channals的,但是我们输出是6channals,,它识别不出来所以会报错
     output = torch.reshape(output, (-1, 3, 30, 30))

#使用reshape来变换通道,因为batch我们不知道,直接输入-1,它会根据后面内容,自动推导出来(这个方法有点取巧,供学习理解)

writer.add_images("output", output, step)
     step = step + 1

writer.close()

神经网络——Conv2d的使用相关推荐

  1. 吴恩达深度学习 4.1 卷积神经网络-卷积神经网络基础

    1. 知识点 计算机视觉:图片分类.目标检测.图片风格迁移等 对于小尺寸图片,可以用深度神经网络模型学习预测.但对于大尺寸图片,输入数据规模大,用深度神经网络会有非常多的参数需要学习,不再合适. 卷积 ...

  2. python批量读取文件夹的图片并处理成模型输入格式

    我们知道在训练图像模型时,需要从文件夹里读取图片. 这里演示下,怎样从文件夹里批量读取图片,并处理成我们想要的 x,y 即特征和标签. 输入维度理解 以卷积神经网络为例子. 我们知道卷积神经网络con ...

  3. 【增减维度】numpy和torch中的squeeze、unsqueeze理解

    文章目录 1 为何要增减维度 2 numpy中的squeeze 函数 3 torch中的squeeze 函数 4 torch中的unsqueeze 函数 1 为何要增减维度 神经网络conv2d的输入 ...

  4. 【强化学习】----训练Flappy Bird小游戏

    文章目录 一.游戏介绍与问题定义 1.1 游戏简介 1.2 问题定义 二.算法介绍 2.1 预处理 2.1.1 去除背景颜色 2.1.2 灰度处理 2.2 Q-Learning 2.3 神经网络 2. ...

  5. 卷积神经网络(conv2d参数含义、卷积层、池化层)

    本文转载自 罗翌新:中科大数学博士,深度学习医学应用专家: 廖星宇:中科大硕士,计算机视觉专家,Face++资深工程师,<深度学习之Pytorch>作者: 的深度学习理论与实战(基于Ten ...

  6. conv2d的输入_神经网络-Conv1D和Conv2D实现

    今天我们对比Conv1D和Conv2D实现文本卷积,提前说明两种方式实现的运算是一样的. 两种实现方式的原理图对比 输入数据的形状对比 Conv1D (batch, steps, channels), ...

  7. 通俗理解tf.nn.conv2d() tf.nn.conv3d( )参数的含义 pytorhc 卷积

    20210609 例如(3,3,(3,7,7))表示的是输入图像的通道数是3,输出图像的通道数是3,(3,7,7)表示过滤器每次处理3帧图像,卷积核的大小是3 x 7 x 7. https://blo ...

  8. NLP进阶之(七)膨胀卷积神经网络

    NLP进阶之(七)膨胀卷积神经网络 1. Dilated Convolutions 膨胀卷积神经网络 1.2 动态理解 1.2.2 转置卷积动画 1.2.3 理解 2. Dilated Convolu ...

  9. Conv1D和Conv2D的区别

    我的答案是,在Conv2D输入通道为1的情况下,二者是没有区别或者说是可以相互转化的.首先,二者调用的最后的代码都是后端代码(以TensorFlow为例,在tensorflow_backend.py里 ...

最新文章

  1. android控件跟随手势滑动改变位置
  2. leetcode_894. All Possible Full Binary Trees
  3. No module named ‘fvcore.nn.distributed‘
  4. 使用windows命令行查看mySQL应用的安装路径
  5. 智能家居落地还有多远?
  6. mysql一次运行多个SQL文件
  7. 记录下准备蓝桥杯的过程吧
  8. CTF题记——取证小集合
  9. 盘点安卓手机被吐槽最多的三大奇葩设计
  10. html扑克牌展开,HTML5 canvas扑克牌花式洗牌动画
  11. Java:每日获取稳定可用免费代理ip(仅供日常使用,请勿用作他途)
  12. java计算机毕业设计BS用户小票系统(附源码、数据库)
  13. myeclipse2017 for Mac 破解版本
  14. php获取某一年的工作日列表
  15. Storm专题一、Storm DRPC 分布式计算
  16. 威纶通触摸屏通过移动图形元件实现动画效果的具体方法
  17. 工信部数字电视标准符合性检测中心发布的
  18. pip,pip安装源
  19. jdk-8u281/jdk-8u301 下载,Linux、Windows、Mac
  20. android打乱数据方法,Android 将list集合数据打乱

热门文章

  1. 从信息传递的角度来看Android中的广播和Binder
  2. x是偶数的c语言表达式,【单选题】能表示x 为偶数的表达式是 A. x%2==0 B. x%2==1 C. x-. x%2!=0...
  3. 计算机桌面锁在哪里设置,怎么设置电脑屏幕锁
  4. Java并发HashSet报错ConcurrentModificationException解决方案
  5. PASCAL VOC 2012数据集介绍
  6. 如何把canvas元素作为网站背景总结详解
  7. 深度学习基础--SOFTMAX回归(单层神经网络)
  8. Error creating document instance
  9. Apriori算法与python实现
  10. 118 以太坊 ethereum hardhat :编译 artifacts