人工智能数学基础:两个存在映射关系的随机变量的概率密度函数关系研究

【数字图像处理】直方图均衡化 综上所述,CLAHE 是一种比较优秀的图像增强算法,可以有效地保留图像的局部细节信息,但其计算量较大,对算法的参数设置较为敏感,需要进行合理的参数设置和优化。限制对比度自适应直方图均衡化(CLAHE)是一种改进的直方图均衡化算法,它通过在图像的局部区域内进行直方图均衡化,以保留图像的局部细节信息。直方图均衡化的目的是将一幅图像的直方图变成一个均匀分布的直方图,从而增强图像的对比度。总的来说,直方图均衡化的数学原理就是通过对原始图像的直方图进行变换,将其变成一个均匀分布的直方图,从而增强图像的对比度。 阅读详情

一、引言

在《数字图像处理》(《《数字图像处理》第三章学习总结感悟2-1:直方图均衡(Histogram Equalization)》)中有这样一段描述:
由基本概率论得到的一个基本结果是,如果pr(r)和T(r)已知,且在感兴趣的值域上T(r)是连续(continuous)且可微的(differentiable),则变换(映射)后的变量s的PDF 可由下面的简单公式(formula)得到:
在这里插入图片描述

这样,我们看到,输出灰度变量s的 PDF 就由输入灰度的 PDF 和所用的变换函数s=T(r)决定。

但为什么有式(3.3-3)呢?怎么通过数学知识来证明式(3.3-3)呢?

老猿想了很久才弄明白,根据相关知识老猿试图给出推导证明。

二、两个存在映射关系的随机变量的概率密度函数关系研究

2.1、背景知识

在数学中,连续型随机变量的概率密度函数( probability density function,简称pdf)是一个描述这个随机变量的输出值在某个确定的取值点附近的可能性的函数。

累积分布函数(Cumulative Distribution Function,简称CDF),又叫分布函数,对于所有实数 ,累积分布函数定义如下:
在这里插入图片描述
即累积分布函数为随机变量出现概率小于等于x的总概率,是随机变量的取值落在某个区域之内的概率。它是概率密度函数在这个区域上的积分,能完整描述一个实随机变量的概率分布。即当概率密度函数存在的时候,累积分布函数是概率密度函数的积分。

2.2、本文讨论的一些限定

为了书写方便和便于理解,本文讨论中对函数名进行如下限定:

  • 函数名如果出现两个字母,第二个字母为下标
  • p开头的函数表示概率密度函数或累计分布函数,当表示累积分布函数时,P需要大写,另外在函数参数中用变量小于等于指定值形式表示
  • 大写的函数名字母表示为对应小写字母的函数在其区间上的原函数,小写字母函数是大写字母函数的导数,例如p和P的区别,p表示概率密度函数,P表示累积分布函数,P是p的积分,即累积分布函数是概率密度函数的积分,与二者的定义相符
  • 字母+‘_1’的函数表示为字母对应函数的反函数,这是为了输入方便用的,如:g_1是函数g的反函数。
2.3、具体研究内容

假设有:

  1. 两个概率密度函数fy(y)=p(y) 和fx(x)=p(x),x、y∈[0,+∞),在区间[0,+∞)上二者对应的原函数为:
    FY(y)= P(Y≤y)、FX(x) = P(X≤x),即二者分别对应于随机变量Y和X出现概率小于y和x的累积分布函数。
  2. 在区间[0,+∞)上,存在有X到Y的映射函数y=g(x),g(x)为严格单调递增(或递减)函数,x=g_1(y)是其反函数。

已知函数fx(x)、g(x),求函数fy(y)。

解:
考虑g(x)为严格单调递增的情况,由假设可得:

  1. 等式1: FY(y)= P( Y ≤ y ) = P {g(X) ≤ y} = P { X ≤ g_1(y)} = FX(g_1(y))
  2. 对等式1两边求导可得:fy(y) = fx(g_1(y))(g_1’(y)) = fx(x)/g’(x) = fx(x) (dx/dy)
    注:利用了符合函数求导公式及反函数求导(请参考《人工智能数学基础–导数1:基础概念及运算》),另外y=g(x)的导数g’(x)=dy/dx

