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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Tensorflow系列3:多层神经网络--解决非线性问题相关的知识,希望对你有一定的参考价值。

参考技术A

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

补充知识:

补充知识:

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等激活函数,就可以无限逼近任何连续函数。在实际使用中,如果想利用浅层神经网络拟合复杂非线性函数,就需要你靠增加的神经元个数来实现,神经元过多会造成参数过多,从而增加网络的学习难度,并影响网络的泛化能力。因此,在实际构建网络结构时,一般倾向于使用更深的模型,开减少所需要的神经元数量。

TensorFlow(实战深度学习框架)----深层神经网络(第四章)

     深层神经网络可以解决部分浅层神经网络解决不了的问题。

     神经网络的优化目标-----损失函数

     深度学习:一类通过多层非线性变化对高复杂性数据建模算法的合集。(两个重要的特性:多层和非线性)

     线性模型的最大特点:任意线性模型的组合仍然是线性模型。(任意层的全连接神经网络和单层神经网络模型的表达能力没有任何区别)

     激活函数实现去线性化:ReLU函数  sigmoid函数  tanh函数 (增加偏置项) ,TensorFlow支持7中不同的非线性激活函数

     感知机:单层的神经网络,无法模拟异或运算。加入隐藏层之后,异或问题可以得到很好的解决。

以上是关于Tensorflow系列3:多层神经网络--解决非线性问题的主要内容,如果未能解决你的问题,请参考以下文章

多层神经网络TensorFlow

Tensorflow实现多层神经网络tf.keras进行fashion_mnist时装分类(完整版)

在 tensorflow 中创建多层循环神经网络

TensorFlow(实战深度学习框架)----深层神经网络(第四章)

【Tensorflow】深度神经网络原理

年度系列使用Tensorflow预测股票市场变动