学习笔记TF026:多层感知机

隐含层,指除输入、输出层外,的中间层。输入、输出层对外可见。隐含层对外不可见。理论上,只要隐含层节点足够多,只有一个隐含层,神经网络可以拟合任意函数。隐含层越多,越容易拟合复杂函数。拟合复杂函数,所需隐含节点数,随隐含层数量增多指数下降。

过拟合,模型预测准确率在训练集上升,在测试集下降。泛化性不好,模型记忆当前数据特征,不具备推广能力。参数太多。Hinton教授团队,Dropout。随便丢弃部分输出数据节点。创造新随机样本,增大样本量,减少特征数量,防止过拟合。bagging方法,对特征新种采样。

SGD参数难调试,SGD设置不同学习速率,结果可能差异巨大。神经网络很多局部最优解可以达到比较好分类效果,全局最优反而容易过拟合。Adagrad、Adam、Adadelta自适应方法,减轻调试参数负担。SGD需要调试学习速率、Momentum、Nesterov参数。

梯度弥散(Gradient Vanishment)。Sigmoid函数具有限制性,输出数值在0?1,最符合概率输出定义。非线性Sigmoid函数,信号特征空间映射,中央区信号增益大,两侧区信息增益小。中央区像神经元兴奋态,两侧区像神经元抑制态。训练时,重要特征放中央区,非重要特征放两侧区。Sigmoid比最初期线性激活函数y=x,阶梯激活函数y=-1(x<0)|y=1(x>=0)、y=0(x<0)|y=1(x>=0)好。Sigmoid函数反向传播梯度值在多层传递指级急剧减小,根据训练数据反馈更新神经网络参数非常缓慢,不起训练作用。

ReLU,非线性函数y=max(0,x),坐标轴上折线,当x<=0,y=0,x>0,y=x。人脑阈值响应机制,信号超过某个阈值,神经元兴奋激活状态,平时抑制状态。ReLU很好传递梯度,多层反向传播,梯度不会大幅缩小,适合很深神经网络,不需要无监督逐层初始化权重。ReLU变化,单侧抑制,相对宽阁兴奋边界,稀疏激活性。神经元同时激活1~4%,选择性响应很少部分输入信号,屏蔽大量不相关信号,更高效提取重要特征。传统Sigmoid函数接近一半神经元被激活。Softplus,单侧抑制,没有稀疏激活性。ReLU及变种(EIU,PReLU,RReLU)为最注流激活函数。输出层一般用Sigmoid函数,最接近概率输出分布。

隐含层可以解决XOR问题,用曲线划分两类样本。隐含层越多,原有特征越抽象变换。是多层神经网络(多层感知机 MLP)功能。

网络神经加上隐含层,使用Dropout、自适应学习速率Adagrad,解决梯度弥散激活函数ReLU。

载入TensorFlow,加载MNIST数据集,创建Interactive Session。

隐含层参数设置Variable初始化。in_units输入节点数,h1_units隐含层输出节点数设300(200?1000区别不大)。W1隐含层权重初始化截断正态分布标准差0.1,b1偏置设0。模型激活函数ReLU,正态分布给参数加噪声,打破完全对称避免0梯度。偏置赋小非零值避免dead neuron(死亡神经元)。最后输出层Softmax,权重W2偏置b2初始化0。Sigmoid,0附近最敏感,梯度最大。

训练和预测,Dropout比率keep_prob(保留节点概率)不同。训练小于1。预测等于1。Dropout比率为计算图输入,定义placeholder。

定义模型结构。tf.nn.relu(tf.matmul(x,W1+b1)),实现激活函数为ReLU的hidden1隐含层,y=relu(W1x+b1)。tf.nn.dropout实现Dropout,随机置0分部节点。keep_prob参数,保留数据不置为0比例,训练应小于1,制造随机性,防止过拟合,预测等于1,用全部特征预测样本类别。输出层Softmax。

定义算法公式,神经网络forward计算。定义损失函数(交叉信息熵)和选择优化器(自适应优化器Adagrad),优化loss,学习速率0.3,使用tf.train.AdagradOptimizer 。Adadelta、Adam优化器。

