我的编程空间,编程开发者的网络收藏夹
学习永远不晚

TensorFlow神经网络创建多层感知机MNIST数据集

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

TensorFlow神经网络创建多层感知机MNIST数据集

前面使用TensorFlow实现一个完整的Softmax Regression,并在MNIST数据及上取得了约92%的正确率。

前文传送门: TensorFlow教程Softmax逻辑回归识别手写数字MNIST数据集

现在建含一个隐层的神经网络模型(多层感知机)。


import tensorflow as tf
import numpy as np
import input_data
mnist = input_data.read_data_sets('data/', one_hot=True)
n_hidden_1 = 256
n_input    = 784
n_classes  = 10
# INPUTS AND OUTPUTS
x = tf.placeholder(tf.float32, [None, n_input]) # 用placeholder先占地方,样本个数不确定为None
y = tf.placeholder(tf.float32, [None, n_classes]) # 用placeholder先占地方,样本个数不确定为None
# NETWORK PARAMETERS
weights = {
    'w1': tf.Variable(tf.random_normal([n_input, n_hidden_1], stddev=0.1)),
    'out': tf.Variable(tf.zeros([n_hidden_1, n_classes]))
}
biases = {
    'b1': tf.Variable(tf.zeros([n_hidden_1])),
    'out': tf.Variable(tf.zeros([n_classes]))
}
print("NETWORK READY")

def multilayer_perceptron(_X, _weights, _biases): # 前向传播,l1、l2每一层后面加relu激活函数
    layer_1 = tf.nn.relu(tf.add(tf.matmul(_X, _weights['w1']), _biases['b1'])) # 隐层
    return (tf.matmul(layer_1, _weights['out']) + _biases['out']) # 返回输出层的结果,得到十个类别的得分值

pred = multilayer_perceptron(x, weights, biases) # 前向传播的预测值
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(pred, y)) # 交叉熵损失函数,参数分别为预测值pred和实际label值y,reduce_mean为求平均loss
optm = tf.train.GradientDescentOptimizer(0.01).minimize(cost) # 梯度下降优化器
corr = tf.equal(tf.argmax(pred, 1), tf.argmax(y, 1)) # tf.equal()对比预测值的索引和实际label的索引是否一样,一样返回True,不一样返回False
accr = tf.reduce_mean(tf.cast(corr, tf.float32)) # 将pred即True或False转换为1或0,并对所有的判断结果求均值
init = tf.global_variables_initializer()
print("FUNCTIONS READY")

# 上面神经网络结构定义好之后,下面定义一些超参数
training_epochs = 100 # 所有样本迭代100次
batch_size = 100 # 每进行一次迭代选择100个样本
display_step = 5
# LAUNCH THE GRAPH
sess = tf.Session() # 定义一个Session
sess.run(init) # 在sess里run一下初始化操作
# OPTIMIZE
for epoch in range(training_epochs):
    avg_cost = 0.
    total_batch = int(mnist.train.num_examples/batch_size)
    # Loop over all batches
    for i in range(total_batch):
        batch_xs, batch_ys = mnist.train.next_batch(batch_size) # 逐个batch的去取数据
        sess.run(optm, feed_dict={x: batch_xs, y: batch_ys})
        avg_cost += sess.run(cost, feed_dict={x: batch_xs, y: batch_ys})/total_batch
    # Display logs per epoch step
    if epoch % display_step == 0:
        train_acc = sess.run(accr, feed_dict={x: batch_xs, y: batch_ys})
        test_acc = sess.run(accr, feed_dict={x: mnist.test.images, y: mnist.test.labels})
        print("Epoch: %03d/%03d cost: %.9f TRAIN ACCURACY: %.3f TEST ACCURACY: %.3f"
              % (epoch, training_epochs, avg_cost, train_acc, test_acc))
print("DONE")

迭代100次看下效果,程序运行结果如下:

Epoch: 095/100 cost: 0.076462782 TRAIN ACCURACY: 0.990 TEST ACCURACY: 0.970

最终,在测试集上准确率达到97%,随着迭代次数增加,准确率还会上升。相比之前的Softmax,训练迭代100次我们的误差率由8%降到了3%,对识别银行账单这种精确度要求很高的场景,可以说是飞跃性的提高。而这个提升仅靠增加一个隐层就实现了,可见多层神经网络的效果有多显著。

没有隐含层的Softmax Regression只能直接从图像的像素点推断是哪个数字,而没有特征抽象的过程。多层神经网络依靠隐含层,则可以组合出高阶特征,比如横线、竖线、圆圈等,之后可以将这些高阶特征或者说组件再组合成数字,就能实现精准的匹配和分类。

不过,使用全连接神经网络也是有局限的,即使我们使用很深的网络,很多的隐藏节点,很大的迭代次数,也很难在MNIST数据集上达到99%以上的准确率。

以上就是TensorFlow神经网络创建多层感知机MNIST数据集的详细内容,更多关于TensorFlow创建多层感知机MNIST数据集的资料请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

TensorFlow神经网络创建多层感知机MNIST数据集

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

TensorFlow神经网络创建多层感知机MNIST数据集的方法是什么

这篇文章主要讲解了“TensorFlow神经网络创建多层感知机MNIST数据集的方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“TensorFlow神经网络创建多层感知机MNIST数
2023-06-25

TensorFlow卷积神经网络MNIST数据集实现方法是什么

本篇内容主要讲解“TensorFlow卷积神经网络MNIST数据集实现方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“TensorFlow卷积神经网络MNIST数据集实现方法是什么”吧!
2023-06-25

Pytorch搭建简单的卷积神经网络(CNN)实现MNIST数据集分类任务

这篇文章主要介绍了Pytorch搭建简单的卷积神经网络(CNN)实现MNIST数据集分类任务,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2023-03-23

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录