2017-08-24 19:52:56 llh_1178 阅读数 2110
  • 机器学习之概率与统计推断

    本课程讲解机器学习算法所需概率和统计推断知识。概率部分包括概率公理及推论、条件概率、贝叶斯公式、随机变量及其概率函数(CDF/pdf)、常用概率分布及其均值、方差;统计推断部分包括大数定律和中心极限定理、极大似然估计、贝叶斯估计,估计的评价、偏差-方差平衡。课程还会讲解假设检验的基本概念。

    20162 人正在学习 去看看 AI100讲师

在图像处理中时常会用到图像像素的直方图,但是,一般情况下我们只会使用直方图做为二值化图像的根据,很少会想到处理图像的直方图也可以使图像对比度增加,达到显著的效果。这就是直方图的均值化。

首先,我们从图像的直方图说起。什么是直方图?图像直方图,是指对整个图像像在灰度范围内的像素值(0~255)统计出现频率次数,据此生成的直方图,称为图像直方图。直方图反映了图像灰度的分布情况。是图像的统计学特征。

然后,我们再说直方图的均值化。图像中像素个数多的灰度级进行展宽,而对图像中像素个数少的灰度进行压缩,从而扩展像原取值的动态范围,提高了对比度和灰度色调的变化,使图像更加清晰。

最后,用代码的方式演示处理过程:

C++:

#include <opencv2/opencv.hpp>
#include <iostream>
#include <math.h>

using namespace cv;
int main(int argc, char* argv) {
	Mat src, dst;
	src = imread("demo.jpg");
	if (src.empty()) {
		printf("could not load image...");
		return -1;
	}

	cvtColor(src, src, CV_BGR2GRAY);
	equalizeHist(src, dst);
	char input_title[] = "input image";
	char output_title[] = "output image";
	namedWindow(input_title, CV_WINDOW_AUTOSIZE);
	namedWindow(output_title, CV_WINDOW_AUTOSIZE);

	imshow(input_title, src);
	imshow(output_title, dst);

	waitKey(0);
	return 0;
}
python:

#! /usr/bin/env python
# -*- coding:utf-8 -*-
import cv2
import matplotlib.pyplot as plt
src = cv2.imread("demo.jpg")
src = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)
dst = cv2.equalizeHist(src)
fig = plt.figure(figsize=(15, 10))
ax1 = fig.add_subplot(221)
plt.imshow(src, "gray")
plt.xticks([]), plt.yticks([]), plt.title("original")
ax2 = fig.add_subplot(222)
ax2.hist(src.ravel(), 32, [0, 255], color="r")
plt.xticks([0, 255]), plt.title("original_histogram")
ax3 = fig.add_subplot(223)
plt.imshow(dst, "gray")
plt.xticks([]), plt.yticks([]), plt.title("equalize_result")
ax4 = fig.add_subplot(224)
ax4.hist(dst.ravel(), 32, [0, 255], color="g")
plt.xticks([0, 255]), plt.title("equalize_histogram")
plt.show()

结果图:

可以清楚的看出均值化后的图像比原图像清楚很多,跟其他增强对比度的操作例如掩膜操作,滤波操作等都是差不多的。以后又有一种新的方式可以增强图像的对比度了。

注:

equalizeHist()函数中输入的图像必须是8-bit的单通道图像。



2019-02-23 16:21:29 wtrnash 阅读数 867
  • 机器学习之概率与统计推断

    本课程讲解机器学习算法所需概率和统计推断知识。概率部分包括概率公理及推论、条件概率、贝叶斯公式、随机变量及其概率函数(CDF/pdf)、常用概率分布及其均值、方差;统计推断部分包括大数定律和中心极限定理、极大似然估计、贝叶斯估计,估计的评价、偏差-方差平衡。课程还会讲解假设检验的基本概念。

    20162 人正在学习 去看看 AI100讲师

神经网络图像输入零均值化的作用

