#PyCon2018两款最新ML数据可视化库:Altair和Yellowbrick,函数式编程的可视化库和scikit-learn增强可视化库

数据科学的可视化库和深度学习框架库一样,虽然层出不穷,但是大致分为两种:

一种是通用可视化库任何类似json schema的静态数据都可以用它作图如:  PandasSeaborn , ggplotBokehpygalPlotly 。

另一种是和框架耦合较高的可视化库,如TensorFlow的TensorBoard,scikit-learn增强可视化库Yellowbrick

对于第一种通用库,方便简洁、易用的趋势一直没有改变。这届PyCon2018上的talk:Exploratory Data Visualization with Vega, Vega-Lite, and Altair 就介绍了Altair这种新的函数式编程可视化库,其简洁程度,只要拿到panda的dataframe数据,多加一句声明代码,就可以进行可视化了:

import altair as alt

# to use with Jupyter notebook (not JupyterLab) run the following
# alt.renderers.enable('notebook')

# load a simple dataset as a pandas DataFrame
from vega_datasets import data
cars = data.cars()

# 这里是声明代码,是不是有函数式编程的味道 ?
alt.Chart(cars).mark_point().encode(
    x='Horsepower',
    y='Miles_per_Gallon',
    color='Origin',
)
Altair例程

如果要把点的样式改成线的样式,只需把函数mark_point()改成mark_line()即可:

alt.Chart(cars).mark_line().encode(
    x='Horsepower',
    y='Miles_per_Gallon',
    color='Origin',
)

继续阅读#PyCon2018两款最新ML数据可视化库:Altair和Yellowbrick,函数式编程的可视化库和scikit-learn增强可视化库

CVPR2018精选#3: 端到端FCN学会在黑暗中看世界,全卷积网络处理低曝光、低亮度图片并进行还原,及其TensorFlow源码

与其说AI智能时代,不如说是“泛智能的自动化”时代,或者,以人类为智能核心的 “机器智能辅助”时代 — David 9

最近流传的一些AI“寒冬论”, David 9 觉得很可笑。二十年前深蓝击败卡斯帕罗夫时,自动化智能已经开始发展,只是现今更“智能”而已,而这个更智能、更普及的趋势不是任何人可以控制的。

人类无尽的贪婪和惰性需要外部智能辅助和填补,也许以后的核心不是“深度学习”或者增强学习,但终究会有更“好”的智能去做这些“脏”活“累”活,那些人类不想干或人类做不到的活。。。

CVPR2018上,伊利诺伊大学和Intel实验室的这篇“学会在黑暗中看世界” 就做了人类做不到的活, 自动把低曝光、低亮度图片进行亮度还原

来自论文:Learning to See in the Dark

人肉眼完全开不到的曝光环境下,机器实际是可以还原出肉眼可识别的亮度。

该论文的第一个贡献是See-in-the-Dark (SID)数据集的整理:

来自论文:Learning to See in the Dark

因为目前的数据集没有针对低曝光同时低亮度的图片集,如上图,作者用索尼和富士相机收集低曝光的室内室外图片,同时配对正常曝光的图片用来训练: 继续阅读CVPR2018精选#3: 端到端FCN学会在黑暗中看世界,全卷积网络处理低曝光、低亮度图片并进行还原,及其TensorFlow源码

用Keras实现简单一维卷积 ,亲测可用一维卷积实例,及Kaggle竞赛代码解读

记得我们之前讲过1D卷积在自然语言处理中的应用:

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

但是读者中对如何应用一维卷积呼声太高,David 9 有必要再用一篇幅来讲1D卷积实战。这次我们拿kaggle上叶子分类预测问题做例子,讲解1D卷积网络如何实现。

我的数据集来自:https://www.kaggle.com/alexanderlazarev/simple-keras-1d-cnn-features-split/data

如果懒得去原链接下载,可以直接戳下面链接:

   train.csv     test.csv   

train.csv 是训练集数据,test.csv 是验证数据集。 这个数据集是叶子leaf 品种的分类问题,有三个通道, 每个通道64个比特位,一个通道代表边界特征,一个通道代表形状特征,最后一个通道代表材质特征。(这些特征都是kaggle已经帮你提取了)。输出是叶子特征标签的预测。

下面废话少说,直接上代码及详细注释(亲测可用): 继续阅读用Keras实现简单一维卷积 ,亲测可用一维卷积实例,及Kaggle竞赛代码解读

PyCon 2018数据科学talk盘点#1,入坑PyTorch前你需要知道的事,为什么要用PyTorch,以及PyTorch与TensorFlow的区别

一年一度的PyCon大会上周在俄亥俄Cleveland举行,youtube上早早放出了talk列表。虽然PyCon聚焦Python语言本身,但是关于数据科学AI的talk也不在少数。

David 9感兴趣talk之一就是来自PyLadiesStephanie Kim关于PyTorch介绍

太多小伙伴问David 9 哪个深度学习框架好?用TensorFlow还是PyTorch好 ?

现在是时候结合这个talk给大家讲清楚了。

首先,框架各有自己的优势,关键是你项目需要和个人喜好:

Stephanie Kim在PyCon2018上的talk:https://www.youtube.com/watch?v=LEkyvEZoDZg&t=1464s

如果你的项目和RNN强相关,并且希望写RNN模型的时候更轻松敏捷,或者,你是从事科学研究的人员,那么PyTorch更适合你; 如果你项目定位是一个稳定产品(TensorFlow Serving),或者你注重高效训练,并且想把模型移植到轻量级移动端(TensorFlow Lite), 那么选择Tensorflow更合适。 继续阅读PyCon 2018数据科学talk盘点#1,入坑PyTorch前你需要知道的事,为什么要用PyTorch,以及PyTorch与TensorFlow的区别

David9的普及贴:机器视觉中的平均精度(AP), 平均精度均值(mAP), 召回率(Recall), 精确率(Precision), TP,TN,FP,FN

召回率和准确率就像你去赌场要同时带着“票子”和“运气” — David 9

在机器学习面试中,经常会问道“召回率”“准确率”的区别 。 其实,就像你去赌场下注一样,如果你“票子”很多,可以把钱分摊在不同的赌注上,总有一个赌注会猜对,当你猜对了,就是一次“召回”了; 而“准确率”不关注你下多少注,好似你在赌场碰“运气”,下注越多,越能看出你今天的“运气”。

因此,你猜的次数越多自然有较大的召回,当然最好的情况是,你猜测很少次数就能召回所有。

计算召回率(Recall) 和 精确率(Precision) 时,人们一般会先搬出TP(True positive),TN(True negative),FP(False positive),FN(False negative )的概念:

                     Condition: A        Not A

  Test says “A”      True positive   |   False positive
                     ----------------------------------
  Test says “Not A”  False negative  |    True negative

然后给出公式:

召回率 Recall = TP / (TP + FN)

准确率 Precision = TP / (TP + FP)

事实上,不用硬背公式。两者的抽样方式就很不同: 召回率的抽样是每次取同一标签中的一个样本,如果预测正确就计一分;准确率的抽样是每次取你已预测为同一类别的一个样本,如果预测正确就计一分。这里一个关键点是:召回率是从数据集的同一标签的样本抽样;而准确率是从已经预测为同一类别的样本抽样。召回率和准确率都可以只针对一个类别。 继续阅读David9的普及贴:机器视觉中的平均精度(AP), 平均精度均值(mAP), 召回率(Recall), 精确率(Precision), TP,TN,FP,FN

一维卷积在语义理解中的应用,莫斯科物理技术学院(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)