迭代模型

第十一章-CRF的奇妙之处

匿名 (未验证) 提交于 2019-12-03 00:09:02
上篇中,我们了解到HMM的相关知识,并且知道HMM属于概率有向图模型,接下来,让我们一起学习总结概率无向图模型――条件随机场(Conditional Random Field, CRF)。 概率无向图模型又称为马尔可夫随机场,是一个可以由无向图表示的联合概率分布。 \[ 设有联合概率分布P(Y),由无向图G=(V,E)表示,V表示结点集合,E表示边集合,\\在图G中,结点表示随机变量,边表示随机变量之间的依赖关系。如果联合概率分布P(Y)满足\\成对、局部或全局马尔可夫性,就称此联合概率分布为概率无向图模型或马尔可夫随机场。 \] 如图上,一共有10个结点(即10个随机变量),任意找两个没有边直接连接的结点,假设有两个随机变量(u,v)没有边相连,剩下的8个随机变量记为O,当给定O时,u和v是独立的,即P(u,v|O)=P(u|O)P(v|O)。 如上图,任意找一个结点v,与v有边相连的所有结点记为W,其余5个结点记为O,当给定W时,v和O是独立的,即P(v,O|W)=P(v|W)P(O|W)。 一共有8个结点(即有8个随机变量),取中间两个随机变量记为集合C,当将集合C从图中删掉之后,那么剩下的6个结点分成了两个部分,可知左边的3个结点和右边的3个结点没有任何边将它们相连,当给定C时,A和B是独立的,即P(A,B|C)=P(A|C)P(B|C)。 注意

【吴恩达课后作业】Course 1-神经网络与深度学习-第四周编程作业

匿名 (未验证) 提交于 2019-12-02 23:43:01
前言 一、整个流程 1、处理数据 先下载数据: 点这里 ,提取码:smqn 提取数据,得到训练集,训练标签,测试集,测试标签,类别 import numpy as np import h5py #与H5文件中存储的数据集进行交互的常用软件包 def load_dataset(): train_dataset=h5py.File('datasets/train_catvnoncat.h5','r') train_set_x_orig=np.array(train_dataset['train_set_x'][:]) train_set_y_orig=np.array(train_dataset['train_set_y'][:]) test_dataset=h5py.File('datasets/test_catvnoncat.h5','r') test_set_x_orig=np.array(test_dataset['test_set_x'][:]) test_set_y_orig=np.array(test_dataset['test_set_y'][:]) classes=np.array(test_dataset['list_classes'][:]) train_set_y_orig=train_set_y_orig.reshape((1,train_set_y_orig

TENSORFLOW中基本概念的理解

匿名 (未验证) 提交于 2019-12-02 23:41:02
TensorFlow 里的一些概念并不straightforward。在这里我把自己经过这一段时间学习的一些理解写下来,希望能帮到其他人。 TensorFlow是一个机器学习框架,它的程序结构当然也都是为深度学习准备的。我们先来看一下一个机器学习的过程是怎样的: 问题 用户要解决一个多分类问题。以一个普通神经网络为例,用户有100条样本记录,每个记录里有8个feature,f1-f8。最终要把一个样本分为3个分类中的一个c1-c3。 网络设计 首先我们要做的就是设计这个网络,比如我们的输入层有8个神经元,一个隐藏层,有16个神经元,一个输出层有3个神经元。 输出层我们用给一个softmax来做分类。 定义loss函数 我们用交叉熵函数来定义loss 减少loss 我们通过loss值来计算梯度,并进行反向传播 多次迭代 正向传播->计算loss->减少loss(反向传播)->正向传播->计算loss->减少loss(反向传播)->… 这样经过多次迭代后loss越来越小。模型越来越精确。 下边我们来看TensorFlow是怎么帮助我们完成上边工作的。我们在进行正向传播是,计算的数字其实来自两个部分, 1. 输入的数据,以及每层的输出。他们每次迭代都是独立的。 2. 网络的参数,每次迭代他们都是在上次迭代的基础上根据梯度和学习率不断做修正的。 Variable

MLP手写数字识别实现

