卷积神经网络

DataWhale组队打卡学习营task05-3 卷积神经网络进阶

谁说我不能喝 提交于 2020-02-20 06:35:54
深度卷积神经网络(AlexNet) LeNet: 在大的真实数据集上的表现并不尽如⼈意。 1.神经网络计算复杂。 2.还没有⼤量深⼊研究参数初始化和⾮凸优化算法等诸多领域。 机器学习的特征提取:手工定义的特征提取函数 神经网络的特征提取:通过学习得到数据的多级表征,并逐级表⽰越来越抽象的概念或模式。 神经网络发展的限制:数据、硬件 AlexNet 首次证明了学习到的特征可以超越⼿⼯设计的特征,从而⼀举打破计算机视觉研究的前状。 特征: 8层变换,其中有5层卷积和2层全连接隐藏层,以及1个全连接输出层。 将sigmoid激活函数改成了更加简单的ReLU激活函数。 用Dropout来控制全连接层的模型复杂度。 引入数据增强,如翻转、裁剪和颜色变化,从而进一步扩大数据集来缓解过拟合。 #目前GPU算力资源预计17日上线,在此之前本代码只能使用CPU运行。 #考虑到本代码中的模型过大,CPU训练较慢, #我们还将代码上传了一份到 https://www.kaggle.com/boyuai/boyu-d2l-modernconvolutionalnetwork #如希望提前使用gpu运行请至kaggle。 import time import torch from torch import nn , optim import torchvision import numpy as np

5.1 二维卷积层

依然范特西╮ 提交于 2020-02-20 05:40:03
卷积神经网络 (convolutional neural network)是含有卷积层(convolutional layer)的神经网络。本章中介绍的卷积神经网络均使用最常见的二维卷积层。它有高和宽两个空间维度,常用来处理图像数据。本节中,我们将介绍简单形式的二维卷积层的工作原理。 5.1.1 二维互相关运算 虽然卷积层得名于卷积(convolution)运算,但我们通常在卷积层中使用更加直观的 互相关 (cross-correlation)运算。在二维卷积层中,一个二维输入数组和一个二维核(kernel)数组通过互相关运算输出一个二维数组。 我们用一个具体例子来解释二维互相关运算的含义。如图5.1所示,输入是一个高和宽均为3的二维数组。我们将该数组的形状记为 3 × 3 3 \times 3 3 × 3 或(3,3)。核数组的高和宽分别为2。该数组在卷积计算中又称卷积核或过滤器(filter)。卷积核窗口(又称卷积窗口)的形状取决于卷积核的高和宽,即 2 × 2 2 \times 2 2 × 2 。图5.1中的阴影部分为第一个输出元素及其计算所使用的输入和核数组元素: 0 × 0 + 1 × 1 + 3 × 2 + 4 × 3 = 19 0\times0+1\times1+3\times2+4\times3=19 0 × 0 + 1 × 1 + 3 × 2 + 4 × 3 =

5.2 填充和步幅

大城市里の小女人 提交于 2020-02-20 05:10:39
在上一节的例子里,我们使用高和宽为3的输入与高和宽为2的卷积核得到高和宽为2的输出。一般来说,假设输入形状是 n h × n w n_h\times n_w n h ​ × n w ​ ,卷积核窗口形状是 k h × k w k_h\times k_w k h ​ × k w ​ ,那么输出形状将会是 ( n h − k h + 1 ) × ( n w − k w + 1 ) . (n_h-k_h+1) \times (n_w-k_w+1). ( n h ​ − k h ​ + 1 ) × ( n w ​ − k w ​ + 1 ) . 所以卷积层的输出形状由输入形状和卷积核窗口形状决定。本节我们将介绍卷积层的两个超参数,即填充和步幅。它们可以对给定形状的输入和卷积核改变输出形状。 5.2.1 填充 填充 (padding)是指在输入高和宽的两侧填充元素(通常是0元素)。图5.2里我们在原输入高和宽的两侧分别添加了值为0的元素,使得输入高和宽从3变成了5,并导致输出高和宽由2增加到4。图5.2中的阴影部分为第一个输出元素及其计算所使用的输入和核数组元素: 0 × 0 + 0 × 1 + 0 × 2 + 0 × 3 = 0 0\times0+0\times1+0\times2+0\times3=0 0 × 0 + 0 × 1 + 0 × 2 + 0 × 3 = 0 。 一般来说

5.5 卷积神经网络(LeNet)

