前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >tensorflow中实现神经网络训练手写数字数据集mnist

tensorflow中实现神经网络训练手写数字数据集mnist

作者头像
OpenCV学堂
发布2018-07-26 10:53:52
9550
发布2018-07-26 10:53:52
举报

tensorflow中实现神经网络训练手写数字数据集mnist

一:网络结构

基于tensorflow实现一个简单的三层神经网络,并使用它训练mnist数据集,神经网络三层分别为:

输入层:

像素数据输入28x28=784 个输入节点

隐藏层:

30个神经元节点

输出层:

10个神经元节点,对应 0 ~ 9 十个数字

图示结构如下:

网络结构的代码实现:

代码语言:javascript
复制
hidden_nodes = 30
x = tf.placeholder(shape=[None, 784], dtype=tf.float32)
y = tf.placeholder(shape=[None, 10], dtype=tf.float32)

w1 = tf.Variable(tf.truncated_normal(shape=[784, hidden_nodes]), dtype=tf.float32)
b1 = tf.Variable(tf.truncated_normal(shape=[1, hidden_nodes]), dtype=tf.float32)

w2 = tf.Variable(tf.truncated_normal(shape=[hidden_nodes, 10]), dtype=tf.float32)
b2 = tf.Variable(tf.truncated_normal(shape=[1, 10]), dtype=tf.float32)

# layer hidden
nn_1 = tf.add(tf.matmul(x, w1), b1)
h1 = tf.nn.sigmoid(nn_1)

# layer output
nn_2 = tf.add(tf.matmul(h1, w2), b2)
out = tf.nn.sigmoid(nn_2)

# loss function
error = tf.square(tf.subtract(y, out))
loss = tf.reduce_sum(error)

# back prop
step = tf.train.GradientDescentOptimizer(0.05).minimize(loss)
init = tf.global_variables_initializer()

二:数据读取与训练

读取mnist数据集

代码语言:javascript
复制
from tensorflow.examples.tutorials.mnist import inputdata
mnist = inputdata.readdatasets("MNISTdata/", onehot=True)

如果不行,就下载下来,放到本地即可

执行训练的代码如下

代码语言:javascript
复制
# accurate  model
acc_mat = tf.equal(tf.argmax(out, 1), tf.argmax(y, 1))
acc = tf.reduce_sum(tf.cast(acc_mat, tf.float32))
with tf.Session() as sess:
    sess.run(init)
    for i in range(20000):
        batch_xs, batch_ys = mnist.train.next_batch(10)
        sess.run(step, feed_dict={x: batch_xs, y: batch_ys})
        if i % 1000 == 0:
            x_input = mnist.test.images[:1000]
            y_input = mnist.test.labels[:1000]
            curr_acc = sess.run(acc, feed_dict={x: x_input, y: y_input})
            print("current acc : ", curr_acc)

训练结果:

测试集上对1000张手写数字图像测试正确识别921张,准确率高达92.1%。说明传统的人工神经网络表现还是不错的,这个还是在没有优化的情况下,通过修改批量数大小,修改学习率,添加隐藏层节点数与dropout正则化,可以更进一步提高识别率。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-07-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 OpenCV学堂 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • tensorflow中实现神经网络训练手写数字数据集mnist
  • 一:网络结构
  • 二:数据读取与训练
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档