C/C++教程

结合openCV学习DIP之机器学习

本文主要是介绍结合openCV学习DIP之机器学习,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

综述 

结合openCV学习DIP之传统图像特征与匹配

图像特征

        图像的浅层特征主要是颜色、纹理和形状

        图像特征是指: 可以表达图像中对象的主要信息, 并且以此为依据可以从其他未知图像中检测出相似或相同的该对象A.

        在特征提取上,传统的图像处理都是自行设计提取固定特征的算子,在深度学习上主要是利用CNN网络来广泛的提取图像的特征.

笔记以吴恩达课程为基础, 全面介绍机器学习相关术语, 再以李航《统计学习方法》和周志华《机器学习》以及《学习openCV3》为基础,记录学习内容, 将不定期更新.

机器学习-吴恩达课程笔记

本章以吴恩达机器学习课程为基础, 记录期间的学习笔记,该课程和本笔记仅以入门为目标, 即不涉及理论具体推导.

第一课-基本术语和LogisticRegression

目的: 将一个图片输入到一个 (暂称为)机构 中, 自动对其进行分类

        分类的结果有二类分类和多类分类, 根据分类结果不同,可以将分类器分为:

                二类分类: 感知机,支持向量机SVM, Adaboost提升方法,Logistic回归模型

                多类分类: k近邻树(k近邻法),朴素贝叶斯法,决策树,Logistic回归模型,最大熵模型

如何遍历一个包含了N个图片的集合? 一般是for循环,但是这种费时.

回归:简单理解为两组数据关系的统计分析方法

对于一张图片一般是3个通道,假设图片size是64x64, 那么将这张图片记为x, x通过维度变换为nx1的列向量,如下图所示:

 假设训练集train set记为X有m个样本,每个样本是(x^{(1)},y^{(1)}).....(x^{(i)},y^{(i)})...(x^{(m)},y^{(m)}),其中y^{^{(i)}}表示第i个样本的标签, 标签的信息即分类信息, 比如猫or狗

 上述x^{(i)}是一个n维列向量\begin{pmatrix}x^{i}_{1} \\ x^{i}_{2} \\ x^{i}_{3} \\ ... \\x^{i}_{n} \end{pmatrix},显然, 训练集X是一个n行m列的矩阵,同理标签Y如下

 

 LogisticRegression 逻辑回归模型

\hat{y}为预测值, y为标签真实值, X为输入的图片集合记号, 对其有表达式:

\hat{y} = w^T\cdot x + b  得到一个线性的模型, 但是输出的范围变成了∞, 想要函数值限定在[0,1]

\hat{y} = \sigma(w^T+b)  其中\sigma (t) = \frac{1}{1+e^t}, 该表达式将其值域锁定在了[0,1]上

 

Loss function损失函数和Cost function成本函数

loss function是对于单个样本而言, 目的是求 真实值 和 预测值之间的差距, 自然是越小越好,其数学表达式为:

L(\hat{y},y) = -[y\cdot log \hat{y}+(1-y)\cdot log(1-\hat{y})]

由于y是标签值,自然是不变的, 而\hat{y}是预测值, 其值和w和b有密切关系,将\hat{y} = \sigma (w^T + b)

带入L()中{\color{Red} L(\hat{y},y) = L(w,b) = -[y\cdot log(\sigma (w^T +b))+(1-y)\cdot log(1-\sigma (w^T +b))]}

cost function是对于群体样本而言, 其数学表达式为: 

J(w,b) = [\frac{1}{m} \cdot \sum_{i-n}^{m}L(\hat{y}^{(i)}, y^{(i)}) ]

 上述问题转换成: 如何确定 w和b的值, 使得L和J 存在最小值, 即使得分类的错误率最低?

答案: GradientDescent 梯度下降法

梯度下降法或最速下降法steepest descent 是求解无约束最优化问题的一种常用方法

graditent descent是一种迭代算法,  选取适当的初值x^{(0)},不断迭代更新x的值,将目标函数值最小化,直到收敛. 

负梯度方向是使函数值 下降 最快的方向, 应当以负梯度方向更新x值

 书中或许不太容易理解, 作图理解如下: 注意parameter学习率\alpha

 

 对于上图抛出的问题,

该曲线的递减部分, 其斜率为负, 梯度负方向,负负得正,w+正数,因此w向右移动, 递增部分, 斜率为正, 梯度负方向,w+负数,因此w向左移动

 

在上述的问题中, 如何通过计算得到的损失函数的值, 自动更新输入的w和b的值呢? 从而自动调整模型的参数,使得预测能力的错误率降低? 

为了回答这个问题, 引入正向传播和反向传播的概念, 在下图的反向传播中, \frac{\partial J }{\partial b}就是将来参数b 在梯度下降时需要的梯度值,其方向取- ,这里\frac{\partial J }{\partial b} = \frac{\partial J }{\partial v} \cdot \frac{\partial v }{\partial u} \cdot \frac{\partial u }{\partial b}就是反向传播中如何求取\frac{\partial J }{\partial b}(简单的高数知识)

 

例子1: 单个样本

假设有样本x= \begin{bmatrix}x_1 \\ x_2 \end{bmatrix},  因为 \hat{y} = \sigma(w\cdot x+b),  那么w = \begin{bmatrix} w_1 & w_2 \end{bmatrix}

显然x是列向量, w应该为行向量, b则为1x1的单数值

根据logistic 回归模型,有

z=w^T\cdot x +b 

\hat{y} = a = \sigma(z)

 L(\hat{y},y) = L(a,y)=L(\sigma(z),y) = -[y\cdot loga+(1-y)\cdot log(1-a)]

对w1和w2和b进行gradient descent, 引入学习率\alpha

 

 例子2: 多个样本

成本函数J(w,b) = [\frac{1}{m} \cdot \sum_{i-n}^{m}L(\hat{y}^{(i)}, y^{(i)}) ]

 假设有样本x= \begin{bmatrix}x_1 \\ x_2 \end{bmatrix},  因为 \hat{y} = \sigma(w\cdot x+b),  那么w = \begin{bmatrix} w_1 & w_2 \end{bmatrix}b = [b]

 直接将其看成矩阵,然后求即可

Nerual Networ 

2 layers nerual network

为了区分, 现将[i]表示网络第i层, (i)表示第i个样本(方便理解,可以把每个样本理解成一张图片)

下图中a^{[1]}表示第1层的激活函数activation function, 该函数的表达式暂且不表.应当注意a^{[1]} = \begin{bmatrix}a^{[1]}_1 \\ a^{[1]}_2 \\ a^{[1]}_3 \\ a^{[1]}_4 \end{bmatrix}即 下图中的第一层

应该根据输入的X维度和输出的分类结果Y的维度, 从第一层开始逐步推出每一层的维度

 

 激活函数 ActivationFunction

上述的网络引入了新的概念: 激活函数

激活函数的作用是什么? 表达式一般是什么样的?

 

 

 

 

 

这篇关于结合openCV学习DIP之机器学习的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!