♀尐吖头ヾ 提交于 2020-02-20 03:10:19
在“多层感知机的从零开始实现”一节里我们构造了一个含单隐藏层的多层感知机模型来对Fashion-MNIST数据集中的图像进行分类。每张图像高和宽均是28像素。我们将图像中的像素逐行展开,得到长度为784的向量,并输入进全连接层中。然而,这种分类方法有一定的 局限性。 图像在同一列邻近的像素在这个向量中可能相距较远。它们构成的模式可能难以被模型识别。 对于大尺寸的输入图像,使用全连接层容易导致模型过大。假设输入是高和宽均为 1 , 000 1,000 1 , 0 0 0 像素的彩色照片(含3个通道)。即使全连接层输出个数仍是256,该层权重参数的形状也是 3 , 000 , 000 × 256 3,000,000\times 256 3 , 0 0 0 , 0 0 0 × 2 5 6 :它占用了大约3 GB的内存或显存。这会带来过于复杂的模型和过高的存储开销。 卷积层尝试解决这两个问题。 卷积层保留输入形状,使图像的像素在高和宽两个方向上的相关性均可能被有效识别; 卷积层通过滑动窗口将同一卷积核与不同位置的输入重复计算,从而避免参数尺寸过大。 卷积神经网络就是含卷积层的网络。本节里我们将介绍一个早期用来识别手写数字图像的卷积神经网络:LeNet。这个名字来源于LeNet(1994)论文的第一作者Yann LeCun

过拟合欠拟合及其解决方案;梯度消失梯度爆炸;循环神经网络进阶;机器翻译及相关技术;注意力机制与Seq2seq模型;Transformer;卷积神经网络基础;leNet;卷积神经网络进阶

久未见 提交于 2020-02-20 02:15:00
1.过拟合欠拟合及其解决方案 一类是模型无法得到较低的训练误差,我们将这一现象称作欠拟合(underfitting)。 模型的训练误差远小于它在测试数据集上的误差,我们称该现象为过拟合(overfitting)。 在实践中,我们要尽可能同时应对欠拟合和过拟合。 2.梯度消失梯度爆炸 深度模型有关数值稳定性的典型问题是消失(vanishing)和爆炸(explosion)。 假设一个层数为 L L L 的多层感知机的第 l l l 层 H ( l ) \boldsymbol{H}^{(l)} H ( l ) 的权重参数为 W ( l ) \boldsymbol{W}^{(l)} W ( l ) ,输出层 H ( L ) \boldsymbol{H}^{(L)} H ( L ) 的权重参数为 W ( L ) \boldsymbol{W}^{(L)} W ( L ) 。为了便于讨论,不考虑偏差参数,且设所有隐藏层的激活函数为恒等映射(identity mapping) ϕ ( x ) = x \phi(x) = x ϕ ( x ) = x 。给定输入 X \boldsymbol{X} X ,多层感知机的第 l l l 层的输出 H ( l ) = X W ( 1 ) W ( 2 ) … W ( l ) \boldsymbol{H}^{(l)} = \boldsymbol{X}

DataWhale组队打卡学习营task05-1 卷积神经网络基础