最近有和同学探讨到为什么CNN在做图像识别相关任务时,对图像需要进行零均值化,CS231N里面有进行讲述,但讲得其实不是很清楚,比较难理解,所以在这里做一下较为详细的说明。

1 归一化、标准化和零均值化基本概念

首先介绍一下归一化(Normalization)、标准化(Standardization)以及零均值化(zero-mean)分别的公式和概念。归一化的公式为
x=xxminxmaxxmin x^*=\frac{x-x_{min}}{x_{max}-x_{min}}
其中xx为某个特征的原始值,xminx_{min}为该特征在所有样本中的最小值,xmaxx_{max}为该特征在所有样本中的最大值,xx^*为经过归一化处理后的特征值。可以看出,通过该公式,某个特征的值会被映射到[0,1]之间,消除量纲对最终结果的影响,使不同的特征具有可比性。

标准化的公式为
x=xμσ x^* = \frac{x-\mu}{\sigma}
其中xx为某个特征的原始值,μ\mu为该特征在所有样本中的平均值,σ\sigma为该特征在所有样本中的标准差,xx^*为经过标准化处理后的特征值。即将原值减去均值后除以标准差,使得得到的特征满足均值为0,标准差为1的正态分布。

归一化和标准化都可以消除量纲的影响,使得原本可能分布相差较大的特征对模型有相同权重的影响,在传统机器学习的数据预处理中使用得非常普遍,而具体应该选择归一化还是标准化呢,如果把所有维度的变量一视同仁,在最后计算距离中发挥相同的作用应该选择标准化,如果想保留原始数据中由标准差所反映的潜在权重关系或数据不符合正态分布时应该选择归一化。另外,标准化更适合现代嘈杂大数据场景。

考虑我们对于图像数据做预处理的情况,图像数据的特征实际上是图像上的像素点,比如224×224×3224\times224\times3的图像,一共有150528个像素点,每个像素点也就是一个特征。那么图像的特点就是每个像素点的取值范围都在[0,255]之间,所以不同特征的分布是一样的,不存在量纲的问题,对于模型影响是一样的,所以归一化或标准化是不必要的,而只需要做零均值化。

零均值化在Alexnet论文中是这么说的:“We did not pre-process the images in any other way, except for subtracting the mean activity over the training set from each pixel. ” 即将每个像素的值减去训练集上所有像素值的平均值,比如已计算得所有像素点的平均值为128,所以减去128后,现在的像素值域即为[-128,127],即满足均值为零。而在VGG论文中,关于零均值化是这么说的:"The only preprocessing we do is subtracting the mean RGB value, computed on the training set, from each pixel. ",即对于RGB三通道分开处理,每个通道的像素点减去对应通道所有像素点的平均值。也使得处理后的像素满足均值为零。

我之前预处理的一种做法是对于每个样本的每个通道,取该通道的所有像素的平均值来进行相减,使得每个样本的每个通道满足零均值,但这样会导致一个问题,就是不同样本的像素分布是不一样的,平均值也是不一样的,如果按我那样处理,可能会导致相同的像素值在不同的图像上的处理后的结果是不一样的,那就可能会影响效果了,所以零均值化还是尽量按照之前介绍的两种方法来做。

在这里插入图片描述

图1 原始数据分布、零均值化数据分布、归一化数据分布

2 零均值化的作用

那为什么需要做零均值化呢。在CS231N里的说法是零均值化可以避免“Z型更新”的情况,这样可以加快神经网络的收敛速度。下面将分别以Sigmoid、tanh以及ReLu三个最为经典的激活函数来分别说明。

2.1 sigmoid函数

首先以Sigmoid为激活函数来作为例子。如图2为Sigmoid函数的图像,公式如下:
Sigmoid(x)=11+ex Sigmoid(x)=\frac{1}{1+e^{-x}}
在这里插入图片描述

图2 Sigmoid函数图像

