
深度学习-李牧
Fronzy
虚心使人进步
展开
-
ResNet和DenseNet
理论上来说,对神经网络添加新的层,充分训练之后应该更能够有效地降低误差。因为原模型解的空间只能是新模型解空间的子空间。也就是说,新模型可能会得出更优的解来拟合训练数据。但是在实践中却不是这样,添加过多的层后训练误差往往不降反升,即使利用批量归一化带来的数值稳定性训练能使训练深层模型更加容易,该问题依然存在。针对这个问题,何凯明等人提出了残差网络(ResNet)。其在2015年的Imag...原创 2019-11-05 20:17:33 · 747 阅读 · 0 评论 -
批量归一化
批量归一化(batch normalization)能够让较深的神经网络训练变得更加容易。首先来复习一下标准化的定义:对数据减去均值之后再除以标准差。标准化处理后的任意一个特征在数据集中所有样本上的均值为0、标准差为1。标准化处理输入数据使得各个特征的分布相近,往往能够训练出更加有效的模型。对于浅层模型来说,对输入数据进行标准化就已经足够了。但是对于深度网络来说,即使对输入数据标准化,...原创 2019-10-23 12:40:57 · 1248 阅读 · 1 评论 -
k折(k-fold)交叉验证
k折交叉验证是用来选择模型设计并调节超参数的。首先,我们先来看一下k折交叉验证的使用背景:我在训练模型的时候,通过已有的数据训练得出一个模型,在这里用于训练的数据称为训练集。当我们把这个模型部署到真实环境去的时候,通过真实的数据得到结果,这个时候这些真实的数据就叫做测试集。那么问题来了,我们在训练模型的时候怎么样评估模型的好坏呢?怎么样调节模型的超参数呢?答:一般我们都是将训练用的...原创 2019-10-20 11:12:15 · 2123 阅读 · 0 评论 -
GoogLeNet
在2014年的ImageNet图像识别挑战赛中,GeogLeNet大放异彩。GeogLeNet在名字上向LeNet致敬,其吸收了NiN中网络串联网络的思想,并在此基础上进行了改进,变成了一个串联与并联都有的网络。Inception块Inception块是GeogLeNet中的基础卷积块,其名字来自于同名电影《盗梦空间》(Inception)。其包括4条并行的线路。用于抽取不同空间尺度下...原创 2019-10-15 19:56:31 · 229 阅读 · 0 评论 -
NiN
NiN——Network in NetworkLeNet、AlexNet和VGG设计上的共同之处是:先由卷积层构成的模块充分抽取空间特征,再以由全连接层构成的模块来输出分类结果。而AlexNet和VGG对LeNet的改进在于如何对这两个模块进行加宽(增加通道数)和加深。而NiN提供了另外一个思路:串联多个卷积层和“全连接”层构成的小网络来构建一个深层网络。这里的全连接层是有引号的,因为...原创 2019-10-13 16:21:10 · 322 阅读 · 0 评论 -
VGG网络
VGG这个名字来源于论文作者所在的实验室Visual Geometry Group。其提出了可以通过重复使用简单的基础块来构建深度模型的思路。VGG块(VGG-block)的结构:1.单层或者多层的卷积层2.单层池化层import d2lzh as d2lfrom mxnet import gluon, init, ndfrom mxnet.gluon import nn...原创 2019-10-12 14:32:09 · 1321 阅读 · 0 评论 -
AlexNet
传统的机器学习,自行设计特征提取函数,对图像的特征进行提取,再以特征作为输入,训练模型。这样导致了使用较干净的数据集和较有效的特征有时甚至比机器学习的模型的选择对分类结果的影响更大。而现在使用的深度学习,则省去了设计特征提取函数这一步骤,图像直接作为输入,训练模型。在训练模型的过程中,卷积层相当于是一个特征提取函数,多层卷积提取的是图像的高维特征,而卷积层的参数也是通过训练学习而来的。这一...原创 2019-10-12 14:07:57 · 268 阅读 · 2 评论 -
LeNet
LeNet名字来源于该论文的第一作者Yann LeCun。该网络是一个简单的卷积神经网络,其通过梯度下降训练卷积神经网络,将手写数字识别的准确性达到了一个突破性的高度。虽然简单,但却是一个奠基性的成果,卷积神经网络此时第一次被推上舞台,为世人所知。从零到一的突破总是最困难的。LeNet模型分成两个部分:卷积层块和全连接层块。1.卷积层块:包含卷积层和最大池化层。卷积层用来识别图像里的空...原创 2019-10-11 14:57:34 · 859 阅读 · 0 评论 -
卷积神经网络中的概念
卷积神经网络(convolutional neural network),顾名思义,就是含有卷积层(convolutional layer)的神经网络。但是卷积神经网络带来不仅仅只有卷积层,填充、步幅,以及池化层的操作,这些都是卷积神经网络基础中的基础。要好好掌握呀(╯▔皿▔)╯掀桌,感觉这些概念学了不止一次了,噗,菜是原罪一、二维卷积层卷积(convolution)运算其实就是将卷积核数...原创 2019-10-10 23:45:30 · 484 阅读 · 0 评论 -
MXNet使用GPU计算
GPU上的存储在MXNet中,mx.cpu()代表所有的物理CPU和内存,而mx.gpu()只代表一块GPU和相应的显存。(cpu对应内存,gpu对应显存)可以通过NDArray的context属性来查看该NDArray所在的设备。x.context我们可以通过多种方法创建NDArray到GPU的显存上。a = nd.array([1,2,3], ctx=mx.gpu())...原创 2019-09-30 20:34:14 · 4175 阅读 · 0 评论 -
MXNet模型参数的存储与读取
1.读写NDArray通过 nd.save(’filename‘,ndType) 和nd.load(’filename‘,ndType) 存储和读取from mxnet import ndfrom mxnet.gluon import nnx = nd.ones(3)nd.save('x', x)x2 = nd.load('x')x2 # 得到的x2是一个二维数组,而x是一...原创 2019-09-28 23:38:16 · 1066 阅读 · 0 评论 -
MXNet自定义层
1.不含模型参数的自定义层from mxnet import gluon, ndfrom mxnet.gluon import nnclass CenteredLayer(nn.Block): # 自定义层 def __init__(self, **kwargs): super(CenteredLayer, self).__init__(**kwargs...原创 2019-09-28 22:10:39 · 377 阅读 · 0 评论 -
MXNet模型参数的延后初始化
模型的延后初始化先看下面这段代码:from mxnet import init, ndfrom mxnet.gluon import nnclass MyInit(init.Initializer): def _init_weight(self, name, data): print('Init', name, data.shape) # 实...原创 2019-09-28 15:23:40 · 498 阅读 · 0 评论 -
MXNet模型参数的访问、初始化和共享
模型参数的访问:# 通过net后面括号内的索引访问哪一层net[0].params, type(net[0].params)# 两种方法得到相应层的信息,一般使用后者,因为前者需要输入层的名称(权重和偏差)net[0].params['dense0_weight'], net[0].weight# 层包括了data和grad,即权重和梯度net[0].weight.data()n...原创 2019-09-28 09:11:01 · 2063 阅读 · 0 评论 -
线性回归(2)从零开始实现
from mxnet import ndfrom time import timea = nd.ones(shape=1000)b = nd.ones(shape=1000)start = time()c = nd.zeros(shape=1000)for i in range(1000): c[i] = a[i]+b[i]time() - startstart =...原创 2019-09-10 23:55:58 · 412 阅读 · 0 评论 -
线性回归(3)线性回归的简洁实现
一个小练习:线性回归的模型:y=x1W1+x2W2+b线性回归可以表示成一个单层的神经网络:输入层个数为2,输出层个数为1,由于输入层并不涉及计算,依照惯例,将输出层作为神经网络层数,故其层数为1使用MXNet框架自带的包可以很容易地实现神经网络。生成数据集:2个特征,1000例的数据集from mxnet import autograd, nd#生成数据集num_inpu...原创 2019-09-12 17:26:36 · 362 阅读 · 0 评论 -
softmax回归和交叉熵损失函数
softmax回归相对于线性回归输出单元从一个变成了多个,适合用来解决分类问题。且引入了softmax运算使得输出更适合离散值的预测和训练。交叉熵损失函数对比平方损失函数其没有那么严格,其只关注对正确类别的预测概率。1.softmax假定有4个特征,3个用于分类的类别,则有如下的12个权重,3个输出:为什么要用softmax?直接用上面的公式得到的的值(值域)大小不...原创 2019-09-15 00:17:09 · 1334 阅读 · 0 评论 -
softmax回归的从零实现
# softmax回归的从零开始%matplotlib inlineimport d2lzh as d2lfrom mxnet import autograd, nd# 定义迭代器batch_size = 256train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size)# 定义输出与输入大小num_input...原创 2019-09-16 11:48:02 · 576 阅读 · 0 评论 -
激活函数
多层感知机在单层神经网络的基础上引入了一到多个隐藏层(hidden layer)。多层感知机的全连接层和隐藏层都是全连接层。激活函数:为什么要引入激活函数?答:多层感知机的全连接层只是对数据做仿射变换(affine transformation),即线性变换,而多个仿射变换的叠加依然是一个仿射变换,也就是说多层神经网络也就相当于一层。解决这个问题的办法就是在全连接层之间引入非线性变换,即激...原创 2019-09-19 23:44:53 · 247 阅读 · 0 评论 -
softmax回归和多层感知机的简洁实现
softmax回归import d2lzh as d2lfrom mxnet import gluon, initfrom mxnet.gluon import loss as gloss, nn# 读取数据集batch_size = 256train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size)# 定义和...原创 2019-09-21 15:28:15 · 442 阅读 · 0 评论 -
模型选择、欠拟合和过拟合
训练误差(training error):模型在训练数据集上表现出的误差。泛化误差(generalization error):模型在任意一个测试数据样本上表现出的误差的期望,常常通过测试数据集上的误差来近似。机器学习模型应该关注泛化误差。模型选择(model selection)1. 验证数据集(validation set):预留一部分在训练数据集和测试数据集以外的数据进行模型...原创 2019-09-22 11:59:45 · 633 阅读 · 0 评论 -
正向传播与反向传播(forward-propagation & back-propagation)
正向传播(forward-propagation):指对神经网络沿着输入层到输出层的顺序,依次计算并存储模型的中间变量。反向传播(back-propagation):沿着从输出层到输入层的顺序,依据链式法则,依次计算并存储目标函数有关神经网络各层的中间变量以及参数的梯度。反向传播是一种计算神经网络参数梯度的方法对于输入或输出X,Y,Z为任意形状张量的函数和通过链式法则,则有:...原创 2019-09-24 22:18:02 · 8485 阅读 · 0 评论 -
数值稳定性和模型初始化
数值稳定性:衰减(vanishing)和爆炸(explosion)假设一个网络的第 层的输出为。此时,如果层数 较大,则可能会出现数值衰减和爆炸。举例:假设输入和所有层的权重参数都是标量,如果权重参数为0.2和5,那么第30层的输出为(衰减)和(爆炸)。类似,当层数较多时,梯度的计算也更容易出现衰减或者爆炸。随机初始化模型参数:为什么神经网络在训练前要随机初始化参数?能...原创 2019-09-24 23:31:23 · 239 阅读 · 0 评论 -
MXNet模型构造
基于Block类的模型构造:回顾一下之前我们是怎么使用MXNet进行模型构造的?from mxnet import ndfrom mxnet.gluon import nnx = nd.random.uniform(shape=(10,10)net = nn.Sequential()net.add(nn.Dense(10, activation='relu')net.init...原创 2019-09-26 22:01:22 · 692 阅读 · 0 评论 -
线性回归(1)基本要素
线性回归模型可以说是机器学习里面第一个学的模型了,理解了这个过程,那么机器学习的一般过程也就很明白了。线性回归的模型如下:架设房价为y,房屋面积为x1,房龄为x2。我们收集一系列的这些数据,用于训练这个模型。一栋房屋被称为一个样本,真实价格y称为标签(label),用来预测的两个因素x1,x2称为特征(feature)预测表达式为:损失函数:用于测量预测值与真实值的误差 ...原创 2019-09-10 00:22:10 · 397 阅读 · 0 评论