深度学习与计算机视觉(PB-13)—ImageNet数据集准备
前面几节内容中,我们都是对小数据集(相对于工业界而言)进行实验,使用CPU环境也可以完美地实现。接下来,我们将使用ImageNet数据集进行实验,该数据集比较大,需要在GPU环境下进行。在对ImageNet数据进行建模之前,我们首先来认识下ImageNet数据集以及对该数据集进行预处理。
ImageNet数据集介绍
ImageNet是一个计算机视觉系统识别项目,是目前世界上图像识别最大的数据库。是美国斯坦福的计算机科学家,模拟人类的识别系统建立的。能够从图片中识别物体。ImageNet是一个非常有前景的研究项目,未来用在机器人身上,就可以直接辨认物品和人了。超过1400万的图像URL被ImageNet手动注释,以指示图片中的对象;在至少一百万张图像中,还提供了边界框。ImageNet包含2万多个类别; 一个典型的类别,如“气球”或“草莓”,每个类包含数百张图像。
下载地址
ImageNet数据集可以直接从该地址中下载,当然你可以根据对应的任务选择相应的数据集下载即可。
备注:我花了好几天将官网的数据下载完,速度比较慢,如果你们有需要的,可以留言,我上传到百度网盘,分享给你们(很容易被 ...
一文揭秘!自底向上构建知识图谱全过程
知识图谱的构建技术主要有自顶向下和自底向上两种。其中自顶向下构建是指借助百科类网站等结构化数据源,从高质量数据中提取本体和模式信息,加入到知识库里。而自底向上构建,则是借助一定的技术手段,从公开采集的数据中提取出资源模式,选择其中置信度较高的信息,加入到知识库中。
知识图谱,是结构化的语义知识库,用于迅速描述物理世界中的概念及其相互关系,通过将数据粒度从document级别降到data级别,聚合大量知识,从而实现知识的快速响应和推理。
当下知识图谱已在工业领域得到了广泛应用,如搜索领域的Google搜索、百度搜索,社交领域的领英经济图谱,企业信息领域的天眼查企业图谱等。
在知识图谱技术发展初期,多数参与企业和科研机构主要采用自顶向下的方式构建基础知识库,如Freebase。随着自动知识抽取与加工技术的不断成熟,当前的知识图谱大多采用自底向上的方式构建,如Google的Knowledge Vault和微软的Satori知识库。
定义
俗话说:“看人先看脸。”在我们深入了解知识图谱之前,让我们先来看一下它长什么样子!
如图所示,你可以看到,如果两个节点之间存在关系,他们就会被一条无向 ...
深度学习与计算机视觉(PB-12)-ResNet
在上一章中,我们讨论了GoogLeNet网络结构和Inception模块,这节中,我们将讨论由一个新的微结构模块组成的网络结构,即由residual微结构组成的网络结构——ResNet。
ResNet网络由residual模块串联而成,在原论文中,我们发现作者训练的ResNet网络深度达到了先前认为不可能的深度。在2014年,我们认为VGG16和VGG19网络结构已经非常深了。然而,通过ResNet网络结构,我们发现可以成功在ImageNet数据集上训练超过100层的网络和在CIFAR-10数据集上训练超过1000层的网络。
从论文《Identity Mappings in Deep Residual Networks》中,可知只有使用更高级的权值初始化算法(如Xavier等)以及identity mapping(恒等映射)才能实现这些深度,我们将在本章后面讨论相关内容。我们知道CNN能够提取low/mid/high-level的特征,网络的层数越多,意味着能够提取到不同level的特征越丰富。并且,越深的网络提取的特征越抽象,越具有语义信息。非常深的ResNet网络在ILSVRC ...
深度学习与计算机视觉(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( ...