可以看出,Sigmoid函数的值域是(0,1)。假设我们对数据不做零均值化,那么对于神经网络第一个隐藏层来讲,输入的数据XX就全是正值(因为原始像素数值属于[0,255])。以第一个隐藏层的某一个神经元为例,当进行反向传播算法,梯度从反向到达该神经元时,根据链式法则,对权值w的梯度为全局传过来的梯度乘以激活函数Sigmoid对于w的梯度,即为公式
Lw=Lffw \frac{\partial L}{\partial w}=\frac{\partial L}{\partial f} \cdot \frac{\partial f}{\partial w}
其中L为上层传下来的梯度,f为当前的激活函数Sigmoid函数。对于某一个神经元来讲,上层传下来的梯度是一样的,而激活函数也是Sigmoid函数,所以Lf\frac{\partial L}{\partial f}对于所有的w来说都是相同的,而Sigmoid函数的求导公式如下:
sigmoid(x)=(11+ex)=0(1+ex)1(ex)(1+ex)2=ex(1+ex)2=1+ex1(1+ex)2=11+ex(111+ex)=f(x)(1f(x)) sigmoid(x)&#x27; =(\frac{1}{1+e^{-x}})&#x27;\\ =\frac{0\cdot(1+e^{-x})-1\cdot(-e^{-x})}{(1+e^{-x})^{2}}\\ =\frac{e^{-x}}{(1+e^{-x})^{2}}\\ =\frac{1+e^{-x}-1}{(1+e^{-x})^{2}}\\ =\frac{1}{1+e^{-x}}\cdot (1-\frac{1}{1+e^{-x}})\\ =f(x)\cdot(1-f(x))\\
所以fw\frac{\partial f}{\partial w}也就是Sigmoid(wx)Sigmoid(wx)的对w的求偏导结果为Sigmoid(wx)(1Sigmoid(wx))xSigmoid(wx)\cdot(1-Sigmoid(wx))\cdot x,而已知Sigmoid函数值域为(0,1),所以1-Sigmoid的值域也为(0,1),即结果前两项都为正值,所以fw\frac{\partial f}{\partial w}的正负只和x的正负有关,此时x全部为正,所以fw\frac{\partial f}{\partial w}的结果为正,加上Lf\frac{\partial L}{\partial f}对于所有的w来说都是相同的,所以对于第一层的某个神经元的全部w来说,梯度的符号就是Lf\frac{\partial L}{\partial f}的符号,所以这些w的梯度符号全部一致,要么都为正要么都为负,所以该神经元的w都会往同一个方向更新,就会造成"Z型更新"现象,如图3所示。

在这里插入图片描述

图3 Z型更新

以只有两维的w1和w2做例子,因为w1和w2的梯度符号一致,要么都为正要么都为负,都为正时则往第一象限变化,都为负时则往第三象限变化,而如果此时最优解在第四象限,则实际训练路径会远远长于最短路径,就会使得网络收敛速度变慢。

所以为了避免Z型更新的情况,将输入进行零均值化,这样某次输入全部为正的可能性就很小,就会是正负掺杂的输入,每个w的梯度符号和输入x相关,也就不会全部都一样,也就不会Z型更新了。

当然这是对于第一层的情况而言的,Sigmoid函数值域是[0,1],有一个特点是非零均值性,也就是输出时非零均值的,经过第一层的激活函数Sigmoid输出后,所有的输出值范围都在[0,1]之间,也就是都大于0,所以后面的第二层、第三层到最后一层,在反向传播时,由于输入的x符号都为正一致,就会出现Z型更新现象,使得网络收敛速度很慢。这就是Sigmoid函数非零均值导致的问题。

所以对于Sigmoid函数来说,第2、3到最后层神经网络,是存在Z型更新问题的,对于输入数据的零均值化,能够避免第一层神经网络的Z型更新问题。

2.2 tanh函数