训练,keep_prob计算图输入,训练时设0.75,保留75%节点,其余25%置0。越复杂越大规模神经网络,Dropout效果越显著。隐含层,需要更多训练迭代优化模型参数。3000个bacth,每个bacth100条样本,30万样本。相当全数据集5轮epoch迭代。增大循环次数,准确率略有提高。

准确率评测,加入keep_prob输入,等于1。

没有隐含层Softmax Regression,直接从图像像素推断是哪个数字,没有特征抽象过程。多层神经网络隐含层,组合高阶特征或组件,再组合成数字,实现精准匹配分类。隐含层输出高阶特征组件可以复用,每一类判别、概率输出共享。

全连接神经网络(Fully Connected Network,FCN,MLP的另一种说法)局限,很深网络,很多隐藏节点,很大迭代轮数,也难达到99%以上准确率。

    # Create the model
    from tensorflow.examples.tutorials.mnist import input_data
    import tensorflow as tf
    mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
    sess = tf.InteractiveSession()
    in_units = 784
    h1_units = 300
    W1 = tf.Variable(tf.truncated_normal([in_units, h1_units], stddev=0.1))
    b1 = tf.Variable(tf.zeros([h1_units]))
    W2 = tf.Variable(tf.zeros([h1_units, 10]))
    b2 = tf.Variable(tf.zeros([10]))
    x = tf.placeholder(tf.float32, [None, in_units])
    keep_prob = tf.placeholder(tf.float32)
    hidden1 = tf.nn.relu(tf.matmul(x, W1) + b1)
    hidden1_drop = tf.nn.dropout(hidden1, keep_prob)
    y = tf.nn.softmax(tf.matmul(hidden1_drop, W2) + b2)
    # Define loss and optimizer
    y_ = tf.placeholder(tf.float32, [None, 10])
    cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y), reduction_indices=[1]))
    train_step = tf.train.AdagradOptimizer(0.3).minimize(cross_entropy)
    # Train
    tf.global_variables_initializer().run()
    for i in range(3000):
      batch_xs, batch_ys = mnist.train.next_batch(100)
      train_step.run({x: batch_xs, y_: batch_ys, keep_prob: 0.75})
    # Test trained model
    correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1))
    accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
    print(accuracy.eval({x: mnist.test.images, y_: mnist.test.labels, keep_prob: 1.0}))

参考资料:
《TensorFlow实践》

欢迎付费咨询(150元每小时),我的微信:qingxingfengzi

时间: 2024-08-28 12:38:48

学习笔记TF026:多层感知机的相关文章

thinkphp学习笔记7—多层MVC

原文:thinkphp学习笔记7-多层MVC ThinkPHP支持多层设计. 1.模型层Model 使用多层目录结构和命名规范来设计多层的model,例如在项目设计中如果需要区分数据层,逻辑层,服务层等不同的模型层可以在模块目录下创建Model,Logic,Service目录,把对用户表的所有模型操作分成3层. 1.Model/UserModel用于定义数据相关的自动验证,自动完成和数据存取接口 2.Logic/UserLogical用于定义用户相关的业务逻辑 3.Service/UserSer

学习笔记TF011:多层神经网络

线性回归.对数几率回归模型,本质上是单个神经元.计算输入特征加权和.偏置视为每个样本输入特征为1权重,计算特征线性组合.激活(传递)函数 计算输出.线性回归,恒等式(值不变).对数几率回归,sigmoid.输入->权重->求和->传递->输出.softmax分类含C个神经元,每个神经元对应一个输出类别. XOR异或运算,无法通过线性模型解决.sigmoido类型神经元要求数据线性可分.2D数据存在直线,高维数据存在超平面,把不同类别样本分隔. 在神经网络输入和输出之间插入更多神经元

记一下机器学习笔记 多层感知机的反向传播算法

