1. 前言
随着面向对象程序语言的发展,掌握一个新的编程应用技术的要求基本上有两点:
能明白大概原理:这能帮助我们组织/修改/拼接已有的代码块
能识别核心代码:这能帮助我们调试代码性能以满足自己的需求
所以,本文以“关键原理和概念” vs. “核心代码块的特征”的形式小结一下几种人脸识别算法,以求复盘精进和交流学习。
需要说明的是:
本文主要内容是对网络资源的一次有序整理。有下划线的文字有链接。
我在编程表述上会不准确不专业, 希望大家能批判性的获得一点启发和便利。
本文所有代码来自网络 ,主要来自 seathiefwang;coneypo;aymericdamien,其知识产权和附带法律权益属于原著者。
另外,关于深度学习,这篇辩证性的文章蛮有启发性。
2. 主要内容
2.1. 源代码简介和链接
2.2. 基于线性回归的机器学习的最简单例子
2.3 基于欧式距离的人脸识别
2.4 Tensorflow组织的卷积神经网络架构
2.5 完整代码和特征代码块
2.1. 源代码简介和链接
后面废话会很多,先上源代码。它们都经过了我的测试,大家按照下面的配置就可以运行了:Win10 + Python 3.6 + Tensorflow 2.0,其他的库按pip默认的版本安装就可以了。
很大一部分代码兼容问题来自于Tensorflow版本的不同。对于基于Tensorflow 1.x写的代码,我把引用做了如下修改后可在Tensorflow 2.0下运行。
import
(1)基于线性回归的机器学习的最简单例子:源代码;我修改的备份
数据集是自定义的数组;
简洁展示了机器学习的训练环节和性能评估环节。
#python迭代过程
(2)基于欧式距离算法的人脸识别:源代码;我的备份
强烈推荐这个代码,非常用心之作;
写的很完善,而且是近期上传的,因此没有代码版本方面的问题;
基本功能:摄像头采集图片集,然后通过摄像头识别人脸。
(3)基于Tensorflow库的神经网络用于人脸识别:源代码;我修改的备份。
作者把基于Tensorflow的神经网络架构写的非常简洁清晰,很难得的一个神经网络代码;
是2017年的代码,Tensorflow 1.15.0版;
人脸识别的准确性有待确认,但不是学习这个代码的重点;
基本功能:摄像头采集图片集,然后通过摄像头识别人脸。
2.2. 基于线性回归的卷积神经网络
- 高大炫酷算法概念
在机器学习这个主题下有一堆的算法概念,让人一团乱麻而不得要领。这里有一篇很好的文章,相比网上的中文资料,它全面而简单的罗列了重要概念。链接地址。
- 谈一下线性回归
模式识别的本质就是分类,一元线性回归是分类方法之一。形象的说,线性回归算法就是找到一条最佳的直线最大程度最大概率的区分不同的类别。
在模式识别算法中,线性回归方程中的(x)和其系数(a,b)要复杂一些。
比如,自变量(x)定义人脸,但它被设定为一个一维128元素的数组,现实意义是:用128个正交的坐标去定义所有人脸,因此一张脸就是128维向量空间的一个点,所有人脸的集合都包含在这个向量空间里。
所以我想系数(a,b)自然应该是多维数组,由它们来划分128维向量空间里不同的人脸亚群。而且我想这样理解它们,即,由于数组包含的信息量可以很大,所以它们可以精密的区分人脸。由此,求解它们需要很大的数据量不断的去接近最优最真实的系数(a,b)。
这个求解过程采用了迭代的方法,有3个参数定义迭代,它们控制了回归算法的性能,即,
learning_rate = 0.01
training_steps = 1000
display_step = 50
而回归曲线的性能由2个参数在每一轮的迭代中不断被评估,即,
loss
accuracy
- 卷积神经网络(CNN)
在我看来,CNN是一种归纳数据的策略和方法。在每一轮迭代中,它通过不断压缩归纳样本的N维数组(取最大值或者平均值),最后得到具有显著区分能力的1维数组:形象的原理解说。教科书般的专家解说。
CNN的调试优化主要涉及几个概念:
Sigmoid函数,Softmax函数,ReLU函数(Rectified Linear Unit, ReLU);
CNN的基本配置:卷积层、Relu层、池化层;
Tensorboard工具:将损失以及准确率等神经网络性能变量可视化。
2.3. 基于欧式距离的人脸识别
这里说的图文并茂。
2.4. Tensorflow组织的卷积神经网络架构
同上,先看这里。
2.5. 完整代码和特征代码块
(1)基于线性回归的机器学习的最简单例子
- 特征代码1:超级参数(学习率)
# Parameters.
- 特征代码2:模型设定
# Weight and Bias, initialized randomly.
- 特征代码3:迭代拟合;评估(丢失率,精准性)
# Run the optimization to update W and b values.
- 完整代码
from
(2)基于欧式距离的人脸识别
- 特征代码1:距离计算
# 计算两个128D向量间的欧式距离
- 完整代码
# Author: coneypo
(3)基于Tensorflow架构的卷积神经网络
- 特征代码1:卷积层设计
def
- 特征代码1:神经网络训练
batch_x
- 完整代码
import
小结
- 备忘:日后为代码加上Tensorboard性能分析
- 暂无
以上。