Tensorflow系列3:多层神经网络--解决非线性问题

Tensorflow系列3:多层神经网络--解决非线性问题,第1张

这里拿医院的数据做一个简单的线性分类任务,任务特征是病人的年龄和肿瘤大小,任务目标是病人的肿瘤是良性的还是恶性的。

补充知识:

补充知识:

MSE 的公式为:

cross entropy 一般用于分类问题,表达的意思是样本属于某一类的概率,公式为:

这里用于计算的a也是经过分布统一化处理的(或者是经过Sigmoid函数激活的结果),取值范围在0~1之间。

在tensorflow中常见的交叉熵函数有:Sgimoid交叉熵,softmax交叉熵,Sparse交叉熵,加权Sgimoid交叉熵

MSE的预测值和真实值要控制在同样的数据分布内,假设预测值经过Sigmoid激活函数得到取值范围时候0 1之间,那么真实值也要归一化成0 1之间。

在tensorflow中没有单独的MSE函数,可以自己组合:

MSE=tf.reduce_mean(tf.square(logits-outputs))

softmax_cross_entropy_with_logits 函数,必须要自己定义,比如:

loss = tf.reduce_mean(-tf.reduce_sum(labels*tf.log(logits_scaled),1))

损失函数的选取取决于输入标签数据的类型:如果输入是实数、无界的值,多使用MSE;如果输入标签是位矢量(分类标志),使用cross entropy比较合适

补充知识点:

reshape() 函数接受-1时,该行(列)数可以为任意值。[-1,1]代表行数随意,列数变成1。

模型生成的z用公式可以表示成z=x1w1+x2w2+b,如果将x1和x2映射到直角坐标系中的x和y坐标,那么z就可以被分为小于0和大于0两部分。当z=0时,就代表直线本身。

这次再在刚刚的二分类基础上再增加一类,变成三类,可以使用多条直线将数据分成多类。

生成的X,Y的数据样本如下内容:

常用的激活函数比如sigmoid,relu,tanh输出值只有两种,面对以上多分类问题,就需要使用softmax算法。该算法的主要应用就是多分类,而且是互斥的,即只能属于某一类。(对于不是互斥的分类问题,一般使用多个二分类来组成)

补充知识:

也可以画出更直观的图示:

例如:

对于线性不可分的数据样本,可以使用多层神经网络来解决,也就是在输入层和输出层中间多加一些神经元,每一层可以加多个,也可以加多层。

在模型训练过程中会出现欠拟合和过拟合的问题,欠拟合的原因并不是模型不行,而是我们的学习方法无法更精准地学习到适合的模型参数。模型越薄弱,对训练的要求就越高,但是可以采用增加节点或者增加隐藏层的方式,让模型具有更高的拟合性,从而降低模型的训练难度。过拟合的表现在模型在训练集上的表现非常好,loss很小;但是在测试集上的表现却非常差。

避免过拟合的方法很多:常用的有early stopping、数据集扩增、正则化、dropout

本质就是加入噪声,在计算loss时,在损失后面再加上意向,这样预测结果与标签间的误差就会受到干扰,导致学习参数W和b无法按照目标方向来调整,从而实现模型与训练数据无法完全拟合的效果,从而防止过拟合。

这个添加的干扰项必须具有如下特性:

这里有两个范数L1和L2:

tf.reduce_sum(tf.abs(w))

tf.nn.l2_loss(t,name=None)

拿上面的异或数据做举例,dropout方法就是在刚刚的layer_1层后面再添加一个dropout层。

实际训练时,将keep_prob设置成0.6,意味着每次训练将仅允许0.6的节点参与学习运算。由于学习速度这样就变慢了,可以将learning_rate调大,加快训练速度。 注意:在测试时,需要将keep_prob设置为1。

全连接神经网络是一个通用的拟合数据的框架,只要有足够多的神经元,及时只有一层hidden layer,利用常见的Sigmoid,relu等激活函数,就可以无限逼近任何连续函数。在实际使用中,如果想利用浅层神经网络拟合复杂非线性函数,就需要你靠增加的神经元个数来实现,神经元过多会造成参数过多,从而增加网络的学习难度,并影响网络的泛化能力。因此,在实际构建网络结构时,一般倾向于使用更深的模型,开减少所需要的神经元数量。

