【动手学习pytorch笔记】9.卷积神经网络基础(卷积层,填充和步长,多输入输出通道,池化层)

卷积网络(conv)中步长、填充、卷积核大小与输入输出大小的关系 目录 1、stride =1 1)没有padding :o = (i - k) + 1 2)有padding 半填充:输入输出一样大 o = i(卷积核是基数) 全填充 :o = i + (k - 1) 2、stride ≠1: o = [( i + 2p-k) / s] + 1 1)没有padding 2)有padding 3、统一的公式:o = [( i + 2p- k) / s] + 1 在设计深度学习网络的时候,需要计算输入尺寸和输出尺寸,那么就要设计卷积层的的各种参数... 阅读详情

卷积层

二维互相关运算

import torch
from torch import nn
from d2l import torch as d2l

def corr2d(X, K):
    """计算二维互相关运算"""
    h, w = K.shape
    Y = torch.zeros((X.shape[0] - h + 1, X.shape[1] - w + 1))
    for i in range(Y.shape[0]):
        for j in range(Y.shape[1]):
            Y[i, j] = (X[i : i + h, j : j + w] * K).sum()        
    return Y

测试一下

X = torch.tensor([[0.0,1.0,2.0],
                  [3.0,4.0,5.0],
                  [6.0,7.0,8.0]])
K = torch.tensor([[0.0,1.0],
                  [2.0,3.0]])
corr2d(X, K)

输出

tensor([[19., 25.],
        [37., 43.]])

卷积类

class Conv2D(nn.Module):
    def __init__(self, kernel_size):
        super().__init__()
        self.weight = nn.Parameter(torch.rand(kernel_size))
        self.bias = nn.Parameter(torch.zeros(1))
    
    def forward(self, x):
        return corr2d(x, self.weight) + self.bias

把中间的变成0,看起来像图片边界

X = torch.ones((6, 8))
X[:, 2:6] = 0
X
tensor([[1., 1., 0., 0., 0., 0., 1., 1.],
        [1., 1., 0., 0., 0., 0., 1., 1.],
        [1., 1., 0., 0., 0., 0., 1., 1.],
        [1., 1., 0., 0., 0., 0., 1., 1.],
        [1., 1., 0., 0., 0., 0., 1., 1.],
        [1., 1., 0., 0., 0., 0., 1., 1.]])

一个1*2的卷积核

K = torch.tensor([[1.0, -1.0]])

输出结果

Y = corr2d(X, K)
Y

输出

tensor([[ 0.,  1.,  0.,  0.,  0., -1.,  0.],
        [ 0.,  1.,  0.,  0.,  0., -1.,  0.],
        [ 0.,  1.,  0.,  0.,  0., -1.,  0.],
        [ 0.,  1.,  0.,  0.,  0., -1.,  0.],
        [ 0.,  1.,  0.,  0.,  0., -1.,  0.],
        [ 0.,  1.,  0.,  0.,  0., -1.,  0.]])

把X转置一下再试试

corr2d(X.t(), K)

输出

tensor([[0., 0., 0., 0., 0.],
        [0., 0., 0., 0., 0.],
        [0., 0., 0., 0., 0.],
        [0., 0., 0., 0., 0.],
        [0., 0., 0., 0., 0.],
        [0., 0., 0., 0., 0.],
        [0., 0., 0., 0., 0.],
        [0., 0., 0., 0., 0.]])

可见这个卷积核智能判定垂直边界

手动写一个卷积过程

conv2d = nn.Conv2d(1, 1, kernel_size=(1, 2), bias= False)

X = X.reshape((1, 1, 6, 8))
Y = Y.reshape((1, 1, 6, 7))

for i in range(10):
    Y_hat = conv2d(X)
    l = (Y_hat - Y ) ** 2
    conv2d.zero_grad()
    l.sum().backward()
    conv2d.weight.data[:] -= 3e-2 * conv2d.weight.grad
    if(i + 1) % 2 == 0:
        print(f'batch{i + 1}, loss {l.sum():.3f}')

nn.Conv2d(输入通道数,输出通道数,卷积核大小,偏移量)

X.reshape成一个四维变量(通道数,批量大小数,6, 8)

Y也一样

迭代10次学习卷积核参数

conv2d.weight.grad梯度

batch2, loss 5.869
batch4, loss 1.119
batch6, loss 0.243
batch8, loss 0.063
batch10, loss 0.020