匿名 (未验证) 提交于 2019-12-02 23:36:01
手写数字识别是一个多分类问题,共有10个分类,每个手写数字图像的类别标签是0~9中的其中一个数。例如下面这三张图片的标签分别是0,1,2。 任务:利用sklearn来训练一个简单的全连接神经网络,即多层感知机(Multilayer perceptron,MLP)用于识别数据集DBRHD的手写数字。 DBRHD数据集的每个图片是一个由0或1组成的32*32的文本矩阵; 多层感知机的输入为图片矩阵展开的1*1024个神经元。 MLP输出:“one-hot vectors” 一个one-hot向量除了某一位的数字是1以外其余各维度数字都是0。 图片标签将表示成一个只有在第n维度(从0开始)数字为1的10维向量。比如,标签0将表示成[1,0,0,0,0,0,0,0,0,0,0]。即,MLP输出层具有10个神经元。 MLP的输入与输出层,中间隐藏层的层数和神经元的个数设置都将影响该MLP模型的准确率。 在本实例中,我们只设置一层隐藏层,在后续实验中比较该隐藏层神经元个数为50、100、200时的MLP效果。 本实例的构建步骤如下: 步骤1:建立工程并导入sklearn包 步骤2:加载训练数据 步骤3:训练神经网络 步骤4:测试集评价 1)创建sklearnBP.py文件 2)在sklearnBP.py文件中导入sklearn相关包 import numpy as np #导入numpy工具包

Python连载38-协程、可迭代、迭代器、生产者消费者模型

匿名 (未验证) 提交于 2019-12-02 22:51:30
一、生产者消费者模型 import multiprocessing from time import ctime def consumer ( input_q ): print ( "Into consumer:" , ctime ()) while True : #处理项 item = input_q . get () print ( "pull" , item , "out of q" )#此处替换为有用的工作 input_q . task_done ()#发出信号通知任务完成 print ( "Out of consumer:" , ctime ()) #此句未执行,因为q.join()收集到四个task_done()信号后,主进程启动 def producer ( sequence , output_q ): print ( "Into producer:" , ctime ()) for item in sequence : output_q . put ( item ) print ( "put" , item , "into_q" ) print ( "Out of producer:" , ctime ()) #建立进程 if __name__ == "__main__" : q = multiprocessing . JoinableQueue ()

【转载】【收藏】机器学习与深度学习核心知识点总结

耗尽温柔 提交于 2019-12-02 19:02:56
原文地址: https://cloud.tencent.com/developer/article/1526902 数学 1.列举常用的最优化方法 梯度下降法 牛顿法 拟牛顿法 坐标下降法 梯度下降法的改进型如AdaDelta,AdaGrad,Adam,NAG等。 2.梯度下降法的关键点 梯度下降法沿着梯度的反方向进行搜索,利用了函数的一阶导数信息。梯度下降法的迭代公式为: 根据函数的一阶泰勒展开,在负梯度方向,函数值是下降的。只要学习率设置的足够小,并且没有到达梯度为0的点处,每次迭代时函数值一定会下降。需要设置学习率为一个非常小的正数的原因是要保证迭代之后的x k +1位于迭代之前的值x k 的邻域内,从而可以忽略泰勒展开中的高次项,保证迭代时函数值下降。 梯度下降法只能保证找到梯度为0的点,不能保证找到极小值点。迭代终止的判定依据是梯度值充分接近于0,或者达到最大指定迭代次数。 梯度下降法在机器学习中应用广泛,尤其是在深度学习中。AdaDelta,AdaGrad,Adam,NAG等改进的梯度下降法都是用梯度构造更新项,区别在于更新项的构造方式不同。对梯度下降法更全面的介绍可以阅读SIGAI之前的文章“ 理解梯度下降法 ”。 3.牛顿法的关键点 牛顿法利用了函数的一阶和二阶导数信息,直接寻找梯度为0的点。牛顿法的迭代公式为: 其中H为Hessian矩阵,g为梯度向量

Python:range 对象并不是迭代器

时间秒杀一切 提交于 2019-12-02 14:29:45
简评: 迭代器(iterator)是惰性可迭代对象(lazy iterable),range 函数在 Python 3 中是一个惰性的可迭代对象,那么 range 是不是迭代器呢?为什么。 TLNR:Python 3 中的 range 对象(Python 2 中的 xrange 对象)是 lazy 的,但 range 对象却不是迭代器。 是的,这让人很困惑 当谈论 Python 中的迭代器(iterator)和可迭代对象(iterable)时,你很可能会听到有人重复 range 是迭代器的误解。我认为这是非常严重误解, 如果你认为 range 对象是迭代器,那么你关于「迭代器是如何运行」的心智模型还不够清楚。从某种意义上来说,range 和迭代器都是「惰性」的,但它们是以相当不同的方式实现「惰性」的 什么是迭代器(iterator) 在 Python 中,可迭代对象就是你可以迭代的任何东西,而迭代器就是实际迭代的东西。 Iter-ables are able to be iterated over. Iter-ators are the agents that perform the iteration. 可以使用 iter 函数从任何可迭代对象中获取迭代器: <ignore_js_op> 一旦有了迭代器,可以用它做的唯一的事情就是获得它的下一个元素: <ignore_js_op>