最后都变了- 提交于 2020-02-20 02:09:07
卷积神经网络基础 二维卷积层 本节介绍的是最常见的二维卷积层,常用于处理图像数据。 二维互相关运算 二维互相关(cross-correlation)运算的输入是一个二维输入数组和一个二维核(kernel)数组,输出也是一个二维数组,其中核数组通常称为卷积核或过滤器(filter)。卷积核的尺寸通常小于输入数组,卷积核在输入数组上滑动,在每个位置上,卷积核与该位置处的输入子数组按元素相乘并求和,得到输出数组中相应位置的元素。图1展示了一个互相关运算的例子,阴影部分分别是输入的第一个计算区域、核数组以及对应的输出。 图1 二维互相关运算 下面我们用corr2d函数实现二维互相关运算,它接受输入数组X与核数组K,并输出数组Y。 import torch import torch . nn as nn def corr2d ( X , K ) : H , W = X . shape h , w = K . shape Y = torch . zeros ( H - h + 1 , W - 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

2020-02-19

孤街醉人 提交于 2020-02-19 23:18:07
卷积神经网络(conv)架构 卷积神经网络在图像分类数据集上有非常突出的表现,由于一般正常的图像信息过大,如果使用全连接神经网络,需要设置大量的权值w和basic值,这样会导致运算效率较低,还容易导致过分拟合的问题。 1.全连接神经网络和卷积神经网络的区别全连接神经网络: 在这里插入图片描述卷积神经网络图: 在这里插入图片描述共同点: 每一个节点都代表一个神经元,没相邻两层之间的节点都有边相;输入输出的流程基本一致。 不同点: 卷积神经网络相邻两层之间只有部分的节点相连,所以一般会将每一层的卷积层组织成一个三维矩阵。卷积神经网络的优点: 在图像处理方面,对于MNIST数据,每一张图片的大小是28281,其中28*28为图片的大小,1表示只有一个彩色通道,并且这里的图像的颜色为黑白。假设第一层隐藏层的节点数位500个,那么一个全连接层的神经网络将有28 * 28 * 500+500=392500个参数。其中**+500 表示的是basic值。而当图片更大的时候,通道数增加的的时候,所需要的参数的数量会更大,会达到百万级,甚至千万级。随着参数的增多,计算速度会随之减慢,还容易导致过度拟合问题。 2.卷积神经网络卷积神经网络构架图:在这里插入图片描述 1.输入层在处理图像的卷积神经网络中,它一般代表了一张图片的像素矩阵。通常为(length * width *channel)。

深度学习(五)————卷积神经网络基础、leNet、卷积神经网络进阶

那年仲夏 提交于 2020-02-19 23:16:35
目录 卷积神经网络基础 二维互相关运算 填充 步幅 多输入通道和多输出通道¶ 卷积层与全连接层的对比 池化 LeNet 模型 深度卷积神经网络(AlexNet) AlexNet 使用重复元素的网络(VGG)¶ ⽹络中的⽹络(NiN) GoogLeNet 卷积神经网络基础 本节我们介绍卷积神经网络的基础概念,主要是卷积层和池化层,并解释填充、步幅、输入通道和输出通道的含义 我们介绍卷积层的两个超参数,即填充和步幅,它们可以对给定形状的输入和卷积核改变输出形状。 二维互相关运算 二维互相关(cross-correlation)运算的输入是一个二维输入数组和一个二维核(kernel)数组,输出也是一个二维数组,其中核数组通常称为卷积核或过滤器(filter)。卷积核的尺寸通常小于输入数组,卷积核在输入数组上滑动,在每个位置上,卷积核与该位置处的输入子数组按元素相乘并求和,得到输出数组中相应位置的元素。图1展示了一个互相关运算的例子,阴影部分分别是输入的第一个计算区域、核数组以及对应的输出。 填充 填充(padding)是指在输入高和宽的两侧填充元素(通常是0元素),图2里我们在原输入高和宽的两侧分别添加了值为0的元素。 步幅 在互相关运算中,卷积核在输入数组上滑动,每次滑动的行数与列数即是步幅(stride)。此前我们使用的步幅都是1,图3展示了在高上步幅为3

Task03、Task04、Task05

夙愿已清 提交于 2020-02-19 22:55:19
本文意在于记录短期学习中同僚总结的知识点,主要学习平台在伯禹https://www.boyuai.com/elites/course/cZu18YmweLv10OeV Task03:过拟合、欠拟合及其解决方案;梯度消失、梯度爆炸;循环神经网络进阶(1天) Task04:机器翻译及相关技术;注意力机制与Seq2seq模型;Transformer(1天) Task05:卷积神经网络基础;leNet;卷积神经网络进阶(1天) Task03:过拟合、欠拟合及其解决方案;梯度消失、梯度爆炸;循环神经网络进阶 1.过拟合、欠拟合及其解决方案 训练误差(training error):训练集上的误差 泛化误差(generalization error):用测试集上的误差代替 数据集划分:训练集(train set)/验证集(validate set)/测试集(test set) 其中训练集用来调整模型参数,验证集用来调整超参数 训练误差和泛化误差:      训练误差 :模型在训练数据集上表现出的误差      泛化误差 : 模型在任意一个测试数据样本上表现出的误差的期望,常常用测试数据集上的误差来近似。      二者的计算都可使用损失函数(平方损失、交叉熵)      机器学习模型应关注降低泛化误差 模型选择:       验证数据集:         训练数据集、测试数据集以外的一部分数据

《动手学深度学习》系列笔记 —— 卷积神经网络基础

萝らか妹 提交于 2020-02-19 17:56:52
1 卷积神经网络基础 1.1 二维卷积层 1.1.1 二维互相关运算 二维互相关(cross-correlation)运算的输入是一个二维输入数组和一个二维核(kernel)数组,输出也是一个二维数组,其中核数组通常称为卷积核或过滤器(filter)。卷积核的尺寸通常小于输入数组,卷积核在输入数组上滑动,在每个位置上,卷积核与该位置处的输入子数组按元素相乘并求和,得到输出数组中相应位置的元素。图1展示了一个互相关运算的例子,阴影部分分别是输入的第一个计算区域、核数组以及对应的输出。 下面我们用 corr2d 函数实现二维互相关运算,它接受输入数组 X 与核数组 K ,并输出数组 Y 。 import torch import torch.nn as nn def corr2d(X, K): H, W = X.shape h, w = K.shape Y = torch.zeros(H - h + 1, W - 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 、核数组 K 来验证二维互相关运算的输出。 X = torch.tensor([[0, 1, 2], [3, 4, 5]