如果g(x)为严格单调递减的情况,由假设可得:

  1. 等式2: FY(y)= P( Y ≤ y ) = P {g(X) ≤ y} = 1 - P { X ≤ g_1(y)} = 1-FX(g_1(y))
  2. 对等式2两边求导可得:fy(y) = - fx(g_1(y))(g_1’(y)) = -fx(x)/g’(x) = fx(x)/|g’(x)| = fx(x) |dx/dy|
    注:由于g(x)是单调递减的,所以其导数为负值,该结论可以由导数的定义推断出来,也可以参考《人工智能数学基础:利用导数判断函数单调性、凹凸性、极值、最值和描绘函数图形》

综合g(x)单调递增和单调递减两种情况,可以得出:
fy(y) = fx(x)/|g’(x)| = fx(x) |dx/dy|

通常把J=dx/dy称为雅可(Jacco)比。

三、小结

本文介绍了两个存在映射关系的随机变量的概率密度函数之间的关系,并利用概率论和微积分的相关知识介绍了推导过程。

如对文章内容存在疑问,可在博客评论区留言,或扫描博客左边的二维码关注:老猿Python 微信公号发消息咨询。
参考资料: 罗腾飞 《随机信号分析与处理》

更多人工智能数学基础请参考专栏《人工智能数学基础》。

更多图像处理请参考专栏《OpenCV-Python图形图像处理》及《图像处理基础知识》的介绍。

写博不易,敬请支持:

如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!

关于老猿的付费专栏

  1. 付费专栏《https://blog.youkuaiyun.com/laoyuanpython/category_9607725.html 使用PyQt开发图形界面Python应用》专门介绍基于Python的PyQt图形界面开发基础教程,对应文章目录为《 https://blog.youkuaiyun.com/LaoYuanPython/article/details/107580932 使用PyQt开发图形界面Python应用专栏目录》;
  2. 付费专栏《https://blog.youkuaiyun.com/laoyuanpython/category_10232926.html moviepy音视频开发专栏 )详细介绍moviepy音视频剪辑合成处理的类相关方法及使用相关方法进行相关剪辑合成场景的处理,对应文章目录为《https://blog.youkuaiyun.com/LaoYuanPython/article/details/107574583 moviepy音视频开发专栏文章目录》;
  3. 付费专栏《https://blog.youkuaiyun.com/laoyuanpython/category_10581071.html OpenCV-Python初学者疑难问题集》为《https://blog.youkuaiyun.com/laoyuanpython/category_9979286.html OpenCV-Python图形图像处理 》的伴生专栏,是笔者对OpenCV-Python图形图像处理学习中遇到的一些问题个人感悟的整合,相关资料基本上都是老猿反复研究的成果,有助于OpenCV-Python初学者比较深入地理解OpenCV,对应文章目录为《https://blog.youkuaiyun.com/LaoYuanPython/article/details/109713407 OpenCV-Python初学者疑难问题集专栏目录 》
  4. 付费专栏《https://blog.youkuaiyun.com/laoyuanpython/category_10762553.html Python爬虫入门 》站在一个互联网前端开发小白的角度介绍爬虫开发应知应会内容,包括爬虫入门的基础知识,以及爬取优快云文章信息、博主信息、给文章点赞、评论等实战内容。

前两个专栏都适合有一定Python基础但无相关知识的小白读者学习,第三个专栏请大家结合《https://blog.youkuaiyun.com/laoyuanpython/category_9979286.html OpenCV-Python图形图像处理 》的学习使用。

对于缺乏Python基础的同仁,可以通过老猿的免费专栏《https://blog.youkuaiyun.com/laoyuanpython/category_9831699.html 专栏:Python基础教程目录)从零开始学习Python。

如果有兴趣也愿意支持老猿的读者,欢迎购买付费专栏。

老猿Python,跟老猿学Python!

☞ ░ 前往老猿Python博文目录 https://blog.youkuaiyun.com/LaoYuanPython ░
直方图处理--均衡化 图像直方图均衡化是一种常用的图像增强技术,它通过重新分配图像的像素值来提高图像的对比度和细节,在图像处理和计算机视觉领域有广泛应用,如图像增强、目标检测、人脸识别等。它是一种简单且有效的方法,特别适用于具有低对比度或灰度分布不均匀的图像,但是直方图均衡化可能会导致图像的亮度和色彩发生变化。 阅读详情

相关推荐

直方图均衡化原理及计算

