用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的区别

CVPR2018精选#2: 视频分析的非局部(non-local) 神经网络模块,CMU与Facebook AI研究室视频分类识别新贡献

拥有什么,决定了你只能迷恋什么 — David 9

很大程度上,目前的芯片工艺和技术,决定了人类只能迷恋神经网络这样的方案(高于传统机器学习一个计算级别)。就像进入铁器时代,人们才能方便地砍伐森林、挖掘矿山、开垦土地(如果在青铜时代就别想了)。

在铁器时代,对铁器的改进很受欢迎;正如今年CVPR上大神Kaiming HeXiaolong Wang 的文章试图改进神经网络工具去“开垦”视频分析 这片土地。

我们知道视频图片的区别无非是多了时间的维度(time,视频的帧)。最直觉的做法是先用cnn,再用擅长时间序列的rnn;或者,直接用3D卷积去做。而实际情况是直接用3D卷积效果不是最好,于是有人用两个cnn去做(一个cnn分析时间,一个cnn分析空间),或者另外用一个分析轨迹(trajectories)的模块去加强时空感

非局部(non-local) 模块把非局部感受野的信息提取操作做成一个神经网络模块,方便了端到端的视频分析:

一个可以插入神经网络的non-local模块

这个模块输入x可以理解为32帧的视频(32张图片帧数 T=32,长宽为H×W),输出z也是H×W大小的特征图。有没有注意到最左端的箭头是一个跳层连接?没错,non-local模块就是把视频额外的时空信息提取作为一个残差操作,这样整个模块可以任意插入到一个残差网络resnet中: 继续阅读CVPR2018精选#2: 视频分析的非局部(non-local) 神经网络模块,CMU与Facebook AI研究室视频分类识别新贡献

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

CVPR2018精选#1: 无监督且多态的图片样式转换技术,康奈尔大学与英伟达新作MUNIT及其源码

所谓无监督学习,只是人类加入了约束和先验逻辑的无监督 — David 9

更新:有同学发现这篇文章可能并没有在CVPR2018最终录取名单(只是投稿),最终录取名单参考可以看下面链接:

https://github.com/amusi/daily-paper-computer-vision/blob/master/2018/cvpr2018-paper-list.csv

最近图片生成领域正刮着一股“无监督”之风,David 9今天讲Cornell大学与英伟达的新作,正是使无监督可以生成“多态”图片的技术,论文名:Multimodal Unsupervised Image-to-Image Translation (MUNIT)。

这股“无监督”之风的刮起,只是因为我们发现用GAN结合一些人为约束和先验逻辑,训练时无需监督图片配对,直接在domain1domain2中随机抽一些图片训练,即可得到样式转换模型。这些约束和先验有许多做法,可以迫使样式转换模型(从domain1到domain2)保留domain1的一些语义特征;也可以像CycleGAN的循环一致约束,如果一张图片x从domain1转换到domain2变为y,那么把y再从domain2转换回domain1变为x2时,x应该和x2非常相似和一致:

来自CycleGAN:https://arxiv.org/pdf/1703.10593.pdf

而这些无监督方法有一个缺陷:不能生成多样(多态)的图片MUNIT正是为了解决这一问题提出的,因为目前类似BicycleGAN的多态图片生成方法都需要配对监督学习。

MUNIT为此做了一些约束和假设,如,假设图片有两部分信息:内容c样式s,另外,图片样式转换时domain1和domain2是共享内容c的信息空间的:

MUNIT的自编码器

生成图片时,把同一个内容c和不同样式s组合并编码输出,就可生成多态的图片:

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

实际训练时,我们需要两个自编码器,分别对应domain1和domain2: 继续阅读CVPR2018精选#1: 无监督且多态的图片样式转换技术,康奈尔大学与英伟达新作MUNIT及其源码