学习笔记 TF026:多层感知机 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
cralison
V2EX    TensorFlow

学习笔记 TF026:多层感知机

  •  1
     
  •   cralison 2017-07-22 14:19:43 +08:00 2915 次点击
    这是一个创建于 3002 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    过拟合,模型预测准确率在训练集上升,在测试集下降。泛化性不好,模型记忆当前数据特征,不具备推广能力。参数太多。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

    目前尚无回复
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     900 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 20:52 PVG 04:52 LAX 13:52 JFK 16:52
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86