直方图均衡化是基于灰度直方图的图像增强的一种方法,还有另外一种方法是直方图规定化。 均衡化的目的是将原始图像的直方图变为均衡分布的的形式,将一非均匀灰度概率密度分布图像,通过寻求某种灰度变换,变成一幅具有均匀概率密度分布的目的图像。 具体原理如下: 1、连续灰度级: 假定:r代表灰度级,P(r)为概率密度函数。r值已经过归一化处理,灰度值范围在[0,1]之间。r与P(r)之间的关系如下: ...

qq_42593220的博客 3万+

数字图像处理(17): 直方图均衡化处理

目录 1 直方图均衡化简介 1.1 直方图均衡化概念 1.2 直方图均衡化的理论基础 1.3 直方图均衡化的步骤 1.4 直方图均衡化应用场景 2 直方图均衡化-equalizeHist() 3 matplotlib.pyplot.subplot() 函数 4 matplotlib.pyplot.imshow() 函数 5 直方图均衡化对比 参考资料 1 直方图均衡...

TechArtisan6的博客 8万+

变分自动编码器的数学基础和代码实现

变分自动编码其数学推导和代码实现

maste23的博客 1709

直方图均衡化

图像直方图,是指对整个图像在灰度范围内的像素值(0-255)统计出现频率次数,据此生成的直方图,称为图像直方图或直方图。直方图反映了图像灰度的分布情况,是图像的统计学特征。也可以说,直方图是图像中像素强度分布的图形表达方式,它统计了每一个强度值所具有的像素个数。直方图均衡化是以累计分布函数为核心,将原始图像灰度直方图从比较集中的某个灰度区间,非线性地映射为在全部灰度范围内的较均匀分布,从而增强对比度。

crossoverpptx的博客 5533

Python 实战人工智能数学基础:统计学

1.背景介绍 在传统的IT行业中,数据分析是最基本也是最重要的一环。数据的采集、存储、处理、分析和呈现,从多个角度揭示信息价值。同时,计算机科学与数学的结合也促进了数据的处理,比如机器学习、深度学习等领域。然而,对于一些资产管理、金融学、医疗健康和其他生物学领域,数据的获取、加工、分析甚至模拟等更为复杂、高级的分析技术才是创新之源。这些应用场景要求对数

AI天才研究院 171

医疗机器人与手术:人工智能如何改变医疗手术方式

作者:禅与计算机程序设计艺术 随着科技的进步和发展,医疗行业也在迅速转型,通过电子化手术等技术实现对患者身体的更精准治疗。而传统的手术过程仍然存在很多不足之处,比如时间长、效率低、易出错、费用高等问题。因此,人工智能(Artificial Intelligence, AI)技术加持下的医疗机器人将会成为未来的必然趋势。基于这个趋势,本文作

AI天才研究院 2800

人工智能数学基础--概率与统计5:独立随机变量和变量替换

本文介绍了离散和连续独立随机变量的概念,以及存在一一映射关系的两个随机变量或两组随机变量之间的概率密度函数之间的关系。 f(x,y)=f1(x)f2(y)     (28) 相反地,若对所有的x和y,联合概率函数f(x,y)能够表成一个变量x的函数与一个变量y的函数的乘积(则它们是X和Y的边缘概率函数),则X和Y是独立的。若f(x,y)不能这样表示,则X和Y是不独立的。 若X和Y是连续的随机变量,对所有的x和y事件X.

老猿Python 2491

《数字图像处理》直方图均衡学习总结+感悟

本文介绍了《数字图像处理》第三章直方图均衡的主要知识点,并针对部分疑难点增加了老猿自己的感悟,直方图均衡法针对非数字图像以及数字图像都存在通用的公式,只需要数字图像和非数字图像自身的信息,二者虽然由于灰度值连续和离散的不同公式有所不同,但本质是一致的。

老猿Python 2569

人工智能数学基础专栏目录

☞ ░ 前往老猿Python博文目录 ░ 本专栏为人工智能数学基础,即将转为付费专栏,但“老猿Python”的微信公众号将免费发布。本专栏包含如下内容: 一、数学基础知识 人工智能数学基础1:三角函数的定义、公式及固定角三角函数值 人工智能数学基础2:指数、方根及对数运算公式 人工智能数学基础3:部分数学符号以及自然数、整数、有理数和实数的势 人工智能数学基础4:离差、平均差、方差、标准差、协方差、皮尔森相关系数 人工智能数学基础5:单调有界定理 人工智能数学基础6:无穷大和无穷小的大小比较以及斯特林公式

老猿Python 2959

数字图像处理:直方图匹配或规定化Histogram Matching (Specification)原理及感悟

