Tensorflow-浅层神经网络(MNIST数据集)
来源:互联网 发布:mac air能装win7系统 编辑:程序博客网 时间:2024/05/16 04:03
过拟合
指的是,模型在train-set上的预测精度提高,在test-set的预测精度却降低
即, 模型只是记住了当前模型的特征,不具备很好的泛化性
Dropout
随机将某一层的输出节点数据随机丢弃一部分,相当于创造更多样本,通过增大样本量,减少特征数量防止过拟合
梯度弥散
使用sigmoid作为激活函数的话,在反向传播过程,梯度会指数级逐渐减小,这种情况下,更新神经网络的参数会变得很慢(新值=原值-原值的梯度)
* 因此,出现了relu,其特点有如下
* 单侧抑制
* 宽阔的兴奋边界
* 稀疏激活性(同时被激活的神经元数量稀疏,模拟大脑细胞;传统的sigmoid有50%左右激活元素)
* 将隐藏层的激活函数替换为relu可以带来模型准确率的提升
* 输出层一般为sigmoid,最接近概率的输出分布
以下为单隐藏层神经网络(多层感知机)
使用Dropout(减轻过拟合), Adagrad(自适应学习速率), ReLU(解决梯度弥散)等辅助工具
from tensorflow.examples.tutorials.mnist import input_dataimport tensorflow as tf
mnist = input_data.read_data_sets("../../mnist/", one_hot=True)sess = tf.InteractiveSession()
Extracting ../../mnist/train-images-idx3-ubyte.gzExtracting ../../mnist/train-labels-idx1-ubyte.gzExtracting ../../mnist/t10k-images-idx3-ubyte.gzExtracting ../../mnist/t10k-labels-idx1-ubyte.gz
一. 定义算法公式
- b1全部置0,W1初始化为截断的正态分布(标准差0.1)
- 因为激活函数为ReLU,给正态分布加上噪声,打破完全对称,避免0梯度 ??
- 有时需要给biasis加上小干扰避免dead neuron
in_units = 784h1_units = 300W1 = 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]))
# 因为在train和test的时候,dropout的比率(keep_prob)是不同的,因此初始化为placeholderx = tf.placeholder(tf.float32, [None, in_units])keep_prob = tf.placeholder(tf.float32)
下面定义模型结构
* 激活函数为ReLU的隐藏层y=relu(W1x+b1)
* dropout(随机置一部分节点为0)
* softmax实现输出层
hidden1 = tf.nn.relu(tf.matmul(x, W1) + b1)hidden1_drop = tf.nn.dropout(hidden1, keep_prob=keep_prob)y = tf.nn.softmax(tf.matmul(hidden1_drop, W2) + b2)
二. 定义loss与optimizer
y_true = tf.placeholder(tf.float32, [None, 10])cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_true * tf.log(y), reduction_indices=[1]))train_step = tf.train.AdagradOptimizer(0.3).minimize(cross_entropy)
三. 训练
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_true: batch_ys, keep_prob:0.60})
四. 评估
correct_pred = tf.equal(tf.argmax(y, 1), tf.argmax(y_true, 1))accuracy = tf.reduce_mean(tf.cast(correct_pred, tf.float32))print(accuracy.eval({ x:mnist.test.images, y_true:mnist.test.labels, keep_prob:1.0}))
0.9787
阅读全文
0 0
- Tensorflow-浅层神经网络(MNIST数据集)
- tensorflow之浅层(输入输出层)神经网络通过softmax分类mnist数据集
- Tensorflow-浅层CNN(MNIST数据集)
- Tensorflow MNIST浅层神经网络的解释和答复
- 【tensorflow学习】卷积神经网络CNN(mnist数据集)
- TensorFlow训练mnist数据集(卷积神经网络lenet5)
- TensorFlow在MNIST数据集上实现神经网络
- Tensorflow入门-简单神经网络进行MNIST数据集识别
- 【TensorFlow】官方MNIST数据集神经网络实例详解(六)
- tensorflow MNIST数据集
- TensorFlow学习笔记(5)--实现卷积神经网络(MNIST数据集)
- 使用tensorflow利用神经网络分类识别MNIST手写数字数据集
- 利用tensorflow一步一步实现基于MNIST 数据集进行手写数字识别的神经网络,逻辑回归
- 使用tensorflow利用神经网络分类识别MNIST手写数字数据集,转自随心1993
- 神经网络 tensorflow教程 2.2 下载MNIST 数据集(保存所有图片)
- 神经网络 tensorflow教程 2.2 下载MNIST 数据集 (自动版)
- 【TensorFlow】神经网络优化MNIST数据最佳实践(十一)
- 81、Tensorflow实现LeNet-5模型,多层卷积层,识别mnist数据集
- 如何解决容器边框不为整数的情况?
- vue开发请求本地模拟数据的配置方法
- 厌倦写代码的人是如何做软件开发的
- 使用 jQuery 实现 radio 的选中与反选
- ideaIU-2017.2.6 安装过程
- Tensorflow-浅层神经网络(MNIST数据集)
- 李航博士-统计学习方法-SVM-python实现
- mac 更新系统到10.13后unity的assets加载为空解决方法
- .Net调用远程Webservice的方法小结
- tomcat启动后,localhost:8080显示不出来
- HDU 1085 Holding Bin-Laden Captive!【母函数||多重背包】
- 在android机上调试前端页面
- 剑指offer编程总结(Java实现)(一)
- C语言当中的数据类型分析