深度学习与计算机视觉(PB-05)-网络微调
在第3节中,我们学习了如何将预训练好的卷积神经网络作为特征提取器。通过加载预训练好的模型,可以提取指定层的输出作为特征向量,并将特征向量保存到磁盘。有了特征向量之后,我们就可以在特征向量上训练传统的机器学习算法(比如在第3节中我们使用的逻辑回归模型)。当然对于特征向量,我们也可以使用手工提取特征方法,比如SIFT[15],HOG[14],LBPs[16]等。
一般来说,在计算机视觉任务中,深度学习相关的迁移学习主要有两种类型:
1.将网络当作特征提取器。
2.删除现有网络的全连接层,添加新的FC层,并微调这些权重识别新的类别数据。
第3节中,介绍了第一种方法。下面我们介绍另一种类型的迁移学习,如果有足够的数据,它实际上可以超越特征提取方法,这种方法称为微调,即我们利用新的数据对网络权重进行微调。首先,我们对预训练好的卷积神经网络(如VGG,ResNet或Inception等,一般是在大型数据集上训练得到的)的最后一组全连接层做截断处理(即删除网络中的top层),然后,我们用一组新的全连接层与截断的已训练好的模型进行拼接,组成一个新的完整模型,并随机初始化权重[注意:这里的初始化权 ...
常用的机器学习算法衡量指标
你可能在你的机器学习研究或项目中使用分类精度、均方误差这些方法衡量模型的性能。当然,在进行实验的时候,一种或两种衡量指标并不能说明一个模型的好坏,因此我们需要了解常用的几种机器学习算法衡量指标。本文整理介绍了最常用的机器学习算法衡量指标:分类精度、对数损失、混淆矩阵、曲线下面积、F1分数、平均绝对误差、均方误差…。相信阅读之后你能对这些指标有系统的理解。(后续会不断的增加)
评估机器学习算法是项目的一个重要部分。你的模型可能在用一个指标来评论时能得到令人满意的结果,但用其他指标(如对数损失或其他指标)进行评估时,可能会给出较差的结果。大多数时候,我们使用分类的准确性来衡量我们的模型的性能,然而这还不足真正判断我们的模型。在这篇文章中,我们将介绍可用的不同类型的评估指标。
1. 常见的衡量指标
1.1 分类精度
1.2 对数损失
1.3 混淆矩阵
1.4 曲线下面积(AUC))
1.5 F1分数
1.6 平均绝对误差
1.7 均方误差
1.8 均方根误差
1.9 Gini系数
1.10 KS指标
1.1分类精度
当我们使用`准确性`这个术语时,指的就是分类精度。它是正确预测数与样本 ...
深度学习与计算机视觉(PB-04)-rank-N准确度
在我们深入讨论高级深度学习主题(如迁移学习)之前,先来了解下rank-1、rank-5和rank-N准确度的概念。当你在阅读深度学习相关文献时,尤其是关于计算机视觉和图像分类,你很可能会看到关于rank-N 准确度。例如,几乎所有在ImageNet数据集上验证的机器学习方法的论文都给出了rank-1和rank-5准确度 (我们将在本章后面解释为什么需要使用rank-1和rank-5准确度).
rank-N准确度指标与传统的评估指标有何不同呢?在本节中,我们将讨论rank-N准确度内容以及如何实现它。最后将其应用于在Flower-17和CALTECH-101数据集上。
rank-N准确度
通过一个例子来解释rank-N准确度概念。假设我们正在评估一个训练在CIFAR-10数据集上的神经网络模型,CIFAR-10数据集包括10个类:飞机,汽车,鸟、猫、鹿、狗、青蛙、马、船和卡车。给定一张输入图像(如图4.1左)
图4.1 左:青蛙, 右:汽车
模型返回的结果是表4.1左的类标签概率信息。
![](https://lonepatient-1257945978.cos.ap-chengdu ...
对深度可分离卷积、分组卷积、扩张卷积、转置卷积(反卷积)的理解
本问主要介绍几种不同类型的卷积。
1. 深度可分离卷积(depthwise separable convolution)
在可分离卷积(separable convolution)中,通常将卷积操作拆分成多个步骤。而在神经网络中通常使用的就是深度可分离卷积(depthwise separable convolution)。
举个例子,假设有一个3×3大小的卷积层,其输入通道为16、输出通道为32。
那么一般的操作就是用32个3×3的卷积核来分别同输入数据卷积,这样每个卷积核需要3×3×16个参数,得到的输出是只有一个通道的数据。之所以会得到一通道的数据,是因为刚开始3×3×16的卷积核的每个通道会在输入数据的每个对应通道上做卷积,然后叠加每一个通道对应位置的值,使之变成了单通道,那么32个卷积核一共需要(3×3×16)×32 =4068个参数。
1.1 标准卷积与深度可分离卷积的不同
用一张来解释深度可分离卷积,如下:
可以看到每一个通道用一个filter卷积之后得到对应一个通道的输出,然后再进行信息的融合。而以往标准的卷积过程可以用下面的图来表示:
如下动图所示:
1.2 ...
深度学习与计算机视觉(PB-03)-特征提取
从这节开始,我们将讨论关于迁移学习的内容,即用预先训练好的模型(往往是在大型数据上训练得到的)对新的数据进行学习.
首先,从传统的机器学习场景出发,即考虑两个分类任务:
第一个任务是训练一个卷积神经网络来识别图像中的狗和猫。
第二个任务是训练一个卷积神经网络识别三种不同的熊,即灰熊、北极熊和大熊猫。
正常情况下,当我们使用机器学习、神经网络和深度学习等进行实践时,我们会将这两个任务视为两个独立的问题。首先,我们将收集足够多的带有标记的狗和猫的数据集,然后在该数据集上训练一个模型。一般而言,对于不同的数据,都是不断地重复这个过程,即在第二个任务中,收集足够多的带有标记的熊品种的数据集,然后在该数据集上训练一个模型。
上面两个任务中,我们独立地对每一个任务收集数据,训练模型,两个任务之间是相互独立的。而迁移学习却是另外一种不同的训练模式——假如我们加载现有预先训练好的模型,并将其作为新分类任务的训练拟合过程开始点?比如上面两个任务,首先,我们在猫和狗的数据集上训练一个卷积神经网络。然后,我们使用从猫和狗数据集中训练得到的卷积神经网络去区分熊的种类,注意的是:训练模型的数据并没 ...
Gradient Boosting Machine(GBM)调参方法详解
如果一直以来你只把GBM当作黑匣子,只知调用却不明就里,是时候来打开这个黑匣子一探究竟了!
这篇文章是受Owen Zhang (DataRobot的首席产品官,在Kaggle比赛中位列第三)在NYC Data Science Academy里提到的方法启发而成。他当时的演讲大约有2小时,我在这里取其精华,总结一下主要内容。
不像bagging算法只能改善模型高方差(high variance)情况,Boosting算法对同时控制偏差(bias)和方差都有非常好的效果,而且更加高效。如果你需要同时处理模型中的方差和偏差,认真理解这篇文章一定会对你大有帮助,因为我不仅会用Python阐明GBM算法,更重要的是会介绍如何对GBM调参,而恰当的参数往往能令结果大不相同。
特别鸣谢: 非常感谢Sudalai Rajkumar对我的大力帮助,他在AV Rank中位列第二。如果没有他的指导就不会有这篇文章了。
1.目录
Boosing是怎么工作的?
理解GBM模型中的参数
学会调参(附详例)
2.Boosting是如何工作的?
Boosting可以将一系列弱学习因子(weak learners ...
深度学习与计算机视觉(PB-02)-数据增强
在深度学习实践中,当训练数据量少时,可能会出现过拟合问题。根据Goodfellow等人的观点,我们对学习算法的任何修改的目的都是为了减小泛化误差,而不是训练误差。
我们已经在sb[后续补充]中提到了不同类型的正则化手段来防止模型的过拟合,然而,这些都是针对参数的正则化形式,往往要求我们修改loss函数。事实上,还有其他方式防止模型过拟合,比如:
1.修改网络本身架构
2.增加数据
Dropout是通过修改网络本身结构以达到正则化效果的技术。Dropout是指在深度学习网络的训练过程中,对于神经网络单元,按照一定的概率将其暂时从网络中丢弃。注意是暂时,对于随机梯度下降来说,由于是随机丢弃,故而每一个mini-batch都在训练不同的网络。
在这节,我们讨论另外一种防止过拟合方法,叫做数据增强(data augmentation),该方法主要对训练数据集进行一定的变换,改变图片的外观,然后将得到的‘新’图片进行模型训练。使用数据增强技术可以得到更多的数据。
备注:预测时候是不是也可以利用data augmentation,结果使用投票方法得到呢?
数据增强
数据增强主要是运用各种技术 ...
加载预训练词向量模型-python
本文主要是使用python加载预训练的词向量模型,这些模型都是使用大规模的预料训练得到,如word2vec,glove和fasttext。使用预训练的模型可以提高我们的准确性。
简单看看三者之间的区别
Word2Vec
word2vec的主要思想是在根据每个单词的上下文训练一个模型,因此,类似的单词也会有类似的数字表示。
就像一个前馈神经网络(NN),假设你有一组独立的变量和一个你想要预测的目标变量,你首先把你的句子变成单词(tokenize),并根据窗口的大小创建多个词组。所以其中一个组合可以是一对单词,比如(“cat”,“purr”),其中"cat"是独立变量(X),而“purr”是我们想要预测的目标因变量(Y)。
我们通过一个由随机权值初始化的embedding层将“cat”输入到NN中,并将其传递到softmax层,最终目的是预测“purr”。优化方法如SGD将损失函数最小化"(target word | context words)" ,该方法试图将给定上下文单词的目标词的预测损失最小化。如果我们使用足够的epoch的训练,那么em ...
Instacart Market Basket Analysis(2nd place)
这个比赛是要根据顾客的历史购买记录,预测 Instacart 的消费者将再次购买哪种商品,这样可以在顾客需要这个商品的时候,货源是充足的。这种侧重于理解时间行为模式的问题使得这个问题与普通的项目推荐有所不同,在普通项目推荐中,我们通常假设用户的需求和偏好在短时间内相对固定。 对于Netflix来说,他们可以猜想你看了这部电影,你就会想看另一部类似的电影,但如果是你昨天买了杏仁黄油和卫生纸,今天你会不会再买这两样就不好说了.
数据说明:
12345678910111213141. 数据说明 数据共有300 0000orders, 20 0000users, 5000products, 每个user提供有4-100个orders2. 各数据内容了解 aisles:产品摆放位置说明 order_products__prior:订单产品关联表 orders.csv: 用户下单记录表。 products.csv: 产品ID分类,及其摆放位置的关系表 departments.csv: 产品分类表3. 目标分析 目标是预测用户下次购 ...
FM算法-python实现
我仍然记得第一次遇到点击率预测问题时的情形,在那之前,我一直在学习数据科学,对自己取得的进展很满意,在机器学习黑客马拉松活动中也开始建立了自信,并决定好好迎接不同的挑战。
为了做得更好,我购买了一台内存16GB,i7处理器的机器,但是当我看到数据集的时候却感到非常不安,解压缩之后的数据大概有50GB - 我不知道基于这样的数据集要怎样进行点击率预测。幸运地是,Factorization Machines(FM)算法拯救了我。
任何从事点击率预测问题或者推荐系统相关工作的人都会遇到类似的情况。由于数据量巨大,利用有限的计算资源对这些数据集进行预测是很有挑战性的。
然而在大多数情况下,由于很多特征对预测并不重要,所以这些数据集是稀疏的(每个训练样本只有几个变量是非零的)。在数据稀疏的场景下,因子分解有助于从原始数据中提取到重要的潜式或隐式的特征。
因子分解有助于使用低维稠密矩阵来表示目标和预测变量之间的近似关系。在本文中我将讨论算法Factorization Machines(FM) 和Field-Aware Factorization Machines(FFM),然后在回归/分类问题中 ...