看看学习到的参数

conv2d.weight.data.reshape((1, 2))

输出

tensor([[ 0.9751, -1.0009]])

可以看到10代之后和标准的[1.0, -1.0]很接近了

填充和步长

无步长

输出大小 = 输入 - 卷积核 + 填充 + 1

有步长

输出大小 = (输入 - 卷积核 + 填充 - 步长)/步长

import torch
from torch import nn

def comp_conv2d(conv2d, X):
    X = X.reshape((1, 1) + X.shape)
    Y = conv2d(X)
    
    return Y.reshape(Y.shape[2:])

conv2d = nn.Conv2d(1, 1, kernel_size = 3, padding = 1)
X = torch .rand(size = (8, 8))
comp_conv2d(conv2d, X).shape

X.reshape((1, 1) + X.shape)是加上通道数和小批次数[1 , 1]

Y.shape[2:]再把前两个维度通道数和小批次数[1 , 1]去掉

输出

torch.Size([8, 8])

8 - 3 + 2 + 1 = 8

例1

conv2d = nn.Conv2d(1, 1, kernel_size=(5, 3), padding=(2, 1))
comp_conv2d(conv2d, X).shape

输出

torch.Size([8, 8])

8 - 5 + 4 + 1 = 8

8 - 3 + 2 + 1 = 8

例2

conv2d = nn.Conv2d(1, 1, kernel_size=3, padding=1, stride = 2)
comp_conv2d(conv2d, X).shape

输出

torch.Size([4, 4])

(8 - 3 + 2 + 2) / 2 = 4.5 向下取整

例3

conv2d = nn.Conv2d(1, 1, kernel_size=(3, 4), padding=(0, 1), stride=(3, 4))
comp_conv2d(conv2d, X).shape

输出

torch.Size([2, 2])

(8 - 3 + 3) / 3向下取整 = 2

(8 - 4 + 2 + 4) / 4向下取整 = 2

多输入输出通道

多输入

在这里插入图片描述

import torch
from d2l import torch as d2l

def corr2d_multi_in(X, K):
    return sum(d2l.corr2d(x, k) for x, k in zip(X, K))
X = torch.tensor([[[0.0, 1.0, 2.0],
                   [3.0, 4.0, 5.0],
                   [6.0, 7.0, 8.0]],
                  
                  [[1.0, 2.0, 3.0],
                   [4.0, 5.0, 6.0],
                   [7.0, 8.0, 9.0]]])

K = torch.tensor([[[0.0, 1.0],
                   [2.0, 3.0]],
                  
                  [[1.0, 2.0],
                   [3.0, 4.0]]])

corr2d_multi_in(X, K)

X(2 * 3 * 3)

K(2 * 2 * 2)

tensor([[ 56.,  72.],
        [104., 120.]])

多输出

在这里插入图片描述

有Co组卷积核,Co个通道输出

def corr2d_multi_in_out(X, K):
    # 迭代“K”的第0个维度,每次都对输入“X”执行互相关运算。
    # 最后将所有结果都叠加在一起
    return torch.stack([corr2d_multi_in(X, k) for k in K], 0)

K = torch.stack((K, K+1, K+2), 0)
K.shape
torch.Size([3, 2, 2, 2])
K
tensor([[[[0., 1.],
          [2., 3.]],

         [[1., 2.],
          [3., 4.]]],


        [[[1., 2.],
          [3., 4.]],

         [[2., 3.],
          [4., 5.]]],
   

        [[[2., 3.],
          [4., 5.]],

         [[3., 4.],
          [5., 6.]]]])
corr2d_multi_in_out(X, K)
tensor([[[ 56.,  72.],
         [104., 120.]],

        [[ 76., 100.],
         [148., 172.]],

        [[ 96., 128.],
         [192., 224.]]])

1 * 1 卷积层

def corr2d_multi_in_out_1x1(X, K):
    c_i, h, w = X.shape
    c_o = K.shape[0]
    X = X.reshape((c_i, h * w))
    K = K.reshape((c_o, c_i))
    # 全连接层中的矩阵乘法
    Y = torch.matmul(K, X)
    return Y.reshape((c_o, h, w))

X = torch.normal(0, 1, (3, 3, 3))
K = torch.normal(0, 1, (2, 3, 1, 1))