tanh函数也是经典的激活函数之一,函数图像如图4所示。公式如下:
tanh(x)=sinhxcoshx=exexex+ex tanh(x)=\frac{sinhx}{coshx}=\frac{e^{x}-e^{-x}}{e^{x}+e^{-x}}
在这里插入图片描述

图4 tanh函数图像

可以看出tanh(x)的值域范围在(-1,1),所以tanh函数是零均值化的。然后tanh(x)的求导公式如下:
tanh(x)=(exexex+ex)=(ex(ex))(ex+ex)(exex)(exex)(ex+ex)2=(ex+ex)2(exex)2(ex+ex)2=1(exexex+ex)2=1tanh(x)2 tanh(x)&#x27;=(\frac{e^{x}-e^{-x}}{e^{x}+e^{-x}})&#x27;\\ =\frac{(e^{x}-(-e^{-x}))\cdot(e^{x}+e^{-x})-(e^{x}-e^{-x})\cdot(e^{x}-e^{-x})}{(e^{x}+e^{-x})^2}\\ =\frac{(e^{x}+e^{-x})^2 - (e^{x}-e^{-x})^2}{(e^{x}+e^{-x})^2}\\ =1-(\frac{e^{x}-e^{-x}}{e^{x}+e^{-x}})^2\\ =1-tanh(x)^2
还是先以神经网络第一层做例子,如果输入数据不做零均值化,全部为正,此时全局梯度还是和如上文所述,对于某个神经元的所有w来讲是一样的,而本地梯度也就是tanh对w的偏导为
fw=(1tanh(wx)2)x \frac{\partial f}{\partial w}=(1-tanh(wx)^2)\cdot x
由于tanh(wx)的值域是(-1,1),所以tanh(wx)2tanh(wx)^2的值域为(0,1),1tanh(wx)21-tanh(wx)^2的值域也为(0,1),所以该偏导的正负值取决于xx的符号,所以当输入全部为正时,对于该神经元的所有w来说梯度的符号也就都一样了,所以更新方向也一致,也就存在Z型更新问题。当将数据进行零均值化后,第一层输入正负掺杂,就能避免Z型更新问题,加快收敛速度。

而由于tanh函数是零均值的,即输出的值范围是在(-1,1),所以对于神经网络的第二、三乃至最后一层,由于输入的值(即上层的输出)都是零均值化的,所以就避免了Z型更新的情况,所以tanh函数的零均值使得其网络收敛速度相较Sigmoid函数更加快。

所以总结一下,tanh函数本身第二、三到最后层的神经网络,在收敛时不存在Z型更新问题,而对于输入数据的零均值化能解决第一层神经网络的Z型更新问题。

2.3 ReLU函数

ReLU是目前最通用的激活函数,函数图像如图5,函数公式为
ReLU=max(0,x) ReLU=max(0,x)
在这里插入图片描述

图5 ReLU函数图像

