Posts

Showing posts from 2018

Spectral Clustering 从入门到入门

Image
0x00 Introduction 写这篇文章的由头是因为自己前一阵读了Thomas N. Kipf, Max Welling大佬的 Semi-Supervised Classification with Graph Convolutional Networks 这篇文章。 文章核心在于怎么用数学的方式减小用在Graph数据上神经网络的运算量。因为之前所接触的神经网络限于Andrew NG的两门课,故而没接触过处理Graph的情况。这里的Graph指点集,边集构成的图。这篇文章并非paper的讲解。只是记录一下我关于Graph Clustering这个领域的入门心得。

Data mining 实战第一弹

Image
Audit了HKUST的Data mining. Dr. Lei Chen 又很nice的把作业和ppt在外网上公开了。 http://home.cse.ust.hk/~leichen/courses/mscbd-5002/   不做作业实在可惜 (链接可能会在学期结束后就失效) 于是我DM的第一次实战就是这门课的 Assignment2

Kaggle笔记: House Price prediction

Image
Kaggle 笔记 : House Price prediction Source :   https://www.kaggle.com/serigne/stacked-regressions-top-4-on-leaderboard 1. 把 training set 和 test set 里面的 Id 列,移除(备份到一边) 2. 作出横轴是住房面积 纵轴是房价的图像,发现基本上房价和面积呈线性关系,并且发现有些数据住房面积很大 但是房价很低,这些属于 outlier data. 把它们从数据集中移除 3. 既然目标是房价预测, 我们把 training set 里面的房价分布图画出来 这里根据图像发现 并不是特别线性 4. 于是想到把 price 这一列求 log ,再画图观察,发现分布更正态了 5. 把 Training set 和 Test set 拼起来,观察 missing data 。 填充这些 missing data. 这里作者对着数据提供者的 description ,再加上一些想象把丢失的数据全部补完 6. 把数据集里面其实是 category 的 attribute 从数字表示 转化为字符串。比如 OverallCond 这个字段,代表 Rates the overall condition of the house 。它的数值在数据集中是 0 , 1 , 2… 10 。 但他本质上是 category 。 7. 对数据进行重新编码 , 把 category 的数据表示为数字比如性别 [‘male’, ’female’] -> [‘1’, ‘0’] ref: https://blog.csdn.net/quintind/article/details/79850455 8. 合并 / 新增变量: 因为对于售价面积是个很重要的因素,作者创建了一个新的变量:总面积 = 地下室面积 + 一楼面积 + 二楼面积 9. 查看各个 attribute 的分布情况,把非正太分布 (skewed features) 的转化为正态分布。   这里作者用的是 Box-cox Transformation 。 r

计算机视觉 语义分割 论文笔记

Image
< A Review on Deep Learning Techniques Applied to Semantic Segmentation > 1. 综述 语义分割semantic segmentation 是计算机视觉中一个重要的部分。长远来看,它为完整的场景理解铺平了道路。语义分割并不是一个单独的门类,这是从粗糙分类到精细分类的自然一步。 演化的步骤是这样的: 1. 首先我们做的是输入一张图,输出这张图上有没有特定的物体,即预测哪些物体是属于这个图像的,或者给出一个可能性排序。 2. 接下来我们发展为:给出物体的定位与检测。定位体现在我们可以标注出物体的中心点,或者用框框出来。然而这里的检测还是检测出一个类别,并不能细分出类别里的事例。可以理解为能识别java里的class 而不是instance 的感觉。这样的话我们对于图中的每一个像素都能归类到一个类别。 3. 在之前的基础上,我们可以进一步细化,我们可以把图中的每个像素不光标注出它属于什么类别class,而是标注出属于哪个事例instance 所以上图c,d 这种问题就被归结为: 我们定义一个集合 L{l0,l1,...lk} 集合L代表一共有k+1个不同的instance标签,通常我们认为l0就是背景background 定义集合X = {x1, x1, ... xn} 集合X代表图中所有像素一共n个像素点。 输出就是预测每个像素点所对应的label值 这也就是像素级别的预测 2.1 常见的深度网络架构 这段也可以看 CS231n 2017 Lecture 9 Alex Net VGG GoogLeNet ResNet ReNet 2.2 迁移学习 因为从头训练一个深度神经网络通常不太可行,原因有二:训练需要足够的数据量;模型训练到收敛需要不少的时间。通常我们拿一个预训练好的模型,然后用自己的数据集训练,微调Fine-tuning一些权重。在Fine-tuning的时候,选取哪一层开始很关键,一般会选择比较较高的层,因为底层会保留比较通用的特征;并且learning rate 也不适合选的过大,毕竟我们只是微调。 2.3 数据预处理和数据增强 数据增强指从已有数据中得到新的样本,通过

