TensorFlow教程:TensorFlow实现多层感知机

TensorFlow教程:TensorFlow实现多层感知机

       

       TensorFlow是一个非常强大的用来做大规模数值计算的库。其所擅长的任务之一就是实现以及训练深度神经网络。 TensorFlow可以很容易的实现Softmax Regression模型,这个线性模型的最大特点就是简单易用,但是过拟合能力不强。有理论研究表明,为了拟合复杂函数需要的隐含节点的数目,基本上随着隐含层的数量增多呈指数下降趋势。也就是说层数越多,神经网络所需要的隐含节点可以越少。这也是深度学习的特点之一。不过在实际使用时,会出现过拟合、参数难以调节、梯度弥散等问题,这时就可以应用Dropout、Adagrad、ReLU等方法进行解决。本案列将通过构造多层感知机,帮助读者理解这些Trick的原理。

        在本教程中,我们将学到构建一个TensorFlow多层感知机模型的基本步骤,并将通过这些步骤对MNIST数据集进行测试。这个教程假设你已经熟悉感知机(MLP)和MNIST数据集(MNIST数据集的官网是Yann LeCun's website)。

        在准备工作就绪后,我们就可以通过TensorFlow实现多层感知机,以下代码是本人通过理解整理而成,并对代码进行注释,如有错误请指正。

# -*- coding: utf-8 -*-
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'

# 载入TensorFlow并加载MNIST数据集
# 创建一个TensorFlow默认的InteractiveSession
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()

# 为隐含层的参数设置Variable并进行初始化
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的placeholder
# Dropout的比率keep_prob作为计算图的输入
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)

# 定义损失函数和选择优化器来优化loss
# 交叉信息熵、自适应优化器Adagrad
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)

# 训练步骤
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})

# 对模型进行准确率评测
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}))

           最终,运行本案例可以在测试集上达到98%的准确率。这样的结果对于识别精度高的场景,可以说是飞跃性的提高。

        总结一下,本教程介绍了实现MLP的步骤,讲解了Dropout、Adagrad、ReLU的原理和作用,以及如何在TensorFlow中使用它们。

        后续,我将继续为大家展现TensorFlow带来的无尽乐趣,我将和大家一起探讨深度学习的奥秘。当然,如果你感兴趣,我的Weibo将与你一起分享最前沿的人工智能、机器学习、深度学习与计算机视觉方面的技术。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值