深度学习与计算机视觉(PB-11)-GoogLeNet
在本节中,我们将研究Szegedy等人在2014年的论文《Going Deeper With Convolutions》中提出的GoogLeNet架构。这篇论文之所以重要,主要是:
与AlexNet和VGGNet网络结构相比,模型非常小(整个权重文件大小约为28MB)。并且从论文中,我们可以看到作者使用Global Average Pooling代替了全连接层,一方面减小了模型的大小,另一方面加深了整个网络的深度。CNN中的大部分权重都来自于全连接FC层,如果删除FC层,那么模型权重个数会减少很多且可以节省计算的内存消耗。
Szegedy等人在构建整体网络结构时,利用了Network in Network(NIN)结构。在此之前的AlexNet、VGG等结构都是堆叠式神经网络,即其中一个网络层的输出直接输入到另一个网络层。原论文中,作者在搭建网络结构时,多次使用一个微结构——我们即将看到的Inception模块,该模块将输入分割成许多不同的分支,然后再重新连接成一个输出。
具体来说,Inception模块是对输入做了四个分支,分别用不同尺寸的filter进行卷积或者池化, ...
一文读懂如何用LSA、PSLA、LDA和lda2vec进行主题建模
本文是一篇关于主题建模及其相关技术的综述。文中介绍了四种最流行的技术,用于探讨主题建模,它们分别是:LSA、pLSA、LDA,以及最新的、基于深度学习的 lda2vec。
在自然语言理解任务中,我们可以通过一系列的层次来提取含义——从单词、句子、段落,再到文档。在文档层面,理解文本最有效的方式之一就是分析其主题。在文档集合中学习、识别和提取这些主题的过程被称为主题建模。
在本文中,我们将通过 4 种最流行的技术来探讨主题建模,它们分别是:LSA、pLSA、LDA,以及最新的、基于深度学习的 lda2vec。
概述
所有主题模型都基于相同的基本假设:
每个文档包含多个主题;
每个主题包含多个单词。
换句话说,主题模型围绕着以下观点构建:实际上,文档的语义由一些我们所忽视的隐变量或「潜」变量管理。因此,主题建模的目标就是揭示这些潜在变量——也就是主题,正是它们塑造了我们文档和语料库的含义。这篇博文将继续深入不同种类的主题模型,试图建立起读者对不同主题模型如何揭示这些潜在主题的认知。
LSA
潜在语义分析(LSA)是主题建模的基础技术之一。其核心思想是把我们所拥有的文档-术语矩阵分解成 ...
时间序列交叉验证
本文讨论了对时序数据使用传统交叉验证的一些缺陷。具体来说,我们解决了以下问题:
1.在不造成数据泄露的情况下,对时序数据进行分割
2.在独立测试集上使用嵌套交叉验证得到误差的无偏估计
3.对包含多个时序的数据集进行交叉验证
本文主要针对缺乏如何对包含多个时间序列的数据使用交叉验证的在线信息。
本文有助于任何拥有时间序列数据,尤其是多个独立的时间序列数据的人。这些方法是在医疗研究中被设计用于处理来自多个参与人员的医疗时序数据的。
交叉验证
交叉验证(CV)是一项很流行的技术,用于调节超参数,是一种具备鲁棒性的模型性能评价技术。两种最常见的交叉验证方式分别是:
1.k 折交叉验证
2.hold-out 交叉验证
由于文献中术语的不同,本文中我们将明确定义交叉验证步骤:
1.首先,将数据集分割为两个子集:训练集和测试集。如果有需要被调整的参数,我们将训练集分为训练子集和验证集。
2.模型在训练子集上进行训练,在验证集上将误差最小化的参数将最终被选择
3.最后,模型使用所选的参数在整个训练集上进行训练,并且记录测试集上的误差。
图 1: hold-out 交叉验证的例子。数据 ...
TensorFlow学习笔记-使用TFRecord进行数据保存和加载
本篇文章主要介绍如何使用TensorFlow构建自己的图片数据集TFRecord的方法,并使用最新的数据处理Dataset API进行操作。
TFRecord
TFRecord数据文件是一种对任何数据进行存储的二进制文件,能更好的利用内存,在TensorFlow中快速的复制,移动,读取,存储等,只要生成一次TFRecord,之后的数据读取和加工处理的效率都会得到提高。
一般来说,我们使用TensorFlow进行数据读取的方式有以下4种:
(1)预先把所有数据加载进内存
(2)在每轮训练中使用原生Python代码读取一部分数据,然后使用feed_dict输入到计算图
(3)利用Threading和Queues从TFRecord中分批次读取数据
(4)使用Dataset API
(1)方案对于数据量不大的场景来说是足够简单而高效的,但是随着数据量的增长,势必会对有限的内存空间带来极大的压力,还有长时间的数据预加载,甚至导致我们十分熟悉的OutOfMemoryError。
(2)方案可以一定程度上缓解了方案(1)的内存压力问题,但是由于在单线程环境下我们的IO操作一般都是同步阻塞的,势 ...
keras学习笔记—SpatialDropout
SpatialDropout是Tompson等人在图像领域提出的一种dropout方法。普通的dropout会随机地将部分元素置零,而SpatialDropout会随机地将部分区域置零,该dropout方法在图像识别领域实践证明是有效的。
dropout
dropout是怎么操作的?一般来说,对于输入的张量x,dropout就是随机地将部分元素置零,然后对结果做一个尺度变换。比如,我们随机初始化一个5x10的二维矩阵,即;
123456789101112131415161718192021import numpy as npx = np.random.random((4,5))print(x)def Dropout(x,drop_proba): return x * np.random.choice( [0,1], x.shape, p = [drop_proba,1-drop_proba] ) / (1. - drop_proba)print(Dropout(x,0.5))# x[[0.56189429 0.03603615 0 ...
TensorFlow学习笔记——使用Dataset处理数据
以往我们在构建模型并进行训练时,一般都是先建立placeholder,然后使用Seeion中的feed_dict机制将数据feed给模型进行训练或者预测。使用这种方式十分灵活,可以将所有数据读入内存中,然后按照batch进行feed;也可以建立一个generator,然后按照一个batch大小将数据读入。但是这种方式效率较低,难以满足高速计算的需求。Tensorflow开发者也建议停止使用这种方式进行数据交互操作。因此在后续的Tensorflow新版本中,我们看到了Dataset这种高效的数据处理模块。
创建Dataset
在Dataset模块中,每一个数据集代表一个数据来源:数据来源可能来自一个张量,一个文本文件,一个TFRecord文件,或者一个numpy等等。如果训练数据无法全部写入内存中,这时候我们可以使用一个迭代器(iterator)按顺序进行读取。
接下来,我们简单看看不同数据源的读取方式:
from_tensor_slice:该方法接受单个(或多个)Numpy(或张量)对象。如果输入的是多个对象,则需要保证多个对象之间的大小相同。
12345678910111213 ...
TensorFlow 基础
TensorFlow 高效编程。
一、TensorFlow 基础
TensorFlow 和其他数字计算库(如 numpy)之间最明显的区别在于 TensorFlow 中操作的是符号。这是一个强大的功能,这保证了 TensorFlow 可以做很多其他库(例如 numpy)不能完成的事情(例如自动区分)。这可能也是它更复杂的原因。今天我们来一步步探秘 TensorFlow,并为更有效地使用 TensorFlow 提供了一些指导方针和最佳实践。
我们从一个简单的例子开始,我们要乘以两个随机矩阵。首先我们来看一下在 numpy 中如何实现:
12345import numpy as npx = np.random.normal(size=[10, 10])y = np.random.normal(size=[10, 10])z = np.dot(x, y)print(z)
现在我们使用 TensorFlow 中执行完全相同的计算:
1234567import tensorflow as tfx = tf.random_normal([10, 10])y = tf.random_normal( ...
PyTorch中Einsum学习
einsum,这是我开发深度学习模型时最喜欢的函数。这篇文章将从PyTorch角度出发,如何使用torch.einsum进行相关的矩阵计算操作。
einsum符号
如果你很难记住PyTorch\TensorFlow中所有中用于计算点积、外积、转置和矩阵向量或矩阵矩阵乘法的不同函数的名称或者使用方式。那么你就急需要einsum,einsum表示法是以一种优雅的方式来表达所有这些矩阵、向量或者张量的复杂计算操作。基本上使用的是一种特定于域的语言。这样做的好处不仅仅是不需要记忆或定期查找特定的库或者函数。一旦您理解并使用einsum,您将能够更快地编写更简洁、更高效的代码。目前主流深度学习框架中都包含了einsum的实现,比如PyTorch中的torch.einsum和TensorFlow中的tf.einsum。
假设我们要计算两个矩阵A∈RI×K{\color{red}\mathbf{A}} \in \mathbb{R}^{I \times K}A∈RI×K和B∈RK×J{\color{blue}\mathbf{B}}\in\mathbb{R}^{K \times J}B∈RK×J的相乘 ...
用Keras实现libFM
主要来自于kaggle比赛 Talking Data competition on Kaggle,构建一个模型来预测用户在移动端点击广告之后是否会下载应用app,主要数据字段如下:
ip: 点击广告行为的ip地址
app: app id
device: 用户手机的设备类型,比如(iPhone6 plus,iPhone7 等)
os: 用户手机的系统版本号
channel: 移动广告发布的channel id
click_time: 用户点击广告时间
attributed_time: 如果用户在点击广告之后下载了应用程序,则表示用户的下载时间
is_attributed: 预测变量,应用程序是否被下载
这份数据集中,ip,device和os组合一起基本上可以表示一名用户,但是某些情况下,存在一个ip地址被许多用户共享。在这次比赛中,这样的数据会增加问题的复杂性,为了简单化,忽略掉。另外channel数据似乎没啥作用,对其进行删除。赛方提供大约2亿条数据,目标是预测用户是否下载应用程序。
这让人想起推荐系统,它的目标是预测用户是否会购买产品(app就是这里的产品)。
推荐系统中最常用 ...
我们是如何构建定制化TensorFlow预测系统的?
近年来,移动端游戏随着智能手机技术的发展,越来越成为人们娱乐休闲的新模式。据 NewZoo 数据调查研究发现,全球手机端游戏已达到 21 亿玩家规模,呈 14% 同比年增长趋势,其中大部分玩家有在游戏中付费的经历。
对于 SLG 策略类型手机游戏,由于前期用户需要时间了解及熟练游戏操作,即使有付费倾向,一般也会比较滞后。这种滞后为游戏的内部运营,市场投放效果的衡量及优化带来了很大挑战。本文基于一款日活 600 万的明星 SLG 游戏,根据游戏内用户的 500+ 个特征行为,对未付费用户在下载安装后 28 天内是否会转化为付费用户加以预测。
文章尽量避免涉及过多的技术细节,主要从系统架构的角度加以阐述,如何自动化一套机器学习预测系统并与 Google UAC (通用应用广告平台) 相结合,最终提高 7 倍转化率,2.6 倍投资回报率,降低 63% 付费用户获取成本。
数据准备
数据包括两部分, 预测目标 Y 及用户参数 X,其中用户参数 X 又分为状态参数 Xs 和行为参数 Xb。
原始数据符合如下模板:
其中,每行数据为每一位用户每天的行为参数汇总和状态快照。如若用户当天未登录,则 ...