所以ReLU函数明显也是非零均值的。ReLU求导的公式为
f(x)={1,x&gt;00,x0 f&#x27;(x)=\left\{\begin{array}{cc} 1, &amp; x&gt;0\\ 0, &amp; x\leq0 \end{array}\right.
当输入数据不做零均值化时,即输入都大于等于0时,此时和上文一样,第一层接收到的梯度对于该神经元的所有w来说是一样的,而本地梯度为
fw={x,wx&gt;00,wx0 \frac{\partial f}{\partial w}=\left\{\begin{array}{cc} x, &amp; wx&gt;0\\ 0, &amp; wx\leq0 \end{array}\right.

由于此时输入x都大于等于0,所以当wx&gt;0wx&gt;0时梯度方向仍然只和x符号有关,都为正时该神经元的所有w更新方向仍然一致,也会有Z型更新现象。

而对输入零均值化后,输入正负掺杂,满足wx&gt;0wx&gt;0的输入里,x的符号就是正负掺杂的,所以w的更新方向就会不是一致的了,就没有Z型更新现象了。

当然这也只是对于第一层神经元,由于ReLU的输出都是大于等于0的,即它是非零均值的,所以对于第2、3一直到最后层的神经元,在收敛时会有Z型更新问题。

2015-11-21 14:33:33 weixiao2015 阅读数 830
  • 机器学习之概率与统计推断

    本课程讲解机器学习算法所需概率和统计推断知识。概率部分包括概率公理及推论、条件概率、贝叶斯公式、随机变量及其概率函数(CDF/pdf)、常用概率分布及其均值、方差;统计推断部分包括大数定律和中心极限定理、极大似然估计、贝叶斯估计,估计的评价、偏差-方差平衡。课程还会讲解假设检验的基本概念。

    20162 人正在学习 去看看 AI100讲师

直方图均值化

实验简述

实验要求:
下载一曝光不足和一曝光过度的彩色图片,对彩色图片进行直方图均衡化,并保存和展示。

原理简述

直方图概念

直方图(Histogram)又称质量分布图、柱状图,是一种统计报告图,也是表示资料变化情况的一种主要工具。直方图由一系列高度不等的纵向条纹或线段表示数据分布的情况,一般用横轴表示数据类型,纵轴表示分布情况——–百度百科

图像的直方图是以横坐标为像素值(本实验以[0-255]为范围),纵坐标为像素个数(图像以横坐标值为像素值的个数)。

直方图均值化

直方图均值化直观感受

直方图均值化就是把集中在某个值域的像素按某种方法拉伸到整个值域,获得更美观的视觉。
附上图片更容易说明。

未均值化的直方图
这是一张集中于小像素的直方图。

均值化后
均值化后的直方图。

均值化后,图片就更平和不会出现偏亮或偏暗。
附上图片更容易说明。

均值化前图像
均值化前图像

均值化后图像
这里写图片描述

直方图均值化一种原理说明

通过函数将一个小的范围映射到一个大范围,一种原理就是按如下公式进行映射

h(v)=round((cdf(v)-cdfmin)/(M*N-cdfmin)*(L-1))

cdf(v)为累加函数代表像素值小于等于v的个数。
cdfmin为累加函数。
M*N 分别代表长宽像素,其乘积为整幅图的像素。
round()取整函数。
L为256,L-1像素最大值255。

opencv实现

直方图均值化

1。因为直方图均值化需要单通道图像,所以需用split()函数进行分通道,最后需用 merge(bgr, 3, bgr_res);函数合并通道。
代码如下

Mat img = imread("D:\\\\2.jpg");
    Mat bgr[3];
    split(img, bgr);

2。opencv提供均值化函数,计算的必为单通道的图像。

#include "opencv2/imgproc/imgproc.hpp" //直方图均值化函数头件for (int i = 0;i < 3;i++)
equalizeHist(bgr[i], bgr[i]);

3。注意计算直方图时,计算的必为单通道的图像。

    MatND hist;//直方图
    int channels[] = { 0 };//所传图像通道
    int dims = 1;//直方图维数
    int histSize[] = { 256,256 };//直方图大小256*256的正方形
    float granges[] = { 0, 255 };//直方图搜索像素范围
    const float *ranges[] = { granges };//因为有多维度的直方图所以,要将范围以指针形式传出。比如,如果二维就可以再传个范围
    calcHist(&image, 1, channels, Mat(), hist, dims, histSize, ranges);/*第一个参数计算图像,第二个参数为所传图像个数,
    第四个参数,为掩码统计部分图像时用(统计整幅图像则按上所填即可),其余参数均已说明*/

4。计算完成我们现在需要显示直方图。

int scaleY = 1, scaleX = 1;
    Mat showImage(scaleY * 256, scaleX * 256, CV_8U, Scalar(255));
    int i;
    double maxValue = 0;
    minMaxLoc(hist, 0, &maxValue, 0, 0);
    for (i = 0; i < 256; i++)
    {
        float value = hist.at<float>(i);
        int intensity = saturate_cast<int>(256 * scaleY - 256 * scaleY * (value / maxValue));
        rectangle(showImage, Point(i*scaleX, scaleY * 256 - 1), Point((i + 1)*scaleX - 1, intensity), Scalar(0));
    }

简单解释一下scale为最终显示直方图的的规格。1为 256*256;
hist.at(i);(为访问hist矩阵元素的值,即为像素为(i)的值有多少个);
minMaxLoc计算出hist图的最大值并传入maxValue;
for循环为在直方图上刻画一个个小矩形条;

声明: 画图的代码参考了网上的一些优秀的代码。
这样就完成了直方图均值化。

完整源码如下

#include<iostream>  
#include <opencv2/core/core.hpp>  
#include <opencv2/highgui/highgui.hpp>  
#include "opencv2/imgproc/imgproc.hpp" //直方图均值化函数头文件
using namespace std;
using namespace cv;

MatND getHistogram(Mat &image);
Mat getHistogramImage(Mat &image, int scaleX, int scaleY);
int main()
{
    Mat img = imread("D:\\乱\\2.jpg");
    Mat bgr[3];
    Mat bgr_res;
    /**********************************************/

    split(img, bgr);


    Mat hist1 = getHistogramImage(bgr[0], 1, 1);

    for (int i = 0;i < 3;i++)
    equalizeHist(bgr[i], bgr[i]);

    Mat hist2 = getHistogramImage(bgr[0], 1, 1);


    merge(bgr, 3, bgr_res);
    namedWindow("原直方图");
    imshow("原直方图", hist1);
    namedWindow("输出直方图");
    imshow("输出直方图", hist2);
    namedWindow("输出均值化后图");
    imshow("输出均值化后图", bgr_res);
    waitKey(0);
    return 0;
}




Mat getHistogramImage(Mat &image, int scaleX = 1, int scaleY = 1) 
{
    MatND hist;
    int channels[] = { 0 };
    int dims = 1;
    int histSize[] = { 256,256 };
    float granges[] = { 0, 255 };
    const float *ranges[] = { granges };
    calcHist(&image, 1, channels, Mat(), hist, dims, histSize, ranges);



    Mat showImage(scaleY * 256, scaleX * 256, CV_8U, Scalar(255));
    double maxValue = 0;
    minMaxLoc(hist, 0, &maxValue, 0, 0);
    for (int i = 0; i < 256; i++)
    {
        float value = hist.at<float>(i);
        int intensity = saturate_cast<int>(256 * scaleY - 256 * scaleY * (value / maxValue));
        rectangle(showImage, Point(i*scaleX, scaleY * 256 - 1), Point((i + 1)*scaleX - 1, intensity), Scalar(0));
    }
    return showImage;

}
2019-08-30 13:12:16 qq_17592003 阅读数 367
  • 机器学习之概率与统计推断

    本课程讲解机器学习算法所需概率和统计推断知识。概率部分包括概率公理及推论、条件概率、贝叶斯公式、随机变量及其概率函数(CDF/pdf)、常用概率分布及其均值、方差;统计推断部分包括大数定律和中心极限定理、极大似然估计、贝叶斯估计,估计的评价、偏差-方差平衡。课程还会讲解假设检验的基本概念。

    20162 人正在学习 去看看 AI100讲师

[Matlab]实现对图像的均值滤波

软件环境 matlab R2017a

搜了不少关于使用滤波器的文章,都是直接调用现有函数,我在这里简单实现了均值滤波器


问题背景:实现复杂明暗条件下的图像二值化

例如要把这张图片二值化,用于后续识别 使用全局的阈值划分,可能会得到以下结果 一个更极端的例子
在这里插入图片描述 左下角的区域被错误处理 在这里插入图片描述

显然,我们希望得到如下结果
在这里插入图片描述
要得出这样的结果就需要对暗处进行补偿、降低过曝处亮度,因此有了滤波器的方案


理论基础

均值滤波器相关理论

  1. 基本原理是把数字图像或数字序列中一点的值用该点的一个邻域中各点的均值代替,让周围的像素值接近的真实值,从而消除孤立的噪声点
  2. 方法是用某种结构的二维滑动窗口,将板内像素均值设为中心点的值

方案实施

  1. 举一个使用3*3的正方形窗口的例子,中心点取整个窗口中所有点的均值,实际常用图片宽度的1/16作为窗口半径

关于边界点的均值,提供3种处理方法供参考

  • 可以将矩阵向外扩充一圈,其值可以由某种算法产生(例如全填0或者是通过当前边界已有的值计算出)
  • 可以只计算窗口内有值的像素
  • 不改变(如下图)
    在这里插入图片描述
  1. 对第一张灰度图片全部做如此运算后可以得到一个带有各区域明暗信息的图片
    在这里插入图片描述

  2. 如果我们对它取反,这个图片就成为了一个亮度补偿数据,与原图片相加,可以得到在这里插入图片描述
    至此,我们的目的基本达到了,后续只需做简单处理可得到对比度更高的图像


matlab代码

clear;clc;
I = im2double(rgb2gray(imread('C:\Users\Bob Xiao\Desktop\3.png')));
% I(1,1)
[rows, cols] = size(I);
add = floor(cols/16);
windowSize = add*2+1;
newImg = padarray(I, [add,add]);    %填充边界之后的图片

bgImg = zeros(rows,cols);
for i=add+1:add+rows
    for j=add+1:add+cols
        myWin = newImg(i-add:i+add,j-add:j+add);
        bgImg(i-add,j-add) = AvgWin(myWin);
    end
end

pImg = I + bgImg;
            
figure(1);
subplot(2,2,1);
imshow(I);
subplot(2,2,2);
imshow(newImg);
subplot(2,2,3);
imshow(bgImg);
subplot(2,2,4);
imshow(pImg);

function [M] = AvgWin(IN)
% 传入一个矩阵,求均值
avg = mean(mean(IN));
M = avg;
end

写在后面:这个算法的时间复杂度非常高,达O(mnp2),(其基本操作:求窗口均值,内部的时间复杂度为O(n^2)),因而不适合实际应用。
Note:另有积分图方法,只需遍历一次图片,时间复杂度仅为O(mn)。

2019-09-14 16:40:08 qq_26413875 阅读数 213
  • 机器学习之概率与统计推断

    本课程讲解机器学习算法所需概率和统计推断知识。概率部分包括概率公理及推论、条件概率、贝叶斯公式、随机变量及其概率函数(CDF/pdf)、常用概率分布及其均值、方差;统计推断部分包括大数定律和中心极限定理、极大似然估计、贝叶斯估计,估计的评价、偏差-方差平衡。课程还会讲解假设检验的基本概念。

    20162 人正在学习 去看看 AI100讲师

在训练神经网络的过程中,通常需要对原始数据进行中心化(Zero-centered或者Mean-subtraction(subtraction表示减去))处理和标准化(Standardization或Normalization)处理。下面,我将介绍这两个操作的作用。

零均值化/中心化

在深度学习中,训练网络时使用的图片,通常会先对它进行零均值化(zero-mean) / 中心化,即让所有训练图片中每个位置的像素均值为0,使得像素值范围变为[-128,127],以0为中心。
零均值化:是指变量减去它的均值
优点:在反向传播中加快网络中每一层权重参数的收敛;
还可以增加基向量的正交性。

标准化/归一化

不同评价指标往往具有不同的量纲和量纲单位,这样将无法对结果进行分析,难以对结果进行衡量,为了消除指标之间的量纲影响,需要对数据进行标准化处理,以解决数据指标之间的可比性。
标准化:是指变量减去它的均值,再除以标准差
优点:归一化后加快了梯度下降求最优解的速度;
归一化有可能提高精度。

没有更多推荐了,返回首页