本文介绍了连续图像和数字图像直方图匹配(直方图规定化)的原理、处理过程,并提供了案例进行了讲解。可以看到,直方图均衡处理是直方图匹配的一个重要桥梁。 最后,对于直方图规定化这个翻译个人觉得很low,个人感觉叫指定直方图更好理解,但Histogram Specification怎么翻译确实不太好把握,因此还是叫Histogram Matching直方图匹配最好。

老猿Python 2879

VM与欧姆龙PLC通讯设置实战:Fins TCP/UDP协议详解

本文详细解析了VM(VisionMaster)与欧姆龙PLC通过Fins TCP/UDP协议进行通讯的实战设置。内容涵盖网络配置、协议选择(TCP可靠性与UDP实时性)、VM端地址映射与数据点添加、以及数据接收解析流程,并提供了常见错误排查与高级调试技巧,帮助视觉与自动化工程师快速实现稳定可靠的工业通讯集成。

weixin_29172963的博客 327

随机变量、分布函数与概率密度函数的定义本质与工程实践

概率论中,随机变量、分布函数(CDF)和概率密度函数(PDF)是建模不确定性的三大基石概念。其核心不在于公式推导,而在于严谨的数学定义:随机变量是样本空间到实数集的可测映射,分布函数F_X(x)=P(X≤x)作为累积概率的客观记录仪,天然具备单调性、右连续性与极限约束;PDF则仅在F_X绝对连续时存在,本质是局部概率密度而非点概率。这些定义直接决定模型的可解释性、数值稳定性与工程鲁棒性——如传感器噪声建模需先验证ECDF是否满足极限性质,异常检测必须基于F_X而非直方图拟合的PDF。本文聚焦定义层认知,揭示

weixin_34218579的博客 398

DBSCAN聚类算法——机器学习(理论+图解+python代码)

一、前言 二、DBSCAN聚类算法 三、参数选择 四、DBSCAN算法迭代可视化展示 五、常用的评估方法:轮廓系数 六、用Python实现DBSCAN聚类算法 一、前言 去年学聚类算法的R语言的时候,有层次聚类、系统聚类、K-means聚类、K中心聚类,最后呢,被DBSCAN聚类算法迷上了,为什么呢,首先它可以发现任何形状的簇,其次我认为它的理论也是比较简单易懂的。今年在python...

huacha__的博客 20万+

数字图像处理:直方图均衡(Histogram Equalization)的原理及处理介绍

本文介绍了《数字图像处理》第三章直方图均衡的主要知识点,直方图均衡法针对非数字图像以及数字图像都存在通用的公式,只需要数字图像和非数字图像自身的信息,二者虽然由于灰度值连续和离散的不同公式有所不同,但本质是一致的。本文的介绍是完全基于《数字图像处理》的介绍,其中有些内容对于不熟悉数字图像处理的人员理解可能存在困难,请等待老猿后续的系列博文答疑解惑。

老猿Python 1万+

西门子S7-1200与汇川SV660F伺服Profinet通讯调试实战

在工业自动化领域,Profinet作为工业以太网标准协议,凭借其高实时性和灵活组网能力,已成为伺服驱动器与PLC通讯的主流选择。其核心原理是通过设备名识别、IP分配以及标准报文(如111速度报文、105定位报文)传输控制字与状态字,实现驱动器的精准控制。相比传统脉冲或CANOpen方案,Profinet直连省去了协议转换网关,降低了成本与故障点,尤其适用于绕线设备、包装机械等中小型单轴或多轴运动控制系统。本文以西门子S7-1200 PLC搭配汇川SV660F伺服为例,完整梳理了从GSDMD组态、InoDri

weixin_29184371的博客 222

SIwave串扰分析保姆级教程:从Allegro文件导入到结果解读,手把手教你排查PCB信号问题

本文提供SIwave串扰分析的详细教程,从Allegro文件导入到结果解读,手把手教你排查PCB信号问题。涵盖环境准备、参数配置、串扰扫描技巧及实战案例,帮助工程师精准定位和解决高速PCB设计中的串扰问题,提升信号完整性分析能力。

weixin_42620913的博客 255

【概率论】3-3:累积分布函数(Cumulative Distribution Function)

title: 【概率论】3-3:累积分布函数(Cumulative Distribution Function) categories: Mathematic Probability keywords: Cumulative Distribution Function 概率累计函数 Quantial 分位数 toc: true date: 201...