编码器(简称AE)是一种无监督的神经网络模型,最初的AE是一个三层的前馈神经网络结构,由输入层、隐藏层和输出层构成,其核心的作用是能够学习到输入数据的深层表示。自编码器最初是用来初始化神经网络的权重参数,实践证明,这种通过逐层训练加微调得到的初始化参数要比传统的对称随机初始化参数效果好,更容易收敛,并且在一定程度上缓解了BP算法在深层网络训练中出现的梯度消失问题。

当前自编码器的主要应用有两个方面,一是特征提取;另一个是非线性降维,用于高维数据的可视化。自编码器的核心设计是隐藏层,隐藏层的设计有两种方式分别是:

(1)当隐藏层神经元个数小于输入层神经元个数时,称为undercomplete。该隐藏层设计使得输入层到隐藏层的变换本质上是一种降维的 *** 作,网络试图以更小的维度去描述原始数据而尽量不损失数据信息,从而得到输入层的压缩表示。当隐藏层的激活函数采用线性函数时,自编码器也被称为线性自编码器,其效果等价于主成分分析(PCA)。

(2)当隐藏层的神经元个数大于输入层神经元个数时,称为overcomplete。该隐藏层设计一般用于稀疏编码器,可以获得稀疏的特征表示,也就是隐藏层中有大量的神经元取值为0。

降噪自编码器

降噪自编码器(DAE)其目的是增强自编码器的鲁棒性。自编码器的目标是期望是重构后的结果输出X与输入数据x相同,也就是能够学习到输入层的正确数据分布。但当输入层数据收到噪音的影响时,可能会使获得的输入数据本身就不服从原始的分布。在这种情况下,利用自编码器得到的结果也将是不正确的,为了解决这种由于噪音产生的数据偏差问题,DAE在输入层和隐藏成之间添加了噪音处理,得到新的经过逄处理后的噪音层数据为y,然后按照这个新的噪音数据y进行常规自编码器变换 *** 作。

栈式自编码器

栈式自编码器(SAE),也被称为堆栈自编码器、堆叠自编码器。是将多个自编码器进行叠加,利用上一层的隐藏层表示作为下一层的输入,得到更抽象的表示。SAE的一个很重要应用是通过逐层预训练来初始化网络权重参数,从而提升深层网络的收敛速度和减缓梯度消失的影响。对于常见的监督学习,SAE通过下面两个鸡蛋作用于整个网络。

1.逐层预训练

通过自编码器来训练每一层的参数,作为神经网络的初始化参数,利用逐层预训练的方法,首先构建多个自编码器,每一个自编码器对应于一个隐藏层。

2.微调

经过第一步的逐层预训练后,得到了网络权重参数更加合理的初始化估算,就可以像训练普通的深层网络一样,通过输出层的损失函数,利用梯度下降等方法来迭代求解最优参数

稀疏编码器

稀疏编码器的网络结构和自编码器一样,同样是一个有三层结构构成的前馈神经网络,在稀疏编码中,期望模型能够对任意的输入数据,得到隐藏层,以及输出层,并且输入数据、隐藏层、输出层门组下面两个性质。

(1)隐藏层向量是稀疏的,则向量有尽可能多的零元素

(2)输出层数据能够尽可能还原输入层数据。

现在深度学习网络模型已能够识别较为常见的自然图像。深度学习的模型随着不断的更新改进以及计算机硬件特别是 GPU 的发展,不止提高了图像分类的准确度,而且也避免了大量的人工特征提取的工作。在不久的未来,随着图像数据增多,基于深度学习对图像处理的方法很有可能成为主流图像分类技术。虽然目前基于卷积神经网络图像分类系统虽然很多,而且在识别效果上非常不错。但其中一些基本问题仍然没有得到很好的解决,主要表现在两个方面:第一、尚未形成一套完整的通用理论。现在许多识别系统都是根据特定的数据库进行特别的设计网络的深度和层次,通过不断的摸索发现最佳的参数和优化算法,人为因素比较大,也没有较系统的理论阐述影响卷积神经网络识别效果的因素。第二、现有的方法尚存在一些缺陷。特别是对自然图像进行分类识别时,对卷积神经网络的初始状态参数以及寻优算法的选取,会对网络训练造成很大影响,选择不好会造成网络的不工作,或者有可能陷入局部极小、欠拟合、过拟合等诸多问题

卷积神经网络如何解决线性不可分问题。能给我具体用文字阐述一下吗

