深度学习
文章平均质量分 50
Einstellung
这个作者很懒,什么都没留下…
展开
-
如何在Ubuntu18.04下安装CUDA10.1和cudnn
CUDA10.1的版本比较新了,网上的一些教程不再适用。还有网上的部分介绍过于复杂,这里结合自己实际安装经验。介绍一个我的实现思路。额外说一句gcc的事情,现在的版本gcc到了7.4,安装CUDA10.1的时候,不再需要把gcc版本降低了。安装显卡驱动Ubuntu系统安装好之后,原先自带的显卡驱动不是NVDIA的,需要卸载从新安装。网上有说需要按 ctrl+alt+F1 进入tty,并且关...原创 2019-11-26 16:12:51 · 3507 阅读 · 2 评论 -
Keras方法进行词嵌入
Embedding层实例化from keras.layers import Embeddingembedding_layer = Embedding(1000, 64)我们将词嵌入的办法用于IMDB电影评论情感预测任务学习。对于电影数据集,我们将评论限制为前10000个最常见的单词,然后将评论限制为只有20个单词。对于这10000个单词,网络对每个单词都学习一个8维词嵌入,然后输入的整数...原创 2018-09-28 22:22:22 · 1706 阅读 · 0 评论 -
3.1.3 训练/开发/测试集的问题以及注意事项
训练/开发/测试集划分开发集我们称之为development set,有时候也称之为保留交叉验证集。机器学习的流程是,你尝试很多的思想,然后用训练集训练不同的模型,使用开发集来评估不同的思路,选择一个,之后不断迭代去改善开发集的性能,直到最后你可以得到一个令你满意的成本,之后用测试集去评估。数据集和测试集的划分一个非常非常重要的原则就是一定满足同一分布。如图所示,如果我们要8个不同...原创 2018-04-28 18:14:20 · 605 阅读 · 0 评论 -
3.1.2 单一数字评估指标以及多个不同评估指标
单一数字评估指标我们有什么单一的评估指标呢,这里我们就来介绍一下。查准率(prediction)就是在你的分类器标记为猫的例子中,有多少是真猫的概率。查全率(recall)就是对于所有的真猫图片,你的分类器正确识别出了多少百分比。实际是猫的图片中,有多少被系统识别出来了。但是有两个分析指标并不是很好,如果一个算法查准率高,查全率低或者反过来,那么这个算法是不是好算法呢?因此,我们还引入了F1值这个指原创 2018-04-28 11:38:37 · 1317 阅读 · 0 评论 -
3.1.1 正交化
正交化如图所示,右侧开车的例子,如果你用一个控制变量来控制角度,另外一个控制变量来控制速度,那么你可以很容易的开好这个车。如果你有一个控制变量既可以控制角度,也可以控制速度,虽然也可以开好这个车,但相比而言就困难很多了。正交化意味着这两个控制变量互相垂直,并不彼此干扰。这种设计出来的控制装置是比较好的控制装置。那么这个和机器学习有什么关系?如图所示,对于一个监督学习而言。你...原创 2018-04-27 21:44:13 · 4093 阅读 · 0 评论 -
吴教主深度学习和神经网络课程总纲
第一部分:神经网络和深度学习第一周:深度学习概论第二周:神经网络基础1.2.1 Logistic回归和梯度下降简介1.2.2 Logistic回归和梯度下降计算的数学流程练习:numpy basic1.2.3 使用向量化进行加速计算1.2.4 在Python中使用向量化的技巧和注意事项练习:Logistic Regression第三周:浅层神经网络1.3.1 单隐层网络的数学实现1.3.2 向量化实原创 2018-02-28 21:08:37 · 3629 阅读 · 0 评论 -
3.2.5 端到端的学习
什么是端到端的深度学习深度学习中最令人振奋的最新动态之一就是端到端深度学习的兴起,那么端到端学习到底是什么呢?简而言之,以前有一些数据处理系统或者学习系统,它们需要多个阶段的处理。那么端到端深度学习就是忽略所有这些不同的阶段,用单个神经网络代替它。如图所示,以语音识别为例,传统上,语音识别需要很多阶段的处理。首先你会提取一些特征,一些手工设计的音频特征,在提取出一些低层次特征之后,你可...原创 2018-05-06 11:27:32 · 6181 阅读 · 0 评论 -
3.2.4 迁移学习和多任务学习
迁移学习总结一下,什么时候迁移学习是有意义的?如果你想从任务A学习并迁移一些知识到任务B,那么当任务A和任务B都有同样的输入时,迁移学习是有意义的。在第一个例子中,A和B的输入都是图像,在第二个例子中,两者输入都是音频。当任务A的数据比任务多得多时,迁移学习意义更大。所有这些假设的前提都是,你希望提高任务B的性能,因为任务B每个数据更有价值,对任务A来说通常任务的数据量必须大得多,才有帮助,因...原创 2018-05-06 10:32:08 · 2084 阅读 · 0 评论 -
3.2.3 如何解决数据不匹配问题
在不同的划分上进行训练并测试深度学习,对于数据的要求量很大。但有时候我们难以收集到足够的数据,可能一些其他数据要从其他办法来获得,这样就会容易出现不同数据的分布不同的情况。那么我们应该怎么办呢?假设你在开发一个手机应用,用户会上传他们用手机拍摄的照片,你想识别用户从应用中上传的图片是不是猫。我们真正想要识别的是用户上传的图片。但是关于这些图片我们手头的数据量是不够的。我们也可以从网上下...原创 2018-05-05 15:03:34 · 3843 阅读 · 1 评论 -
3.2.2 快速搭建你的第一个系统所,并进行迭代
快速搭建你的第一个系统所,并进行迭代如果你将机器学习算法应用到新的应用程序里,你的主要目标是弄出能用的系统,你的主要目标并不是发明全新的机器学习算法,这是完全不同的目标,那时你的目标应该是想出某种效果非常好的算法。所以我鼓励你们搭建快速而粗糙的实现,然后用它做偏差/方差分析,用它做错误分析,然后用分析结果确定下一步优先要做的方向。吴教主深度学习和神经网络课程总纲...原创 2018-05-05 10:43:02 · 294 阅读 · 0 评论 -
练习:卷积和池化过程中注意事项
元素化相乘注意的是,我们在使用滤波器进行卷积的时候,是元素化相乘的,所以,要使用*,而不要使用np.multiply卷积切片和池化切片我们基于图像学习来讨论这个问题。对于多维参数输入而言,比如说,我们是A=(4,5,5,3)表示的的有4个输入图像,每个图像是5×5,因为是RGB图像,所以是有3层。对于卷积而言,我们通常是三维卷积,所以,卷积切片代码这样写: for...原创 2018-05-20 17:49:35 · 599 阅读 · 1 评论 -
训练生成对抗网络的过程中,训练gan的地方为什么这里没有detach,怎么保证训练生成器的时候不会改变判别器
detach的作用是冻结梯度下降,无论是对于判别网络还是生成网络而言,我们更新的都是关于logD(G(z)),对于判别网络而言,冻结G并不影响整体的梯度更新(就是内层函数看成是一个常数,不影响外层函数求梯度),但是反过来,如果冻结D,就没有办法完成梯度更新了。所以,我们在训练生成器的时候没用冻结D的梯度。所以,对于生成器而言,我们的确计算了D的梯度,但是我们没有更新D的权重(只写了optimiz...原创 2019-10-11 09:21:09 · 3545 阅读 · 0 评论 -
介绍一种导入文件夹中图片数据集的方法
如果你有一个文件夹,里面有很多图片数据,而label就是图片的名称,图片排列杂乱无章,这时候导入数据可能显得略微棘手,可以用下面方法尝试试试看。这里要使用imutils包,如果没有的话,可以通过pip来安装一下。然后我使用的是Keras的img_to_array来导入数据假设我们想要到导入的17flowers(牛津花卉数据集),我们可以这样写代码:from keras.preprocessi...原创 2019-08-12 22:11:57 · 3573 阅读 · 0 评论 -
sklearn中的fit_transform和transform以及什么时候使用
在使用sklearn对数据进行预处理的时候很有可能会遇到fit_transform和transform,网上不少资料写的模棱两可,在这里我回答几个核心问题,也许看完我写的这篇文章,一些疑惑就会豁然开朗。为什么在训练集进行fit而不在测试集fit机器学习假设,训练集和测试集的每个样本都是从同一分布中抽样得到的。所以在训练集中fit之后在测试集就不能再fit了。要不然二者可能不是同一分布模型,预测...原创 2019-06-29 10:51:36 · 2142 阅读 · 0 评论 -
如何正确使用迁移学习
在使用迁移学习之前,有两点需要特别注意的地方:你的数据的尺寸大小你的数据和预训练好网络结构数据(典型的比如说是ImageNet)的相似程度(未完待续)...原创 2019-06-26 11:42:18 · 3350 阅读 · 1 评论 -
训练最优神经网络
谨防训练数据和实际问题不匹配在谈论改善模型之前,首先一点是要考虑数据问题。在深度学习过程中,很容易出现的一点是,我们训练的数据和实际问题并不匹配。这很糟糕,会导致训练模型效果很好,但实际应用很糟糕的现象。比如说对于下图而言,我们想要识别视频中的具体车辆是什么型号的车辆。右侧是训练数据。训练数据的汽车都是侧面照相的结果,而实际检测的汽车都是正面和后面的。训练的模型在实际应用过程中就会很糟糕。...原创 2019-06-26 11:19:53 · 543 阅读 · 0 评论 -
Keras实现mode.fit和model.fit_generator比较
模型部分模型部分都一样,比如我这里使用AlexNet网络来做。我做的是一个二分类任务,所以结尾部分网络有改动。输入图片尺寸是256*256的,所以输出图片尺寸有一点改动。from keras.models import Sequentialfrom keras.layers import Dense, Dropout, Activation, Flattenfrom keras.layer...原创 2019-04-06 11:49:20 · 4424 阅读 · 2 评论 -
实现对文本的简单one-hot编码
one-hot编码是将标记转换为向量的最常用、最基本方法。下面分别讲讲字符级的one-hot编码和单词级的one-hot编码。单词级的one-hot编码import numpy as npsamples = ['The cat sat on the mat.', 'The dog ate my homework.'] # 初始数据,本例中是一个句子,当然也可以是一篇文章token_i...原创 2018-09-27 11:57:26 · 7743 阅读 · 1 评论 -
3.2.1 造成误差的原因分析
进行误差分析比如说图片识别的机器学习算法,可能会有一些图片被错误的识别了。我们要想提高准确率,可以先去分析一下到底有哪种图片被错误的的识别了。比如说有100张图片被错误的识别了,我们可以对这100张图片进行分类,看哪些图片被错误的识别成了猫哪些图片被错误的识别成了狗。或者是哪些图片,因为比较模糊儿被错误的识别。于是,我们就可以针对这些被错误识别的图片,进行个性化的优化来提高准确率。这是对于...原创 2018-05-04 22:03:53 · 1504 阅读 · 0 评论 -
2.3.3 Softmax回归介绍
Softmax回归到现在我们的分类问题都只能识别0和1的问题,比如说是猫或者不是猫,那么更复杂的问题怎么办呢?Softmax回归就能让你在多分类中识别是哪一个分类,而不只是二分类中识别。如图所示,这里我们用C来表示想要分类的总类别。符合编程习惯,我们第一个数是从0开始的。这里我们的输出层有4个。因为它必须输出四个数,所以这四个数的预测值概率加起来应该等于1.在Softmx网络中...原创 2018-04-26 21:43:26 · 384 阅读 · 0 评论 -
2.1.5 梯度检验
梯度的数值逼近当实施反向传播的时候,有一个测试叫做梯度检验,它的作用是保证反向传播可以正确实施。在写好反向传播公式的时候,你没有办法保证执行反向传播的所有细节全部都是正确的。为了实现逐步梯度检验,我们先来说一下如何对梯度做数值逼近。如图所示,我们只需记住,双边检测误差更低,精度更高。那么为什么是平方误差关系呢,这里用到了泰勒展开式,做差所得,我们先来复习一下泰勒展开式的知识然后这个公式的推导过程如下原创 2018-04-21 23:57:00 · 4990 阅读 · 3 评论 -
2.1.1 正则化基本介绍
训练/开发、测试集最好验证集合测试集来自同一分布。在机器学习中验证集合测试集的含义分别如下:验证集:对学习出来的模型,调整分类器的参数,如在神经网络中选择隐藏单元数。验证集还用来确定网络结构或者控制模型复杂程度的参数。测试集:主要是测试训练好的模型的分辨能力(识别率等)对于深度学习而言,有的时候即使是没有测试集也没有什么关系。测试集的目的是对所选定的网络系统进行无偏估计,如果你...原创 2018-04-16 12:20:58 · 784 阅读 · 0 评论 -
2.1.2 Dropout正则化以及其他正则化
Dropout正则化Dropout介绍除了L2正则化之外,还有一个很重要的正则化方法叫随机失活(Dropout),下面,我们来了解一下。如图所示,假设网络中的每一层的节点都以抛硬币的形式来设置概率,每一个节点得以保留和消除的概率都是0.5。设置完节点之后,我们会删除得分是0分节点,然后删除从该节点进出的连线。最后得到一个节点更少,规模更小的网络。之后我们用反向传播算法进行训...原创 2018-04-16 21:23:00 · 2056 阅读 · 0 评论 -
深层神经网络中的前向传播
深层神经网络那么什么算是深度神经网络呢?如图所示,我们说逻辑回归是一个浅层模型,单隐层神经网络是一个双层神经网络,注意我们数网络层数的时候一定不要把输入层数进去,只是数隐藏层的数量,以及输出层。我们约定,输入层用x=a[0]x=a[0]x=a^{[0]} 表示,输出层,用y^=a[L]y^=a[L]\hat{y} = a^{[L]} 表示。深...原创 2018-03-28 17:24:01 · 785 阅读 · 0 评论 -
1.3.2 向量化实现浅层神经网络
多个数据点中的向量化我们这里讲解一下如何将不同的样本向量化,输出结果和Logistic回归的结果非常类似。如图所示,对于传统的不用向量化的办法来计算多个变量的神经网络我们需要对每个变量进行两次梯度下降算法,然后用for循环来遍历所有的变量。我们希望可以使用向量化的方式进行表示,这样就不用使用for语句了。要实现向量化我们先把训练集x写成矩阵的形式,也就是把小向量x堆叠到矩阵各列,构...原创 2018-03-14 16:22:01 · 571 阅读 · 0 评论 -
1.3.1 单隐层网络的数学实现
神经网络概览如图所示,整个神经网络的概览大致如下,下面我们会讨论这个网络时如何一步步实现的。神经网络表示我们来解释一下这个图中的中间隐藏层是什么含义:在一个神经网络中,当你使用监督学习来训练他的时候,训练集包括输入x和输出y。那么隐藏层的含义就是:在训练集中这些中间节点的真正数值,我们是不知道的。我们只能知道输入和输出的数值,但是在中间节点中的数值我们不知道,于是就称之为隐...原创 2018-03-11 21:43:32 · 991 阅读 · 0 评论 -
1.2.4 在Python中使用向量化的技巧和注意事项
python中的广播如图所示,对于python广播而言,就比如图中的第一个列向量和100相加,这时候100会自动扩充成一个列向量,同样的道理,其他的例子也是类似,横着扩或者竖着扩,总之是要完成相应的运算。此图展示了更一般的规律,对于加减乘除运算,都会有相应的扩充。能横着扩就横着扩,能竖着扩就竖着扩。消除使用numpy中的错误如图所示,尽量我们生成行向量或者列向量的时候不...原创 2018-03-11 10:25:14 · 1320 阅读 · 0 评论 -
1.2.3 使用向量化进行加速计算
向量化向量化通常是消除你代码中显式for循环语句的艺术。那么具体什么是向量化呢? 我们以`z=wTx+bz=wTx+bz=w^Tx+b 为例,在这个例子中,如果有很多的数据,那么w和x以及b都是n维列向量。如所示,左侧是用非向量化的数组来实现的,它的计算效率很慢。而右侧是用了numpy,直接是向量化的去实现,计算效率就快很多。实际上numpy比单纯的用for快很大一部分原因...原创 2018-03-10 21:12:56 · 3673 阅读 · 0 评论 -
3.1.4 如何使深度学习模型达到人类水平以及超高人类水平
为什么是人的表现可避免的偏差理解人的表现吴教主深度学习和神经网络课程总纲原创 2018-04-30 12:19:42 · 509 阅读 · 0 评论 -
3.1.5 改善模型的表现
改善模型的表现这是本周的总结课程吴教主深度学习和神经网络课程总纲原创 2018-04-30 12:38:08 · 351 阅读 · 0 评论 -
1.2.2 Logistic回归和梯度下降计算的数学流程
计算图可以说,一个神经网络的计算都是按照前向或者反向传播过程来实现的,首先计算出神经网络的输出,紧接着一个反向传播的操作。后者,我们用来计算出对应的梯度或者导数。这个流程图解释了为什么用这样的方式来实现。我们举一个更为简单的函数为例,如何计算该函数。具体流程如下:流程图是用蓝色箭头画出来的,从左到右的计算过程。那么红色箭头是从右到左的导数计算过程。计算图的导数计算反向传播算...原创 2018-03-10 12:37:08 · 1511 阅读 · 1 评论 -
2.1.4 对梯度消失和梯度爆炸的近似解决方案
梯度消失与梯度爆炸如图所示对于一个层数比较深的网络,如100层,如果w的参数设置的比1大,最后迭代训练的结果是wlwlw^l,将会是一个非常大的数,反之如果w的参数设置的比1小,经过迭代训练之后结果会变得非常小。这种现象就称之为梯度消失与梯度爆炸,这对于神经网络的深度有很大的挑战。神经网络的权重初始化针对这一个问题,我们有一个不完善的解决办法。但他可以帮助我们更谨慎的为神经...原创 2018-04-21 20:26:01 · 533 阅读 · 0 评论 -
2.3.2 Batch Norm介绍
正则化网络的激活函数Batch归一化会使你的参数搜索变得很容易,使神经网络对超参数选择变得更加稳定。超参数范围会更庞大,工作效率也会更好。也会让你训练出更为深层次的神经网络。下面我们具体介绍一下Batch归一化如图右侧的圈圈所示,我们之前已经学过了通过归一化手段如何将扁平的圈圈变成比较一般的圆形,但是这只是对逻辑回归而言的,对于神经网络应该怎么做呢?我们在归一化的例子中看到了,如果...原创 2018-04-25 18:08:42 · 852 阅读 · 0 评论 -
2.1.3 正则化(归一化)的用处以及何时使用
正则化输入假设我有一个训练集,它有两个输入特征x1和x2,。归一化输入需要两个步骤。第一步是零均值话(subtract mean),经过零均值话处理之后数据就如中间那个图分布的那样。第二步是归一化方差,我们注意到x1的方差要比x2的方差大很多。所以进行如下操作:σ2=1m∑i=1mx2(1)(1)σ2=1m∑i=1mx2\sigma^2 = \frac{1}{m}\sum_{i=...原创 2018-04-21 17:11:33 · 2625 阅读 · 2 评论 -
2.3.1 为超参数选择合适的范围
调试处理对于超参数,如何才能找到一个比较好的设定呢?如图所示,我们可能会需要调试很多的超参数。但其中最重要的超参数还是学习率。被红色圈住的是最重要的超参数,橙色的是次重要的超参数。紫色是再其次重要的。如果想调试一系列的超参数,具体应该怎么做呢?如图所示,我们通常情况下会采用图中右侧所示的情况来选择超参数,比如说二维情况下,我们确定选择范围之后随机选点,然后看看这个超参数效果...原创 2018-04-24 17:38:54 · 1497 阅读 · 1 评论 -
2.2.7 局部最优化问题
局部最优化问题如图左侧所示,似乎存在很多局部最优解。某个算法可能会困在局部最优解里,而不能达到全局最优解。如果通过画图的情况,比如说这种两纬度的情况,就很容易出现许多局部最优解。然而,通过这样的低纬来理解高维是不正确的。事实上如果你要创建一个神经网络,通常梯度为0的点并不是图中局部最优点,而是右图中的鞍点(saddle points),在高维情况,我们通常碰到的是鞍点而不是局部最优点。...原创 2018-04-24 11:20:22 · 2883 阅读 · 0 评论 -
2.2.6 学习率衰减
学习率衰减加快神经网络的另一个办法就是随着时间推移慢慢减少学习率。我们将这个称之为学习率衰减。如图中蓝色线所示,当mini-batch不大的时候,噪声会比较明显。最后不会精确地收敛,而是在最小值附近不断地波动。但是如果我们不断减少学习率,最后情况就如同图中绿线所示,最后会在最小值附近很小的一块区域不断波动,而不会在比较大的区域里。减小学习率的方法如下:我们需要在第一代的时候...原创 2018-04-24 10:52:51 · 964 阅读 · 0 评论 -
2.2.5 Adam优化算法
Adam优化算法Adam算法的全称是Adaptive Moment EstimationAdam算法基本上是momentum算法和RMSprop算法的结合。我们下面介绍一下这个算法算法如图所示,注意图中VcorrecteddwVdwcorrectedV_{dw}^{corrected}表示的是偏差修正。这个算法中有许多的超参数,那么该如何选择超参数呢?如图所示,学习率是...原创 2018-04-24 09:51:07 · 1562 阅读 · 0 评论 -
2.2.4 RMSprop
RMSprop这个算法的全称是root mean square prop.下面我们来谈一下他是如何工作的。如图所示,你想减缓b方向的学习率,然后加速w方向的学习率。这里,所不同的是我们使用Sdw=βSdw+(1−β)dw2Sdw=βSdw+(1−β)dw2S_{dw} = \beta S_{dw}+(1-\beta)dw^2 使用微分平方的加权平均数。另外一个不同是最...原创 2018-04-23 23:01:22 · 812 阅读 · 0 评论 -
2.2.3 动量梯度下降法
动量梯度下降法我们现在介绍一下Momentum梯度下降法,运行速度快于标准的梯度下降法。其基本思想就是计算梯度的指数加权平均数,并利用该梯度来更新权重。如图所示,图中蓝色的代表batch或者mini-batch的梯度下降法,很可能这种梯度下降法的逼近就是以这种形式来逼近的。这种上下波动减慢了梯度下降法的更新速度。使你无法用更大的学习率。如果用更大的学习率可能就如图中紫色线条所示,偏离了...原创 2018-04-23 22:24:51 · 2163 阅读 · 1 评论