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

 更新时间:2021-11-03 19:35:51   作者:佚名   我要评论(0)

前面使用TensorFlow实现一个完整的Softmax Regression,并在MNIST数据及上取得了约92%的正确率。
前文传送门: TensorFlow教程Softmax逻辑回

前面使用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数据集的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
  • TensorFlow实现MLP多层感知机模型
  • 由浅入深学习TensorFlow MNIST 数据集
  • tensorflow使用CNN分析mnist手写体数字数据集
  • TensorFlow MNIST手写数据集的实现方法
  • TensorFlow基于MNIST数据集实现车牌识别(初步演示版)

相关文章

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

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

    前面使用TensorFlow实现一个完整的Softmax Regression,并在MNIST数据及上取得了约92%的正确率。 前文传送门: TensorFlow教程Softmax逻辑回
    2021-11-03
  • python神经网络TensorFlow简介常用基本操作教程

    python神经网络TensorFlow简介常用基本操作教程

    目录要将深度学习更快且更便捷地应用于新的问题中,选择一款深度学习工具是必不可少的步骤。 TensorFlow是谷歌于2015年11月9日正式开源的
    2021-11-03
  • Apache POI的基本使用详解

    Apache POI的基本使用详解

    目录基本介绍入门测试(从Excel文件读取数据)第一步:导入maven坐标第二步:创建Excel文件第三步:写测试代码代码说明及扩展入门测试(向Ex
    2021-11-03
  • Android实现边录边播功能

    Android实现边录边播功能

    Android可以通过MediaRecorder和AudioRecord这两个工具来实现录音,MediaRecorder直接把麦克风的数据存到文件,并且能够直接进行编码(如AMR,
    2021-11-03
  • Swift中转义闭包示例详解

    Swift中转义闭包示例详解

    目录前言转义与非转义闭包逃离方法将转义关闭付诸行动注意强参考周期内存泄漏背后的原因消除强引用循环概括前言 Swift 是一种非常强大的编程
    2021-11-03
  • TensorFlow卷积神经网络MNIST数据集实现示例

    TensorFlow卷积神经网络MNIST数据集实现示例

    这里使用TensorFlow实现一个简单的卷积神经网络,使用的是MNIST数据集。网络结构为:数据输入层–卷积层1–池化层1–卷积层2–池化层2–全连
    2021-11-03
  • Swift方法调度之类的普通方法底层探究

    Swift方法调度之类的普通方法底层探究

    1. 类的普通方法调度 写一个结构体和一个类,对比看看方法调用的方式: // 结构体 struct PersonStruct { func changClassName() {} }
    2021-11-01
  • Pytorch自动求导函数详解流程以及与TensorFlow搭建网络的对比

    Pytorch自动求导函数详解流程以及与TensorFlow搭建网络的对比

    一、定义新的自动求导函数 在底层,每个原始的自动求导运算实际上是两个在Tensor上运行的函数。其中,forward函数计算从输入Tensor获得的输出
    2021-11-01
  • Java 实例解析单例模式

    Java 实例解析单例模式

    目录单例模式的介绍优点缺点SynchronizedSynchronized示例Synchronized与非SynchronizedSingleton第一个示例第二个示例第三个示例第四个示例
    2021-11-01
  • Python函及模块的使用

    Python函及模块的使用

    目录1、函数的作用2、定义函数3、函数的参数3.1 参数的默认值3.2 可变参数4、用模块管理函数4.1 示例代码module.py5、变量的作用域1、函数的
    2021-11-01

最新评论