一维卷积在语义理解中的应用,莫斯科物理技术学院(MIPT)开源聊天机器人DeepPavlov解析及代码

莫斯科物理技术学院(MIPT)前不久开源了聊天机器人DeepPavlov(基于TensorFlow和Keras),对于有志学习NLP的同学是个不错的借鉴。其中的语义理解分类模块,不是采用的马尔科夫随机场(CRF)或RNN, 而是使用一维卷积去做语义分类:

来自:https://arxiv.org/pdf/1408.5882.pdf

这一模型是来自纽约大学的论文:Convolutional Neural Networks for Sentence Classification,用一维卷积为句子的语义分类。

值得注意的是,上图模型中,第一层句子的词嵌入输入(embedding)并不是单个通道,而是两个通道的。每个通道用相同的word2vec的embedding方法初始化(表征同一个句子),有意思的是,文章指出,把其中一个通道的词表征静态化(static),而另一个通道的词表征设为可训练的(non-static),这样两个通道组合在一起可以有更好效果。 继续阅读一维卷积在语义理解中的应用,莫斯科物理技术学院(MIPT)开源聊天机器人DeepPavlov解析及代码

你想要的神经网络自动设计,谷歌大脑帮你实现了:用参数共享高效地搜索神经网络架构(ENAS)

所有高级的创造,似乎都有一些“搜索”和“拼凑”的“智能” — David 9

模型自动设计已经不是新鲜事(H2O 的AutoML谷歌的CLOUD AUTOML)。但是,高效的神经网络自动设计还是一个较有挑战性的课题(单纯用CV选模型太耗时间) 。谷歌大脑的这篇新论文就提供了一种高效的搜索方法,称之为:Efficient Neural Architecture Search(ENAS)

对于老版本强化学习的NAS,需要21天搜索出的cnn模型,ENAS只需要3小时就可以搜索出相同准确率的模型:

例子:对于CIFAR-10数据集ENAS搜索出的具有4.23%错误率的模型,只需要3小时左右。 来自:https://arxiv.org/pdf/1802.03268.pdf

作者把这样的效率提高归功于候选子模型的参数共享上(相似子模型可以模仿迁移学习使用已有的权重,而不需要从头训练)。

为简单起见,我们先从生成四个计算节点的RNN循环神经网络进行解释:

来自:https://arxiv.org/pdf/1802.03268.pdf

即使是只有四个计算节点的RNN,也有多种有向无环图(DAG)的生成可能,如上左图,红色的箭头生成的RNN才是我们在右图中看到RNN。 继续阅读你想要的神经网络自动设计,谷歌大脑帮你实现了:用参数共享高效地搜索神经网络架构(ENAS)

tensorboard快速上手,tensorboard可视化普及贴(代码基于tensorflow1.2以上)

有太多小伙伴问David 9关于Tensorboard的入门了,

我们都知道tensorflow训练一般分两步走:第一步构建流图graph,第二步让流图真正“流”起来(即进行流图训练)。

tensorboard会对这两步都进行跟踪,启动这种跟踪你必须先初始化一个tensorflow的log文件writer对象

writer = tf.train.SummaryWriter(logs_path, graph=tf.get_default_graph())

然后启动tensorboard服务:

[root@c031 mnist]# tensorboard --logdir=/tmp/mnist/2
TensorBoard 1.5.1 at http://c031:6006 (Press CTRL+C to quit)

即可看到你定义的流图:

GRAPHS中的每个方框代表tensorflow代码中的scope作用域,比如上图就定义了7个作用域:train,  cross_entropy,  Accuracy,  softmax,  input,  weights,  biases. 每个作用域下都可能有一些Variable或者计算操作的Tensor,可以对方框双击鼠标放大

上图可见,input的scope下有两个placeholder:x-input和y-input. 继续阅读tensorboard快速上手,tensorboard可视化普及贴(代码基于tensorflow1.2以上)

做机器学习,再别把IoU,ROI 和 ROC,AUC 搞混了 !聊聊目标检测,医疗领域的那些评价函数

涉及领域不多的机器学习爱好者经常会把IoU,ROI 和 ROC,AUC 这样的评价函数(Metric functions)搞混。其实记住它们也没那么难,David 9今天就来帮大家理一理:

1. IoU (Intersection over Union),交集并集比

2. ROI (region of interest) , 感兴趣区域

3. ROC (Receiver Operating Characteristic curve) 受试者工作特征曲线

4. AUC (Area Under the Curve) , 曲线下区域

首先要区分,前两个目标检测领域的术语;后两个是从医疗领域引进的,但是所有机器学习准确率都可能用到该指标。

最容易理解的是第2个ROI,我们做任何目标检测在准备数据集时都要选择感兴趣区域, 我们之前的文章也提到过

labelImg 就是一个不错的标注工具。帮助你选择目标检测的感兴趣框。是的这不是一个评价函数,是一个概念而已。 继续阅读做机器学习,再别把IoU,ROI 和 ROC,AUC 搞混了 !聊聊目标检测,医疗领域的那些评价函数

OpenFace手把手入门之 — 快速训练一个人脸识别模型,比一比你像哪个明星,亲测可用,python torch lua

OpenFace是一款优秀的开源深度学习人脸识别库。如果你熟悉torch,python或者lua,这款丰富的人脸识别库更是一款不可多得的工具。

今天David 9 就带大家手把手训练一个人脸识别模型,测试一下你像哪个明星?

1.  下载openface的docker镜像,免去你配置openface的过程:

docker pull bamos/openface

2. 跑这个docker镜像,进入项目目录:

docker run -v /Users:/host/Users -p 9000:9000 -p 8000:8000 -t -i bamos/openface /bin/bash
cd /root/openface

注意 -v /Users:/host/Users 这个参数是必要的。因为docker中的openface项目还没有训练数据集,把你本地的/Users目录挂载到docker镜像中的/host/Users目录,可以方便你复制一些用于训练的图片数据集。 继续阅读OpenFace手把手入门之 — 快速训练一个人脸识别模型,比一比你像哪个明星,亲测可用,python torch lua

TensorFlow如何充分使用所有CPU核数,提高TensorFlow的CPU使用率,以及Intel的MKL加速

许多朋友使用服务器时,碰巧服务器没有安装GPU或者GPU都被占满了。可是,服务器有很多CPU都是空闲的,其实,把这些CPU都充分利用起来,也可以有不错的训练效果。

但是,如果你是用CPU版的TF,有时TensorFlow并不能把所有CPU核数使用到,这时有个小技巧David 9要告诉大家:

with tf.Session(config=tf.ConfigProto(
  device_count={"CPU":12},
  inter_op_parallelism_threads=1,
  intra_op_parallelism_threads=1,
  gpu_options=gpu_options,
)) as sess:

在Session定义时,ConfigProto中可以尝试指定下面三个参数: 继续阅读TensorFlow如何充分使用所有CPU核数,提高TensorFlow的CPU使用率,以及Intel的MKL加速

迁移学习101: Transfer learning, pretrained learning, fine tuning 代码与例程分析 源码实践

目前的迁移学习太粗浅, 归因于我们对表征的理解太粗浅. 但这是一个好方向, 如果我们能从”迁移学习”上升到”继承学习”, 任何模型都是”可继承”的, 不用担心今天的模型到了明天就毫无用处, 就像人类的基因一代代地演变, 是不是会有点意思 ? — David 9

太多初学者总是混淆迁移学习预训练模型, David 9一直想为大家区分两者, 其实迁移学习预训练并不难区分:

  1. 把模型的所有参数保存起来, 都可以宽泛地叫做预训练, 所以预训练比迁移学习宽泛的多. 我们并不设限预训练的保存模型未来的用处 (部署 or 继续优化 or 迁移学习)
  2. 把预训练的模型用在其他应用的训练可以称为迁移学习. 

迁移学习(Transfer learning) 的原理相当简单:

如上图, 复用之前预训练的复杂深度网络(第一行大蓝框), 我们复用倒数第二层对图像的输出特征作为新的训练输入.

使用这个输入, 我们再训练一个迷你的浅层网络(第二行绿底网络), 就可以应用在其他领域. 继续阅读迁移学习101: Transfer learning, pretrained learning, fine tuning 代码与例程分析 源码实践