《动手学深度学习》
打着灯笼摸黑
这个作者很懒,什么都没留下…
展开
-
TF2.0的GPU操作
TF2.0的GPU操作原创 2021-10-11 20:00:38 · 443 阅读 · 0 评论 -
深度学习面试题总结
介绍一下经典的五种卷积神经网络(VGG、残差两个是重点,其他的看改进点就好)LeNet:这个神经网络中还有一种模式至今仍然经常用到,就是一个或多个卷积层后面跟着一个池化层,然后又是若干个卷积层再接一个池化层,然后是全连接层,最后是输出,这种排列方式很常用。AlexNet:引入了ReLU和dropout,引入数据增强、池化相互之间有覆盖,三个卷积一个最大池化+三个全连接层.它是浅层神经⽹络和深...原创 2020-04-12 08:59:43 · 869 阅读 · 0 评论 -
《动手学深度学习》---卷积神经网络复习
使用多通道可以拓展卷积层的模型参数。假设将通道维当作特征维,将高和宽维度上的元素当成数据样本,那么1×1卷积层的作用与全连接层等价。1×1卷积层通常用来调整网络层之间的通道数,并控制模型复杂度。一方面,ReLU激活函数的计算更简单,例如它并没有sigmoid激活函数中的求幂运算。另一方面,ReLU激活函数在不同的参数初始化方法下使模型更容易训练。这是由于当sigmoid激活函数输出极接近...原创 2019-10-16 19:52:48 · 1808 阅读 · 0 评论 -
《动手学深度学习》----深度学习基础复习
交叉熵只关心对正确类别的预测概率,因为只要其值足够大,就可以确保分类结果正确,而平方损失则过于严格,例如y(i)1=y(i)2=0比y(i)1=0,y(i)2=0.4的损失要小很多,虽然两者都有同样正确的分类预测结果。正则化通过为模型损失函数添加惩罚项使学出的模型参数值较小,是应对过拟合的常用手段。权重衰减是在模型原损失函数基础上添加L2范数惩罚项,从而训练所需要最小化的函数。通常会使学到...原创 2019-10-16 19:46:41 · 250 阅读 · 0 评论 -
《动手学深度学习》第五天之多层感知器
学习多层感知器原创 2019-07-21 11:31:14 · 236 阅读 · 0 评论 -
《动手学深度学习》第六天之模型选择,欠拟合和过拟合
(一)训练误差和泛化误差训练误差(training error):模型在训练数据集上表现出的误差泛化误差(generalization error):模型在任意一个测试数据样本上表现出的误差的期望,并常常通过测试数据集上的误差来近似。一般情况下,由训练数据集学到的模型参数会使模型在训练数据集上的表现优于或等于在测试数据集上的表现。由于无法从训练误差估计泛化误差,一味地降低训练误差并不意味着泛...原创 2019-07-24 16:15:56 · 385 阅读 · 0 评论 -
《动手学深度学习》第七天之权重衰减(L2范数正则化)
为了应对过拟合问题的常用方法:权重衰减法(weight decay)(一)方法权重衰减等价于L2范数正则化(regularization)例如在“线性回归”一节中的线性损失函数加入L2惩罚项后的新损失函数为:权重的迭代方式更改为:L2范数正则化令权重w1和w2先自乘小于1的数,再减去不含惩罚项的梯度。因此,L2范数正则化又叫权重衰减。(二)高维线性回归实验使用线性回归函数来生...原创 2019-07-25 09:47:32 · 1453 阅读 · 0 评论 -
《动手学深度学习》第八天--丢弃法
深度学习模型常常使用丢弃法(dropout) 来应对过拟合问题,本节中提到的丢弃法特指倒置丢弃法(inverted dropout)。(一)方法由于丢弃法在训练中隐藏层神经元的丢弃是随机的,输出层的计算无法过度依赖隐藏单元中的任一个,从而可以用来应对过拟合。(二)从零开始实现下面的dropout函数将以drop_prob的概率丢弃NDArray输入X中的元素。mxnet.ndarray....原创 2019-07-25 14:12:42 · 321 阅读 · 0 评论 -
《动手学深度学习》第九天---正向传播,反向传播和计算图
详见《动手学深度学习》(一)正向传播(forward propagation)正向传播是指对神经网络沿着从输入层到输出层的顺序,依次计算并存储模型的中间变量(包括输出)。Frobenius 范数,简称F-范数,是一种矩阵范数,记为||·||F。矩阵A的Frobenius范数定义为矩阵A各项元素的绝对值平方的总和。矩阵的F范数和向量的L2范数类似。得到正向传播的目标函数:J = L + s...原创 2019-07-28 13:25:53 · 349 阅读 · 0 评论 -
《动手学深度学习》第四天之softmax回归
第三章第五节–图像分类数据集首先学习第三章第五节–图像分类数据集主要解释一下对于函数的定义(一)定义 get_fashion_mnist_labels(labels) 函数来将数值标签转成相应的文本标签:将用的到的衣服类别定义在一个数组里面,通过将数组下表和数组内容对应进行转换。(二)定义 show_fashion_mnist(images, labels) 函数在一行里画出多张图像和对...原创 2019-07-21 08:44:28 · 431 阅读 · 0 评论 -
《动手学深度学习》第三天
今天学习深度学习基础第三节–线性回归的简洁实现主要是通过Gluon中的一些模块来更简洁的实现模型。(一)Gluon提供了Data包来读取数据:①mxnet.gluon.data.ArrayDataset(*args)组合多个类似数据集的对象的数据集,例如数据集、列表、数组等。②mxnet.gluon.data.DataLoader(dataset, batch_size=None, sh...原创 2019-07-14 15:37:14 · 166 阅读 · 0 评论 -
《动手学深度学习》第二天
今天学习深度学习基础。第一节讲述的是线性回归。之前看论文的时候就见过损失函数这个名词,这一次真正了解了它的定义,在优化算法中,注意到解析解和数值解两种,其中数值解的优化算法,常用的是小批量随机梯度下降,这也是在读论文的过程中,遇到过的。第二节是讲线性回归从零开始。对这一节的部分地方做一下笔记。(一)首先在生成数据集的操作中,mxnet.ndarray.random.normal(loc=0...原创 2019-07-13 17:04:59 · 2182 阅读 · 2 评论 -
《动手学深度学习》第一天
之前按照要求安装了jupyter notebook,好不容易安装成功,但是在使用Python3进行数据操作时,提示计算机丢失cublas64_80.dll,在很多地方找相关解决办法都没有成功。后来发现我在更新了按照课程中“计算机上有NVIDIA显卡并安装了CUDA,建议使用GPU版的MXNet”,安装了GPU版MXNet,但是我的电脑使用的是AMD的显卡,我也没有安装CUDA。最后选择了重装,重装...原创 2019-07-10 16:30:53 · 305 阅读 · 0 评论 -
《动手学深度学习》第三十天---梯度下降和随机梯度下降
(一)一维梯度下降首先看一段代码:%matplotlib inlineimport d2lzh as d2limport mathfrom mxnet import ndimport numpy as npdef gd(eta): x = 10 results = [x] for i in range(10): x -= eta * 2 * ...原创 2019-08-25 18:04:25 · 294 阅读 · 0 评论 -
《动手学深度学习》第三十一天---小批量随机梯度下降
小批量随机梯度下降:在更新每一参数时都使用一部分样本来进行更新。为了克服上面两种方法的缺点,又同时兼顾两种方法的优点。小批量随机梯度下降随机均匀采样一个由训练数据样本索引组成的小批量βt。我们可以通过重复采样(sampling with replacement)或者不重复采样(sampling without replacement)得到一个小批量中的各个样本。可以使用下列公式来计算时间步t的小...原创 2019-08-28 17:14:07 · 580 阅读 · 0 评论 -
《动手学深度学习》第三十二天---动量法
在梯度下降中可能存在的问题是,学习率过大,会导致不收敛。回顾一下我们使用近似的前提是:找到一个常数η(学习率)>0,使得|原创 2019-09-02 23:06:38 · 323 阅读 · 0 评论 -
《动手学深度学习》第三十三天---AdaGrad算法,RMSProp算法,AdaDelta算法,Adam算法
回顾一下之前的优化算法:在动量法中,我们用到指数加权移动平均来使得自变量的更新方向更加一致,从而降低发散的问题。(一)AdaGrad算法AdaGrad算法会使用一个小批量随机梯度gt按元素平方的累加变量st。在时间步0,AdaGrad将s0中每个元素初始化为0。在时间步t,首先将小批量随机梯度gt按元素平方后累加到变量st:其中⊙是按元素相乘如果目标函数有关自变量中某个元素的偏导...原创 2019-09-06 23:18:04 · 642 阅读 · 0 评论 -
《动手学深度学习》第十天---模型构造
(一)继承Block类来构造模型Block类是nn模块里提供的一个模型构造类,我们可以继承它来定义我们想要的模型。下面继承Block类构造本节开头提到的多层感知机。这里定义的MLP类重载了Block类的__init__函数和forward函数。它们分别用于创建模型参数和定义前向计算。前向计算也即正向传播。 from mxnet import nd from mxnet.gluon i...原创 2019-07-30 13:43:46 · 827 阅读 · 0 评论 -
《动手学深度学习》第十一天--模型参数的访问,初始化和共享
首先导入需要的模型,使用Sequential类构造神经网络,并对模型进行定义:from mxnet import init, ndfrom mxnet.gluon import nnnet = nn.Sequential()net.add(nn.Dense(256, activation='relu'))#单隐藏层net.add(nn.Dense(10))net.initialize...原创 2019-08-02 22:34:03 · 925 阅读 · 0 评论 -
《动手学深度学习》第十二天---二维卷积层
最近在学着看别人写的代码,对于卷积的过程不是很理解,刚好深度学习课程学到了。(一)二维互相关运算(cross-correlation)卷积层中常用的算法是二维互相关运算如阴影部分过程大概是:0×0+1×1+3×2+4×3=19,其他同。from mxnet import autograd, ndfrom mxnet.gluon import nndef corr2d(X, K):...原创 2019-08-05 11:56:05 · 646 阅读 · 0 评论 -
《动手学深度学习》第二十九天---优化和深度学习
局部最小值(local minimum):对于目标函数f(x),f(x)在x上的值比在x邻近的其他点的值更小。全局最小值(global minimum):f(x)在x上的值是目标函数在整个定义域上的最小值。import d2lzh as d2lfrom mpl_toolkits import mplot3dimport numpy as npdef f(x): return ...原创 2019-08-23 22:45:54 · 410 阅读 · 0 评论 -
《动手学深度学习》第二十八天---图像增广(数据增强)
大部分的计算机视觉任务使用很多的数据,所以数据扩充是经常使用的一种技巧来提高计算机视觉系统的表现。(一)常用的图像增强方法预备知识:def set_figsize(figsize=(3.5, 2.5)): """Set matplotlib figure size.""" use_svg_display() plt.rcParams['figure.figsize']...原创 2019-08-22 18:24:41 · 1366 阅读 · 1 评论 -
《动手学深度学习》第二十六天---循环神经网络的从零开始实现
(一)one-hot向量mxnet.ndarray.one_hot(indices=None, depth=_Null, on_value=_Null, off_value=_Null, dtype=_Null, out=None, name=None, **kwargs)返回一个one-hot向量,由索引表示的位置取值为on_value,而所有其他位置取值为off_value。具有形状(i...原创 2019-08-18 18:21:12 · 735 阅读 · 0 评论 -
《动手学深度学习》第二十五天---语言数据集
(一)读取数据集预备知识:①zipfile是python中用来做zip格式编码的压缩和解压缩的。zipfile中有两个重要的class,分别是ZipFile和ZipInfo。ZipFile是用来创建和读取zip文件,而ZipInfo是存储的zip文件的每个文件的信息。class zipfile.ZipFile(file, mode='r', compression=ZIP_STORED, a...原创 2019-08-13 15:22:17 · 1129 阅读 · 0 评论 -
《动手学深度学习》第二十四天---语言模型,循环神经网络
(一)语言模型给定一个长度为T的词的序列w1,w2,…,wT,语言模型将计算该序列概率:P(w1,w2,…,wT)。语言模型(language model)可用于提升语音识别和机器翻译的性能,根据序列的概率选择输出的序列。例如,一段含有4个词的文本序列的概率其中,P(w1)可以计算为w1在训练数据集中的词频(词出现的次数)与训练数据集的总词数之比。P(w2∣w1)可以计算为w1,w2两词相...原创 2019-08-12 16:18:00 · 333 阅读 · 0 评论 -
《动手学深度学习》第二十三天---稠密连接网络(DenseNet)
DenseNet作为另一种拥有较深层数的卷积神经网络,具有如下优点:(1) 相比ResNet拥有更少的参数数量.(2) 旁路加强了特征(feature)的重用.(3) 网络更易于训练,并具有一定的正则效果.(4) 缓解了gradient vanishing(梯度消失)和model degradation(模型退化)的问题梯度消失问题在网络深度越深的时候越容易出现,原因就是输入信息和梯度信...原创 2019-08-12 13:29:27 · 3335 阅读 · 0 评论 -
《动手学深度学习》第二十二天---残差网络(ResNet)
(一)ResNet提出背景更深的网络可以进行更加复杂的特征模式的提取,从而理论上更深的网络可以得到更好的结果。但是通过简单的叠加层的方式来增加网络深度,可能引来梯度消失/梯度爆炸的问题,目前**batch normalization等方法可以解决梯度消失和梯度爆炸的问题。**但是使用了各种normalization的方法也不能是深层网络的效果好于浅层网络。理论上,若A为浅层网络,B为深层网...原创 2019-08-11 20:40:20 · 1437 阅读 · 0 评论 -
《动手学深度学习》第二十一天---含并行连结的网络(GoogLeNet)
(一)GoogLeNet简介在2014年的ImageNet图像识别挑战赛中,一个名叫GoogLeNet的网络结构大放异彩。该模型并不是单纯的将网络加深,而是通过引入Inception的概念。通过多个卷积提取图像不同尺度的信息,最后进行融合,从而更好的表征图像。(二)Inception结构Inception 结构的主要思路是怎样用密集成分来近似最优的局部稀疏结构。它的贡献主要有两个:一是使用...原创 2019-08-10 18:44:43 · 644 阅读 · 0 评论 -
《动手学深度学习》第二十天---网络中的网络(NiN)
首先让我们了解一下NiN网络的特点:① 1×1卷积的使用使用mlpconv网络层替代传统的convolution层。mlp层实际上是卷积加传统的mlp(多层感知器),因为convolution是线性的,而mlp是非线性的,后者能够得到更高的抽象,泛化能力更强。在跨通道(cross channel,cross feature map)情况下,mlpconv等价于卷积层+1×1卷积层,所以此时ml...原创 2019-08-10 10:26:19 · 369 阅读 · 0 评论 -
《动手学深度学习》第十九天---使用重复元素的网络(VGG)
卷积神经网络由卷积核来提取特征,通过池化层对显著特征进行提取,经过多次的堆叠,得到比较高级的特征,最后可以用分类器来分类。这是CNN的一个大概流程,其具体实现的结构是丰富多样的,但总的思想是统一的。VGG提出了可以通过重复使用简单的基础块来构建深度模型的思路。VGG还指出了卷积神经网络的深度增加和小卷积核的使用对网络的最终分类识别效果有很大的作用。VGG块的组成规律是:连续使用数个相同的填充...原创 2019-08-08 19:21:09 · 585 阅读 · 0 评论 -
《动手学深度学习》第十八天---深度卷积神经网络(AlexNet)
AlexNet包含8层变换,其中有5层卷积和2层全连接隐藏层,以及1个全连接输出层。AlexNet中层的设计(网图):AlexNet 把sigmoid激活函数改成了简单的ReLU函数:①sigmoid函数求幂运算比较复杂,而ReLU函数运算很简单②ReLU激活函数在不同的参数初始化方法下使模型更容易训练如上图所示,当sigmoid激活函数输出极接近0或1时,这些区域的梯度几乎为0...原创 2019-08-08 10:27:54 · 811 阅读 · 0 评论 -
《动手学深度学习》第十七天---批量归一化
由于在看论文的时候设涉及批量归一化的知识,所以决定提前学这一节。批量归一化(batch normalization)的提出是为了解决对深层神经网络,即使输入数据已做标准化,训练中模型参数的更新依然很容易造成靠近输出层输出的剧烈变化的问题。(一)批量归一化层对全连接层进行批量归一化操作:我们将批量归一化层置于全连接层中的仿射变换和激活函数之间。也就是说,对于全连接层的输入u,先进行 x=W...原创 2019-08-06 17:43:49 · 1407 阅读 · 1 评论 -
《动手学深度学习》第十六天---卷积神经网络(LeNet)
卷积层的优势:一方面,卷积层保留输入形状,使图像的像素在高和宽两个方向上的相关性均可能被有效识别;另一方面,卷积层通过滑动窗口将同一卷积核与不同位置的输入重复计算,从而避免参数尺寸过大。(一)LeNet模型LeNet分为卷积层和全连接层两部分。卷积层块里的基本单位是卷积层后接最大池化层:卷积层用来识别图像里的空间模式,如线条和物体局部,之后的最大池化层则用来降低卷积层对位置的敏感性。卷积层...原创 2019-08-06 11:46:58 · 796 阅读 · 0 评论 -
《动手学深度学习》第十五天---池化层
在“二维卷积层”一节里介绍的图像物体边缘检测应用中,我们构造卷积核从而精确地找到了像素变化的位置。为了解决卷积层对图像的过度敏感,比如连拍情况下像素的偏移问题,我们提出了池化(pooling)层。池化层直接计算池化窗口内元素的最大值或者平均值,该运算也分别叫做最大池化或平均池化。最大池化,可以提取最明显的特征。平均池化呢,就是顾及每一个像素,所以选择将所有的像素值都相加然后再平均。如下图所示...原创 2019-08-05 22:32:09 · 374 阅读 · 0 评论 -
《动手学深度学习》第十四天---多输入通道和多输出通道
之前我们用到的输入和输出都是二维数组,但真实数据的维度经常更高。比如彩色图像就有(RGB)三个通道。(一)多输入通道下图数两个输入通道的卷积过程:过程大概就是在每个通道上卷积核与输入进行互相关运算后,把得到的输出数组相加,这样得到的输出数组其实是只有一个通道的。通道数继续增加过程类似。代码过程:import d2lzh as d2lfrom mxnet import nddef...原创 2019-08-05 19:08:55 · 2686 阅读 · 0 评论 -
《动手学深度学习》第十三天---填充和步幅
在阅读代码的时候就看到了padding和stride两个单词,来深度学习课程详细了解一下他们的作用。填充和步幅是卷积层的两个超参数,通过他们可以改变输出形状。(一)填充padding填充是指在输入的四周添加0元素。比如原输入数组形状是Nh×Nw,卷积核形状是Kh×Kw,那么原输出数组形状就是(Nh-Kh+1)×(Nw-Kw+1)。如果我们对输入数组进行填充高加Ph,宽加Pw,那么新的输出...原创 2019-08-05 14:28:43 · 782 阅读 · 0 评论 -
《动手学深度学习》第二十七天---循环神经网络的简洁实现
(一)定义模型Gluon的rnn模块提供了循环神经网络的实现。下面构造一个含单隐藏层、隐藏单元个数为256的循环神经网络层rnn_layer,并对权重做初始化。首先回顾一下循环神经网络从零开始的模型过程:首先利用init_rnn_state函数来返回初始化的隐藏状态,一个形状为(批量大小,隐藏单元个数)的值为0的NDArray组成的元组。然后通过to_onehot函数把(批量大小,...原创 2019-08-20 13:42:25 · 593 阅读 · 0 评论