MSE 的公式为:cross entropy 一般用于分类问题,表达的意思是样本属于某一类的概率,公式为: 这里用于计算的a也是经过分布统一化处理的(或者是经过Sigmoid函数激活的结果),取值范围在0~1之间。在tensorflow中常见的交叉熵函数有:Sgimoid交叉熵,softmax交叉熵,Sparse交叉熵,加权Sgimoid交叉熵MSE的预测值和真实值要控制在同样的数据分布内,假设预测值经过Sigmoid激活函数得到取值范围时候0 1之间,那么真实值也要归一化成0 1之间。 在tensorflow中没有单独的MSE函数,可以自己组合:MSE=tf.reduce_mean(tf.square(logits-outputs)) softmax_cross_entropy_with_logits 函数,必须要自己定义,比如:loss = tf.reduce_mean(-tf.reduce_sum(labels*tf.log(logits_scaled),1)) 损失函数的选取取决于输入标签数据的类型:如果输入是实数、无界的值,多使用MSE;如果输入标签是位矢量(分类标志),使用cross entropy比较合适 补充知识点:reshape() 函数接受-1时,该行(列)数可以为任意值。[-1,1]代表行数随意,列数变成1。模型生成的z用公式可以表示成z=x1w1+x2w2+b,如果将x1和x2映射到直角坐标系中的x和y坐标,那么z就可以被分为小于0和大于0两部分。当z=0时,就代表直线本身。这次再在刚刚的二分类基础上再增加一类,变成三类,可以使用多条直线将数据分成多类。生成的X,Y的数据样本如下内容:常用的激活函数比如sigmoid,relu,tanh输出值只有两种,面对以上多分类问题,就需要使用softmax算法。该算法的主要应用就是多分类,而且是互斥的,即只能属于某一类。(对于不是互斥的分类问题,一般使用多个二分类来组成)

也可以画出更直观的图示:例如:对于线性不可分的数据样本,可以使用多层神经网络来解决,也就是在输入层和输出层中间多加一些神经元,每一层可以加多个,也可以加多层。在模型训练过程中会出现欠拟合和过拟合的问题,欠拟合的原因并不是模型不行,而是我们的学习方法无法更精准地学习到适合的模型参数。模型越薄弱,对训练的要求就越高,但是可以采用增加节点或者增加隐藏层的方式,让模型具有更高的拟合性,从而降低模型的训练难度。过拟合的表现在模型在训练集上的表现非常好,loss很小;但是在测试集上的表现却非常差。避免过拟合的方法很多:常用的有early stopping、数据集扩增、正则化、dropout本质就是加入噪声,在计算loss时,在损失后面再加上意向,这样预测结果与标签间的误差就会受到干扰,导致学习参数W和b无法按照目标方向来调整,从而实现模型与训练数据无法完全拟合的效果,从而防止过拟合。这个添加的干扰项必须具有如下特性:这里有两个范数L1和L2:tf.reduce_sum(tf.abs(w)) tf.nn.l2loss(t,name=None) 拿上面的异或数据做举例,dropout方法就是在刚刚的layer_1层后面再添加一个dropout层。实际训练时,将keep_prob设置成0.6,意味着每次训练将仅允许0.6的节点参与学习运算。由于学习速度这样就变慢了,可以将learning_rate调大,加快训练速度。 注意:在测试时,需要将keep_prob设置为1。 全连接神经网络是一个通用的拟合数据的框架,只要有足够多的神经元,及时只有一层hidden layer,利用常见的Sigmoid,relu等激活函数,就可以无限逼近任何连续函数。在实际使用中,如果想利用浅层神经网络拟合复杂非线性函数,就需要你靠增加的神经元个数来实现,神经元过多会造成参数过多,从而增加网络的学习难度,并影响网络的泛化能力。因此,在实际构建网络结构时,一般倾向于使用更深的模型,开减少所需要的神经元数量。

卷积神经网络算法与其他同类算法的优缺点比较 ,你上面回答了一个是卷积神经网络的优缺点,注意一下题,亲亲

卷积神经网络算法与深度神经网络算法的优缺点比较,麻烦你最后回答一下这个问题,我很着急

深度学习中最著名的卷积神经网络CNN,在原来多层神经网络的基础上,加入了特征学习部分,这部分是模仿人脑对信号处理上的分级的。具体 *** 作就是在原来的全连接的层前面加入了部分连接的卷积层与降维层,而且加入的是一个层级。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11851001.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存