<神经网络与机器学习>第4章前半段笔记以及其他地方看到的东西的混杂-第2.3章的内容比较古老预算先跳过. 不得不说幸亏反向传播的部分是<神机>里边人话比较多的部分,看的时候没有消化不良. 多层感知机 书里前三章的模型的局限都很明显,对于非线性可分问题苦手,甚至简单的异或都弄不了.于是多层感知机(也就是传说中的神经网络)就被发明了出来对付这个问题. 多层感知机就是由一系列的感知机,或者说神经元组成,每个神经元都接受若干的输入(树突)并产生一个输出(轴突). 这些神经元被分成若干层,每

机器学习-李航-统计学习方法学习笔记之感知机(2)

在机器学习-李航-统计学习方法学习笔记之感知机(1)中我们已经知道感知机的建模和其几何意义.相关推导也做了明确的推导.有了数学建模.我们要对模型进行计算. 感知机学习的目的是求的是一个能将正实例和负实例完全分开的分离超平面.也就是去求感知机模型中的参数w和b.学习策略也就是求解途径就是定义个经验损失函数,并将损失函数极小化.我们这儿采用的学习策略是求所有误分类点到超平面S的总距离.假设超平面s的误分类点集合为M,那么所有误分类点到超平面S的总距离为 显然损失函数L(w,b)是非负的,如果没有误分

ufldl学习笔记与编程作业:Multi-Layer Neural Network(多层神经网络+识别手写体编程)

ufldl学习笔记与编程作业:Multi-Layer Neural Network(多层神经网络+识别手写体编程) ufldl出了新教程,感觉比之前的好,从基础讲起,系统清晰,又有编程实践. 在deep learning高质量群里面听一些前辈说,不必深究其他机器学习的算法,可以直接来学dl. 于是最近就开始搞这个了,教程加上matlab编程,就是完美啊. 新教程的地址是:http://ufldl.stanford.edu/tutorial/ 本节学习地址:http://ufldl.stanfor

小白学习之pytorch框架(5)-多层感知机(MLP)-(tensor、variable、计算图、ReLU()、sigmoid()、tanh())

先记录一下一开始学习torch时未曾记录(也未好好弄懂哈)导致又忘记了的tensor.variable.计算图 计算图 计算图直白的来说,就是数学公式(也叫模型)用图表示,这个图即计算图.借用 https://hzzone.io/cs231n/%E7%90%86%E8%A7%A3-PyTorch-%E8%AE%A1%E7%AE%97%E5%9B%BE%E3%80%81Autograd-%E6%9C%BA%E5%88%B6%E5%92%8C%E5%AE%9E%E7%8E%B0%E7%BA%BF%E

动手深度学习10- pytorch多层感知机从零实现

多层感知机 定义模型的参数 定义激活函数 定义模型 定义损失函数 训练模型 小结 多层感知机 import torch import numpy as np import sys sys.path.append('..') import d2lzh_pytorch as d2l 我们仍然使用Fashion_MNIST数据集,使用多层感知机对图像进行分类 batch_size = 256 train_iter,test_iter = d2l.get_fahsion_mnist(batch_size

动手学习pytorch——(3)多层感知机

多层感知机(multi perceptron,MLP).对于普通的含隐藏层的感知机,由于其全连接层只是对数据做了仿射变换,而多个仿射变换的叠加仍然是一个仿射变换,即使添加更多的隐藏层,这种设计也只能与仅含输出层的单层神经网络等价.解决问题的一个方法是引入非线性变换,对隐藏变量使用非线性变化,然后作为下一个全连接层的输入,这个非线性函数被称为激活函数. 激活函数主要有ReLu.Sigmoid.tanh.其中ReLu计算简单,且不像其他两个哪个容易造成梯度消失,使用较多. 多层感知机pytorch实

Deep Learning(深度学习)学习笔记整理系列之(三)

Deep Learning(深度学习)学习笔记整理系列 [email protected] http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04-08 声明: 1)该Deep Learning的学习系列是整理自网上很大牛和机器学习专家所无私奉献的资料的.具体引用的资料请看参考文献.具体的版本声明也参考原文献. 2)本文仅供学术交流,非商用.所以每一部分具体的参考资料并没有详细对应.如果某部分不小心侵犯了大家的利益,还望海涵,并联系博主