chrome Shape Detection API

Google把的机器学习,已经部署到了各种终端,在chrome 57 以后(移动的浏览器也支持,具体看官方文档),加入了  Shape Detection API,可以做一些本地的检测:

人脸识别(FaceDetector):可以给编码器或自动对焦放放提供提示,也可以给识别的用户做标记等。

文本识别(TextDetector):OCR 配合语音接口(语音能力下文也有提及),朗读图片中的文字等。

条码识别(BarcodeDetector):识别网页中的条形码/二维码,并作相应的动作,比如链接跳转等。

确认浏览器是否支持:

在浏览器地址栏输入: chrome://flags 打开实验功能,找到 Experimental Web Platform features 并修改状态到 Enabled, 然后会提示重启浏览器, 重启以后在 console 命令行中输入: window.FaceDetector, 如果输出 undefined 则表示浏览器不支持,去升级浏览器吧。

文档和例子:

Github 地址:https://github.com/WICG/shape-detection-api

文档地址:https://wicg.github.io/shape-detection-api/index-zh-cn.html#introduction

一个Demo:https://gist.github.com/Vtrois/49e55fd2e02b690b3dcff165b630417c

另一个Demo: https://www.vtrois.com/tool-shape-detection-api.html

Tips:

中间可能会碰到一个报错:

Shape Detection API: “DOMException: Source would taint origin”

如果碰到这种情况,请保持图片地址改成和浏览的地址在同一个域名。

tensorflow 计算交叉熵错误问题解决

ValueError: Rank mismatch: Rank of labels (received 2) should equal rank of logits minus 1 (received 2).

碰到上面这个错误的时候,应该是用了后面这个计算交叉熵的方法了,如果没有用请绕过。 tf.nn.sparse_softmax_cross_entropy_with_logits

自己照着例子做练习的时候碰到上面这个错误,在网上搜,看了好多都没解决,最后看了一下,这个方法的的帮助文档。

sparse_softmax_cross_entropy_with_logits(_sentinel=None, labels=None, logits=None, name=None)

这个是这个函数的参数说明, 第一个参数网上都说的是不用填,我们暂时先不管他

labels: `Tensor` of shape `[d_0, d_1, ..., d_{r-1}]` (where `r` is rank of 
`labels` and result) and dtype `int32` or `int64`. Each entry in `labels` 
must be an index in `[0, num_classes)`. Other values will raise an exception when this op is run on CPU, and return `NaN` for corresponding 
loss and gradient rows on GPU.
logits: Unscaled log probabilities of shape `[d_0, d_1, ..., d_{r-1}, num_classes]` and dtype `float32` or `float64`.

logits 的长度需要比 labels 多一维,就可以了。

例如:

import tensorflow as tf

labels = [[0.2,0.3,0.5],
          [0.1,0.6,0.3]]
logits = [[2,0.5,1],
          [0.1,1,3]]
result1 = tf.nn.sparse_softmax_cross_entropy_with_logits(labels=labels, logits=logits)


如果这样用就会报这个错
ValueError: Rank mismatch: Rank of labels (received 2) should equal rank of logits minus 1 (received 2).

下面演示一下,两个方法的正确用法:

import tensorflow as tf

labels = [[0.2,0.3,0.5],
          [0.1,0.6,0.3]]
logits = [[2,0.5,1],
          [0.1,1,3]]
result1 = tf.nn.softmax_cross_entropy_with_logits(labels=labels, logits=logits)
import tensorflow as tf

labels = [0,2]

logits = [[2,0.5,1],
          [0.1,1,3]]


result1 = tf.nn.sparse_softmax_cross_entropy_with_logits(labels=labels, logits=logits)

总结:sparse_softmax_cross_entropy_with_logits 主要用余结果是排他唯一性的计算, 如果是非唯一的需要用到 softmax_cross_entropy_with_logits

多看看官方文档,多理解。

linux(centos)安装NVIDIA显卡驱动,安装CUDA,安装tensorflow

装系统的时候,各种对应的版本需要对上,不然中间会有各种坑,系统崩溃等等。ubunt装了几次各种问题,最后用centos 顺利的装好了。

写文章的时候 tensorflow只支持CUDA9.0, cuDNN v7.0, 所以需要装CUDA9.0,不能直接装最新版。(CUDA9.0支持 ubutnu17.04, 不支持最新的Ubuntu 18, centos可以忽略,支持centos7.)

安装步骤:

0 首先 按照 tensorflow官方安装教程来

https://tensorflow.google.cn/install/install_linux。

1 安装 gcc 内核