深度学习基础——Epoch、Iteration、Batchsize

吃可爱长大的小学妹 提交于 2019-12-02 12:23:18
原文地址: https://www.cnblogs.com/Johnny-z6951/p/11201081.html 梯度下降是一个在机器学习中用于寻找较佳结果(曲线的最小值)的迭代优化算法。梯度的含义是斜率或者斜坡的倾斜度。下降的含义是代价函数的下降。算法是迭代的,意思是需要多次使用算法获取结果,以得到最优化结果。梯度下降的迭代性质能使欠拟合演变成获得对数据的较佳拟合。   梯度下降中有一个称为学习率的参量。刚开始学习率较大,因此下降步长更大。随着点的下降,学习率变得越来越小,从而下降步长也变小。同时,代价函数也在减小,或者说代价在减小,有时候也称为损失函数或者损失,两者是一样的。(损失/代价的减小是一个概念)。只有在数据很庞大的时候,我们才需要使用epochs,batchsize,iteration。在这种情况下,一次性将数据输入计算机是不可能的。因此,为了解决这个问题,我们需要把数据分成小块,一块一块的传递给计算机,在每一步的末端更新神经网络的权重,拟合给定的数据。 batchsize :批量大小(批量尺寸)。   即,批量大小将决定我们一次训练的样本数目。batchsize将影响到模型的优化程度和速度。其作用主要在于: batchsize的正确选择是为了在内存效率和内存容量之间寻找最佳平衡。 相对于正常数据集,如果Batch_Size过小,训练数据就会非常难收敛

感知机原理

ε祈祈猫儿з 提交于 2019-12-02 06:47:27
感知机可以说是最古老的分类方法之一,早在1957年就已经提出。从今天来看它的分类模型在大多数时候泛化能力不强,但是它的原理却值得好好研究。因为研究透了感知机模型,学习支持向量机的话会降低不少难度。同时如果研究透了感知机模型,再学习神经网络,深度学习,也是一个很好的起点。 1.感知机模型 感知机的思想很简单,比如我们在一个平台上有很多的男孩女孩,感知机的模型就是尝试找到一条直线,能够把所有的男孩和女孩隔离开。放到三维空间或者更高维的空间,感知机的模型就是尝试找到一个超平面,能够把所有的二元类别隔离开,如下图这样。 当然你可能会想,如果我们找不到这么一条直线的话怎么办?找不到的话那就意味着类别线性不可分,也就意味着感知机模型不适合你的数据的分类。使用感知机一个最大的前提,就是数据是线性可分的。这严重限制了感知机的使用场景。它的分类竞争对手在面对不可分的情况时,比如支持向量机可以让数据在高维可分,神经网络可以通过激活函数和增加隐藏层来让数据可分。支持向量机的分类方法如下图所示 用数学的语言来说,如果我们有m个样本,每个样本对应于n维特征和一个二元类别输出,如下: ( x 1 ( 0 ) , x 2 ( 0 ) . . . x n ( 0 ) , y 0 ) , ( x 1 ( 1 ) , x 2 ( 1 ) . . . x n ( 1 ) , y 1 ) . . . ( x 1 ( m

机器学习:集成学习

限于喜欢 提交于 2019-12-02 05:29:58
集成学习 基本概念 集成学习(Ensemble Learning)的 思想 是将若干个学习器(分类|回归)组合之后产生一个新的学习器, 如何产生“好而不同”的个体学习器,是集成学习研究的核心 ; 一般性用于集成的学习器都为 弱学习器 ,即学习器的预测精度不需要太高但是应该好于随机预测的结果; 集成学习 算法的成功 在于保证了弱分类器的多样性(Diversity),即学习器之间具有 差异性 弱分类器间存在一定的差异性,会导致分类的边界不同,即会存在错误;但当多个弱分类器合并后,就可以得到更加合理的边界,能减少错误率,实现更好的效果; 对于数据集过大/过小,可以进行划分/有放回抽样的操作产生不同的数据子集,然后使用数据子集训练不同的学习器,最后合并成一个大的学习器 若数据划分边界过于复杂,使用线性模式很难描述,可以训练多个模型,后将模型进行合并; 对于多个异构的特征集的时候,很难进行融合,那么可以考虑每个数据集构建一个学习器模型,然后将多个模型融合 常见的集成算法有: Bagging Boosting Stacking 按照集成方式划分: 串行集成方法:通过串行的方法生成基础模型(如AdaBoost);串行集成的 基本动机 是利用基础模型之间的依赖,给被错分的样本一个较大的权重来提升性能; 并行集成方法:并行的生成基础模型(若Random Forest);并行集成的 基本动机