weixin_30562507的博客 2372

银河飞腾FT6678实战指南:OpenMP多核并行编程优化技巧

本文详细介绍了在银河飞腾FT6678多核处理器上使用OpenMP进行并行编程的实战技巧与优化方法。从基础语法到环境配置,再到性能优化的五大核心技巧,包括循环并行化、并行粒度控制、reduction子句使用等,帮助开发者充分发挥FT6678的8核计算能力。通过实际案例展示如何将图像处理算法从200ms优化到28ms,并深入探讨了任务调度、内存访问优化等进阶主题。

weixin_29234423的博客 285

数字图像直方图处理涉及的数学知识介绍

本文介绍了直方图处理相关的直方图知识、概率统计知识,要真正理解直方图处理还需要属性导数、微分和不定积分相关的概念以及计算公式。

老猿Python 2554

MDK开发篇:基于立创逻辑派FPGA-G1与Cortex-M1软核的按键控制LED实战

本文详细介绍了基于立创逻辑派FPGA-G1开发板与高云Cortex-M1软核的完整开发流程。通过Gowin云源软件配置软核系统与GPIO外设,并在Keil MDK环境中编写按键控制LED的C程序,最终实现程序固化与上电自启动。教程涵盖硬件配置、软件开发、在线调试与固化部署全步骤,帮助STM32开发者快速上手FPGA软核开发。

weixin_42103128的博客 147

图像处理入门007:图像处理中的数学基础:线性代数与卷积

一种:把 OpenCV 当黑盒,调用,效果不对就乱调参数;另一种:理解每个像素是怎么被周围邻域"加权平均"的,理解核翻转、边界填充、stride 的含义。前者能干活,后者能解难题。一旦遇到自定义核(比如 ISP 上的锐化)、深度学习反向传播、医学图像重建,你就必须把卷积、相关、矩阵乘法这些基本功捡回来。线性代数三件套:向量点积、矩阵乘法、线性变换;2D 卷积的数学定义:核翻转、滑动窗口、边界填充。并手写一个,验证它与和的结果完全一致(误差 < 1e-9)。f∗gn∑m−∞∞f。

专注:太空算力、AI infra、异构调度、大模型成本工程 384

人工智能学习路线全解析

在当今数字化飞速发展的时代,人工智能(AI)无疑是最具变革性和影响力的技术领域之一。从智能语音助手为我们安排日常事务,到图像识别技术保障安防监控,再到自动驾驶汽车重塑交通出行,人工智能已经渗透到生活的方方面面。对于许多渴望踏入这个充满魅力领域的学习者来说,如何规划一条清晰、高效的学习路线成为了关键问题。本文将全方位、深入地为大家剖析人工智能的学习路线,涵盖基础学科、核心技术、实践项目以及进阶拓展等多个关键要点,助力大家开启人工智能的学习之旅。

爱好技术的小老头 1395

C语言实现惯导更新算法(机械编排)

四元数可用于描述刚体转动或姿态变换,与方向余弦阵相比,表达简洁。四元数是一个包含四个元素的列向量,列向量的第一个元素表示刚体围绕旋转轴转过的角度大小,其余3个元素代表了旋转轴的方向。

十八与她的博客 1730

《概率论与数理统计教程》中的一些知识点

本文主要讨论《概率论与数理统计教程》中一些比较有趣的知识点。

weixin_43565540的博客 763

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

人工智能小白转型学习指南

在当今数字化时代,人工智能(AI)已经成为推动各行业发展的核心力量。无论是医疗、金融、教育还是娱乐,AI 的应用无处不在。对于初学者来说,转型到人工智能领域可能看似困难,但通过系统的学习和实践,完全有可能实现这一目标。本文将为你提供一份详细的学习指南,帮助你从零开始,逐步掌握人工智能相关技能,并为未来的职业发展打下坚实基础。

2503_91665385的博客 1056

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

用归一校验办法优化AI幻觉推理:从原理到实践

AI幻觉,归一处理,

2501_92697833的博客 700

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

上一篇: 数字图像处理:直方图均衡(Histogram Equalization)的原理及处理介绍
下一篇: 数字图像直方图处理涉及的数学知识介绍
LaoYuanPython
LaoYuanPython 2020年博客之星Top3 2020年博客之星Top3 领域专家: Python技术领域 领域专家: Python技术领域
博客等级 码龄8年 15万+粉丝 1324原创
评论 10
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LaoYuanPython

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值