Y1 = corr2d_multi_in_out_1x1(X, K)
Y2 = corr2d_multi_in_out(X, K)
assert float(torch.abs(Y1 - Y2).sum()) < 1e-6

相当于全连接层

池化层

缓解卷积层对位置的敏感性,同样有窗口大小,填充,步长,但不用学习参数,且对每个通道单独作用,输入通道是几输出就是几。

import torch
from torch import nn
from d2l import torch as d2l

def pool2d(X, pool_size, mode='max'):
    p_h, p_w = pool_size
    Y = torch.zeros((X.shape[0] - p_h + 1, X.shape[1] - p_w + 1))
    for i in range(Y.shape[0]):
        for j in range(Y.shape[1]):
            if mode == 'max':
                Y[i, j] = X[i: i + p_h, j: j + p_w].max()
            elif mode == 'avg':
                Y[i, j] = X[i: i + p_h, j: j + p_w].mean()
    return Y

和卷积层的互相关运算差不多

X = torch.tensor([[0.0, 1.0, 2.0], [3.0, 4.0, 5.0], [6.0, 7.0, 8.0]])
pool2d(X, (2, 2))

输出

tensor([[4., 5.],
        [7., 8.]])
pool2d(X, (2, 2), 'avg')

输出

tensor([[2., 3.],
        [5., 6.]])

填充和步幅

X = torch.arange(16, dtype=torch.float32).reshape((1, 1, 4, 4))
X

看看X

tensor([[[[ 0.,  1.,  2.,  3.],
          [ 4.,  5.,  6.,  7.],
          [ 8.,  9., 10., 11.],
          [12., 13., 14., 15.]]]])
pool2d = nn.MaxPool2d(3)
pool2d(X)

默认情况下,深度学习框架中的步幅与汇聚窗口的大小相同。 因此,如果我们使用形状为(3, 3)的汇聚窗口,那么默认情况下,我们得到的步幅形状为(3, 3)。

pool2d = nn.MaxPool2d(3, padding=1, stride=2)
pool2d(X)

也可手动调整

tensor([[[[ 5.,  7.],
          [13., 15.]]]])
pool2d = nn.MaxPool2d((2, 3), stride=(2, 3), padding=(0, 1))
pool2d(X)
tensor([[[[ 5.,  7.],
          [13., 15.]]]])

多通道输入

X = torch.cat((X, X + 1), 1)
X

这里用cat不是stack是因为stack会新增加一个轴在新轴上拼接,但上面 X 已经 reshape((1, 1, 4, 4))所以用cat在现有的通道数所在轴进行拼接

tensor([[[[ 0.,  1.,  2.,  3.],
          [ 4.,  5.,  6.,  7.],
          [ 8.,  9., 10., 11.],
          [12., 13., 14., 15.]],

         [[ 1.,  2.,  3.,  4.],
          [ 5.,  6.,  7.,  8.],
          [ 9., 10., 11., 12.],
          [13., 14., 15., 16.]]]])
pool2d = nn.MaxPool2d(3, padding=1, stride=2)
pool2d(X)

输出

tensor([[[[ 5.,  7.],
          [13., 15.]],

         [[ 6.,  8.],
          [14., 16.]]]])

可以看到通道数输入的时候是2,输出的时候还是2

使用PyTorch搭建CNN神经网络 使用pytorch搭建CNN神经网络卷积运算的基本原理单层卷积运算valid convolutionsame convolutionCNN的基本结构数据输入层卷积层池化层全连接层数据导入的实现构建基础的CNN网络网络的设计损失函数和优化器训练函数和测试函数实现CNN网络的训练和测试Googlenet的实现网络框架Resnet的实现网络框架 卷积运算的基本原理 单层卷积运算 valid convolution 所谓卷积运算就是一个卷积核[也称为过滤器]对指定大小的矩阵进行卷积的过程,具体运算方式如下图所示: 阅读详情

相关推荐

CNN基础教学+Pytorch代码实现

1、卷积神经网络和传统神经网络的区别 1.1、传统神将网络(nn) 传统神经网络(NN),是目前各种神经网络的基础,其构造是仿造生物神经网络,将神经元看成一个逻辑单元,其功能是用于对函数进行估计和近似,是一种自适应系统,通俗的讲就是具备学习能力。 其作用,目前为止就了解到分类。其目的就是在圈和叉之间画出一条分界线,使得接下来我们可以根据其位置来预测其属于哪个分类。这个图只有两种分类,实际上可以有非常多种,但其网络结构也会变得复杂,可以说一层网络可以画一条线,多层网络就可...