可参考(https://docs.nvidia.com/cuda/cuda-installation-guide-linux/#verify-kernel-packages)

yum -y install gcc kernel-devel kernel-headers

2 添加Repo源

阿里云源 国内更新快
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

上面源是为了装 nvidia驱动,下面这个是装python相关的。
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
yum install yum-plugin-fastestmirror

python相关源
yum -y install epel-release

yum makecache

3 安装NVIDIA显卡驱动

先安装nvidia-detect,然后运行 nvidia-detect , 会显示显卡对应驱动的版本 kmod-nvidia, 安装检测出来的版本就可以了.

$ yum install nvidia-detect

$ nvidia-detect

$ yum install kmod-nvidia

我按照个过程安装完以后就可以了,有些教程中需要屏蔽 nouveau 弄不好会把系统搞坏。

(也可以手动安装从NVIDIA官网下载驱动安装,期间需要停掉图像界面,中间可能有各种问题,推荐用yum/apt安装)

4 安装CUDA

按照 https://docs.nvidia.com/cuda/cuda-installation-guide-linux/ 官方教程进行即可,安卓cuda最后一步的时候,不要直接 yum install cuda,这样会装到最新版本,需要装。yum install cuda-9.0 然后按照教程添加环境变量到 /etc/profile 和 .bashrc 中

5 安装 cuDNN

下载 https://developer.nvidia.com/cudnn , cudnn 需要注册 nvidia 开发者账号, 然后下载 Download cuDNN v7.0.4 (Nov 13, 2017), for CUDA 9.0, 然后:解压,copy

$ tar -xzvf cudnn-9.0-linux-x64-v7.tgz

$ sudo cp cuda/include/cudnn.h /usr/local/cuda/include
$ sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64
$ sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*

 

6 安装 tensorflow

有些可能没有 pip, 先装 python-pip, python-dev,然后pip install tensorflow-gpu 即可,如果中间出现依赖然间包冲突,把低版本的卸载掉重新装。 在pip 安装的时候可以在后面加上 -i http://pypi.mirrors.ustc.edu.cn/simple/ 可以提高速度,以下是几个国内的pip源。

阿里云 http://mirrors.aliyun.com/pypi/simple/
中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
豆瓣(douban) http://pypi.douban.com/simple/
清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/
中国科学技术大学 http://pypi.mirrors.ustc.edu.cn/simple/

机器学习降维方法

特征降维方法包括:Lasso,PCA,小波分析,LDA,奇异值分解SVD,拉普拉斯特征映射,SparseAutoEncoder,局部线性嵌入LLE,等距映射Isomap。

1. LASSO通过参数缩减达到降维的目的。

LASSO(Least absolute shrinkage and selection operator, Tibshirani(1996))
该方法是一种压缩估计,通过构造一个罚函数得到一个较为精炼的模型,使得压缩一些系数,同时设定一些系数为零。英雌保留了子集收缩的优点,,是一种处理具有复共线性数据的有偏估计。Lasso 的基本思想是在回归系数的绝对值之和小于一个常数的约束条件下,使残差平方和最小化,从而能够产生某些严格等于 0 的回归系数,得到可以解释的模型。

2. 主成分分析PCA

PCA(Principal Component Analysis)是一种常用的数据分析方法。PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维数据的降维。
设有m条n维数据。

1)将原始数据按列组成n行m列矩阵X
2)将X的每一行(代表一个属性字段)进行零均值化,即减去这一行的均值
3)求出协方差矩阵C=\frac{1}{m}XX^\mathsf{T}
4)求出协方差矩阵的特征值及对应的特征向量
5)将特征向量按对应特征值大小从上到下按行排列成矩阵,取前k行组成矩阵P
6)Y=PX即为降维到k维后的数据

PCA降维过程请参考http://www.cnblogs.com/zhangchaoyang/articles/2222048.html

3. 小波分析

小波分析有一些变换的操作降低其他干扰可以看做是降维。
http://www.360doc.com/content/15/0613/14/21899328_477836495.shtml

4. 线性判别LDA

线性判别式分析(Linear Discriminant Analysis),简称为LDA。也称为Fisher线性判别(Fisher Linear Discriminant,FLD),是模式识别的经典算法,在1996年由Belhumeur引入模式识别和人工智能领域。

基本思想是将高维的模式样本投影到最佳鉴别矢量空间,以达到抽取分类信息和压缩特征空间维数的效果,投影后保证模式样本在新的子空间有最大的类间距离和最小的类内距离,即模式在该空间中有最佳的可分离性。

LDA与前面介绍过的PCA都是常用的降维技术。PCA主要是从特征的协方差角度,去找到比较好的投影方式。LDA更多的是考虑了标注,即希望投影后不同类别之间数据点的距离更大,同一类别的数据点更紧凑。

详细请参考http://www.cnblogs.com/zhangchaoyang/articles/2644095.html

5. 拉普拉斯映射

拉普拉斯特征映射将处于流形上的数据,在尽量保留原数据间相似度的情况下,映射到低维下表示。

这里写图片描述

求解广义特征向量,取前几个非零最小特值对应的特向,即为原数据在低维下的表示。
资料来源于:http://blog.csdn.net/yujianmin1990/article/details/48420483

 

6. 深度学习SparseAutoEncoder

稀疏自编码就是用少于输入层神经元数量的隐含层神经元去学习表征输入层的特征,相当于把输入层的特征压缩了,所以是特征降维。
详细请参考http://blog.csdn.net/whiteinblue/article/details/20639629

7. 矩阵奇异值分解SVD

在PCA算法中,用到了SVD,类似PCA,可以看成一类。

8. LLE局部线性嵌入

Locally linear embedding(LLE)是一种非线性降维算法,它能够使降维后的数据较好地保持原有流形结构。LLE可以说是流形学习方法最经典的工作之一。很多后续的流形学习、降维方法都与LLE有密切联系。

LLE算法认为每一个数据点都可以由其近邻点的线性加权组合构造得到。算法的主要步骤分为三步:(1)寻找每个样本点的k个近邻点;(2)由每个样本点的近邻点计算出该样本点的局部重建权值矩阵;(3)由该样本点的局部重建权值矩阵和其近邻点计算出该样本点的输出值。具体的算法流程如图2所示:

这里写图片描述

这里写图片描述
这里写图片描述

9. Isomap等距映射

Isomap是一种非迭代的全局优化算法,通过一种原本试用于欧式空间的算法MDS,达到降维的目的。

参考资料:

http://www.36dsj.com/archives/26723

 

转自:http://blog.csdn.net/u014772862/article/details/52335970