Stanford's CS231n Lecture 5 Convolutional Neural Networks 笔记

Image
CS231n Lecture 5 Convolutional Neural Networks 的笔记 卷积神经网络 CNN 1. 卷积层 Convolutional Neural Layer : 我们以输入是一张32*32*3 的图像作输入为例,全连接的话,输入是一个(1,3072)的向量,然后乘以一个(10,3072)的权重矩阵,最后得到一个(1,10)的向量。然后把最后向量里的元素施加以激活函数。 然而在CNN卷积层里面,我们运算是这样的:拿一个5*5*3的filter w,在输入的图像上移动,每走一步,得到一个数字,这个数字是由图像上的那块5*5*3 和 w 的做dot product然后在加上bias得到的。注意:这里输入图像的厚度是3,那这里filter的厚度保持不变,也是3。最后我们得到的activation map的厚度是1 我们可以对原图进行多次这样的操作然后得到了多层这样的activation map 然后把这6个单层的activation map concat为一组,也就是下图的中间蓝色部分,可以看到它的厚度是6,左边粉色的厚度是3,从第一大块到第二大块,这里用了6个filters(5,5,3)。同理我们通过10个5*5*6的filter,把第二大块,(28,28,6),的这层再做CNN,得到了第三大块也就是(24,24,10) 在最后,不同大块上的东西也就提取到了不同的特征 这个过程之所以叫做*卷积*神经网络,是因为这个和信号处理里的卷积很相似。“如果大家学过信号处理应该能看得出来”小姐姐如是说道 - - 2. 在filter对前一层进行运算时候的细节: 方便起见,我们假设输入是(7,7,1) 然后有一个(3,3,1)的filter。每次移动的stride为2,在最后我们会得到一个3*3的输出(具体的厚度取决于filter的个数) 当输入的边长与filter的边长作差然后除以stride不能整除的时候,我们需要对输入进行padding(补全),不然的话就会漏掉最边角的像素。之于为什么padding的值是零,只是在尝试以后发现这样做没毛病- - 这一段最后的总结 3. CNN中的其他层(非卷积层) 3.

Stanford's CS231n Lecture 11: Detection and Segmentation 笔记

Image
0. 主要内容 1. Semantic Segmentation 我们定义一系系列 label,比如天空,树木,猫,牛。然后对于输入图片的每个像素,输出一个预测的label值。 实现方式1: Fully Convolutional 但是对于高分辨率的图片 这样的过程是非常耗时的,于是我们进行了改进。 实现方式1 改: 这里我们用了downsampling 和 upsampling 来降低所需要处理的像素。 downsampling我们可以用pooling,strided convolution 来实现。 对于upsampling,这里介绍了两种方法: nearest neighbor 和 bed of nails (钉板) 在具体场景中,如果我们用bed of nails 来upsampling的话,不会像上图那样选取左上角来给值,而是根据在downsampling的时候取的那个像素位置来对应的还原。 2. Classification + Localization 例子1: 分类并定位图中的猫 输入一张图,输出一个矩形框的坐标。(x,y,w,h) 例子2: 姿势预测 我们可以用14个点来表示人体主要关节,于是我们只要在一个图片里识别出来这14个点,就大概确定了人的姿势。所以这里输入是一张图,输出是14个坐标。 tip: 这里的loss function 用的是regression loss。 在loss function的选择上,classification 和 regression 问题选用的有点差别 如果我们要的是一个类别输出,比如对几个类别的分类问题,这时候用的比较多的就是:cross entropy loss, softmax loss, SVM margin type loss  但是如果我们要的是一些连续的值,比如这里的点位,那么loss function 用L1, L2 距离比较合适。 3. Object Detection 这里和Classification问题的区别在于物体的数量。 3.1 CNN family 比较朴素的想法是滑窗,然后对选定的区域做分类/定位,比如用CNN。 然而这样有个问