qq_56688614的博客 3723

【深度学习实验】卷积神经网络(三):自定义二维卷积层:步长、填充、输入输出通道

本实验实现了二维卷积神经网络卷积层设置步长、填充、输入输出通道等功能。

天地玄黄 魑魅魍魉 风花雪月 商角徵羽 1684

YOLO学习(三)卷积神经网络CNN

CNN,即(Convolutional Neural Network),是一种深度学习模型,它在、视频分析和等领域表现出色。CNN通过使用卷积层来,然后通过池化层(Pooling Layer)来,最后通过全连接层(Fully Connected Layer)进行分类或回归任务。经典的神经网络结构包含三个层次的神经网络。分别以及。其中每层的圆圈代表一个神经元,隐藏层和输出层的神经元有输入的数据计算后输出,输入层的神经元只是输入。每个连接都有个权值同一层神经元之间没有连接最后的输出结果对应的层也称之为。

qq_41145642的博客 1830

(pytorch-深度学习系列)pytorch卷积层与池化层输出的尺寸的计算公式详解

pytorch卷积层与池化层输出的尺寸的计算公式详解 要设计卷积神经网络的结构,必须匹配层与层之间的输入与输出的尺寸,这就需要较好的计算输出尺寸 卷积后,池化后尺寸计算公式: (图像尺寸-卷积核尺寸)/步长+1 (图像尺寸-池化窗尺寸)/步长+1 例Conv2d: ` ...

我亦是行人 1万+

PyTorch实战:卷积神经网络详解+Python实现卷积神经网络Cifar10彩色图片分类

PyTorch可以说是三大主流框架中最适合初学者学习的了,相较于其他主流框架,PyTorch的简单易用性使其成为初学者们的首选。这样我想要强调的一点是,框架可以类比为编程语言,仅为我们实现项目效果的工具,也就是我们造车使用的轮子,我们重点需要的是理解如何使用Torch去实现功能而不要过度在意轮子是要怎么做出来的,那样会牵扯我们太多学习时间。以后就出一系列专门细解深度学习框架的文章,但是那是较后期我们对深度学习的理论知识和实践操作都比较熟悉才好开始学习,现阶段我们最需要的是学会如何使用这些工具。

master_hunter的博客 8935

玩转肺癌目标检测数据集Lung-PET-CT-Dx ——①从TCIA获取影像数据集

该目标检测公共数据集源自 The Cancer Imaging Archive(TCIA),是肿瘤研究方面的著名的医学影像公开数据库。 数据以 DICOM 格式存储,由肺癌受试者的 CT 和 PET-CT DICOM 图像组成。

takedachia的博客 1万+

pytorch的nn.Conv2d()参数及尺寸计算详解(与Tensorflow.nn.Conv2d相比)

参数详解 in_channels, #输入数据的通道数(如彩色图片,一般为3) out_channels, #输出数据的通道数(就是我想让输出多少通道,就设置为多少) kernel_size, #卷积核的尺寸(如(3,2),3与(3,3)等同) stride = 1, #卷积步长,就是卷积操作时每次移动的格子数 padding = 0, #原图周围需要填充的格子行(列)数,无填充的话卷积到边缘会直接忽略该边缘 dilation = 1, #空洞卷积的空洞指数,一般默认为1即可 groups = 1, #分

weixin_44414948的博客 1万+

界面上下固定_基于ANSYS的胶粘结构界面开裂有限元计算

引言:目前工程上主要有螺栓,过盈,焊接和胶粘四种常用的连接方式,本文基于ANSYS Workbench环境,引入内聚力模型来实现对胶粘结构界面开裂失效的计算,文中的界面失效参数为随意给定,不是工程实际测试数据,仅起到演示作用!1.问题的描述如图所示给出了胶粘结构的三维模型,该胶粘结构由上下钢板组成,中间通过胶粘接到一起。(胶不需要建模,其影响主要通过内聚力模型实现)上下板的材料为结构钢,...

weixin_29473667的博客 1万+

PyTorch学习笔记(6)--神经网络:卷积层

PyTorch学习笔记(6)–神经网络:卷积层     本博文是PyTorch的学习笔记,第6次内容记录,主要介绍神经网络卷积层的基本使用。 目录PyTorch学习笔记(6)--神经网络:卷积层1.卷积操作是什么2.卷积层2.1卷积层相关参数2.2卷积层应用实例3.学习小结 1.卷积操作是什么     关于具体什么是卷积操作,不是本文要讲的重点,但是本文的后续操作都是建立在卷积操作之上的,因此在学习卷积层的相关知识之前,很有必要弄清楚什么是卷积操作,这里推荐大家参照一下PyTorch官网中相关页面的动态图片

weixin_43981621的博客 1498

Qt思岚激光雷达

Qt关于思岚激光雷达研究示例,本示例采用qt界面开发,可以串口也可以tcp进行设备连接。接收数据进行相关的数据进行绘图, 这种雷达可以用于大屏触摸场景,会场互动触摸场景开发。 #ifndef MAINWIDGET_H #define MAINWIDGET_H #include <QTimer> #include <QWidget> #include "lidarmgr.h" namespace Ui { class MainWidget; } class MainWidget.

cqltbe131421的博客 1598

CLAHE 算法学习 matlab

概念可参考: CLAHE (Contrast Limited Adaptive Histogram Equalization)算法学习CLAHE具体实现主要包括6个步骤。1):分块。将输入图像划分为大小相等的不重叠子块,每个子块含有的像素数为M。参考示例为8×8块。 2):计算子块直方图。 3):计算剪切阈值clipLimit 4):像素点重分配。对每个子块,使用步骤三中多余的像素重新分配。 5):直方图均衡。 6):像素点灰度值重构。(源码中采用了双线性插值) http://www.realtimer

baidu_34971492的博客 4253

【Python · PyTorch】卷积神经网络 CNN(基础概念)

本文介绍卷积神经网络的基础概念,为博主自用笔记提纲。

茶色喵的博客 6011

出现 Transaction rolled back because it has been marked as rollback-only 解决方法

出现 Transaction rolled back because it has been marked as rollback-only 解决方法

码农研究僧的博客 1万+

【深度学习基础】详解Pytorch搭建CNN卷积神经网络LeNet-5实现手写数字识别

本文相熟了卷积神经网络CNN的原理,并介绍了如何使用PyTorch框架搭建卷积神经网络模型CNN。实现了LeNet-5的模型的搭建、模型训练、测试、网络的复用、直观查看数据集的图片预测结果等,完成了机器学习领域的Hello world——手写数字识别。

Bossfrank的博客 1万+

把 SAP 输出稳稳落到 PDF:从 SPAD 前端打印到 ABAP 程序级转换的一套方法

摘要:本文介绍了三种在SAP系统中将报表输出转为PDF文件的方法。路线A通过SPAD配置前端输出设备,结合Windows打印机设置实现用户交互式PDF保存;路线B在SP01事务码中将已有Spool请求另存为PDF,适用于补救导出;路线C通过ABAP程序自动转换Spool为PDF,适合批量处理。文章详细说明了配置步骤,并针对常见问题(如乱码、文件格式错误等)提供了排查思路。三种方案分别适用于不同场景,用户可根据实际需求选择最合适的PDF导出方式。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 221

华为OD机试 - 第k个排列 - 全排列递归(Python/JS/C/C++ 2025 C卷 100分)

给定参数n,从1到n会有n个整数:1,2,3,…,n,这n个数字共有n!按大小顺序升序列出所有排列的情况,并一一标记当n=3时,所有排列如下“123”,“132,“213”,“231”,“312”,“321”输入两行,第一行为n,第二行为k,给定n的范围是[1,9],给定k的范围是[1,n!排列为“12”和“21”,第2个是“21”。给定n和k,返回第k个排列。输出排在第k位置的数字。只有一个排列,直接返回。

学Java,找哪吒 984

神经网络:卷积层和池化层

本文主要是对卷积层和池化层做了详细介绍,同时也说明了两者间的联系,并结合相关代码和实例结果帮助读者进一步理解卷积和池化的作用,逐步理清神经网络的结构层次和原理。

悠眠小虫的博客 3040

107.在 Vue 3 中使用 OpenLayers 实现视图联动功能

是一个非常强大的 Web 地图渲染库,支持多种地图数据格式和交互操作。在 Vue 3 中,我们可以利用。绑定到真实的 DOM 元素上,我们就可以用它们来初始化 OpenLayers 地图。来封装和管理 OpenLayers 地图的状态,从而更高效地开发地图应用。,即两个地图窗口共享同一个视图(View),从而实现同步缩放、拖动等操作。这可以确保 Vue 组件销毁时,OpenLayers 也正确销毁地图实例。,并且它们会同步缩放和拖动,达到地图联动的效果。这样,无论你拖动哪个地图,另一个都会同步变化。

小彭的博客 1938

卷积神经网络CNN

从零开始学习卷积神经网络(CNN)!这篇文章带你全面掌握图像分类的核心原理与实战技巧。从图像像素、通道的基础知识,到卷积层、池化层的计算原理,再到PyTorch代码实现,手把手教你搭建CNN模型。通过CIFAR-10数据集,快速上手图像分类任务,从模型训练到测试精度计算,一步到位!无论是初学者还是进阶者,这篇文章都能让你轻松掌握CNN的精髓!

gorgor在码农 2548

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

深度学习笔记——pytorch实现卷积神经网络CNN

B站刘二大人《pytorch深度学习实践》

weixin_45978839的博客 3749

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

【PyTorch】卷积层、池化层与 Dropout 层

二维卷积操作

Esperanto.的博客 2931

深度学习之卷积神经网络CNN

卷积神经网络专门用于处理图像, 视频, 语音等数据的神经网络. 是含有卷积层的神经网络, 卷积层的作用就是用来自动学习, 提取图像的特征.CNN网络主要由三部分构成:卷积层池化层和全连接层卷积层负责提取图像中的局部特征.池化层用来大幅降低参数量级(降维).全连接层类似人工神经网络的部分, 用来输出想要的结果.

m0_74228750的博客 1759

狠补基础-数学+算法角度讲解卷积层,激活函数,池化层,Dropout层,BN层,全链接层

狠补基础-数学+算法角度讲解卷积层,激活函数,池化层,Dropout层,BN层,全链接层 在这篇文章中您将会从数学和算法两个角度去重新温习一下卷积层,激活函数,池化层,Dropout层,BN层,全链接层,为您以后修改架构或者自己调试模型提供便利。 点这里直接跳读狠补基础-数学+算法角度讲解卷积层,激活函数,池化层,Dropout层,BN层,全链接层卷积层激活函数层Sigmoid函数ReLU函数Softmax函数池化层Dropout层BN层全连接层 卷积层 卷积本是分析数学中的一种运算,在深度学习中使用的卷

weixin_47567401的博客 9254

CNN卷积神经网络学习笔记(特征提取)

vgg16总共有16层,13个卷积层和3个全连接层,第一次经过64个卷积核的两次卷积后,采用一次pooling,第二次经过两次128个卷积核卷积后,再采用pooling,再重复两次三个512个卷积核卷积后,再pooling,最后经过三次全连接。1)输入图像尺寸为224x224x3,经64个通道为3的3x3的卷积核,步长为1,padding=same填充,卷积两次,再经ReLU激活,输出的尺寸大小为224x224x64。3)经128个3x3的卷积核,两次卷积,ReLU激活,尺寸变为112x112x128。

sinounuo的博客 1万+

卷积层详解

卷积神经网络卷积层在pycharm中实现并可视化展示

ss20211121的博客 6842

卷积神经网络:卷积层,池化层,全连接层

从池化层到全连接层会进行池化操作,数据会进行多到少的映射,进行降维,也就是为什么上图从20×12×12变成100个神经元了,数据在慢慢减少,说明离输出结果越来越近,从全连接层到输出层会再一次减少数据,变成更加低维的向量,这个向量的维度就是需要输出的类别数。如图:这是整个LeNET5的网络可视化模型,蓝色的那个是32x32的,经过卷积,得到了下一层,也就是黄色的那一层,你可以看到,黄色的那一层是一个立方体,我们可以把他展开看看。卷积层有很多卷积核,通过做越来越多的卷积,提取到的图像特征会越来越抽象。

JineD的博客 3883
上一篇: 【动手学习pytorch笔记】8.GPU相关
下一篇: 【动手学习pytorch笔记】10.卷积神经网络LeNet分类fashion_mnist
YMK_0
博客等级 码龄10年 78粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值