【TensorFlow】MNIST(使用全连接神经网络+滑动平均+正则化+指数衰减法+激活函数)

代码已上传至 Github —— mnist_all.py

下载MNIST数据集


以下有两种下载方式,如果链接失效可以搜索网上的资源

下载之后将其放在 mnist/data/ 文件夹下,目录结构如下

mnist
    mnist_all.py
    data/
        train-images-idx3-ubyte.gz
        train-labels-idx1-ubyte.gz
        t10k-images-idx3-ubyte.gz
        t10k-labels-idx1-ubyte.gz

完整代码


该代码修改自《TensorFlow:实战Google深度学习框架》

  1. 神经网络结构是简单的三层全连接神经网络,输入层+隐藏层+输出层

  2. 使用的优化方法

    • 滑动平均
    • 正则化
    • 指数衰减法
  3. 使用 ReLU 激活函数

import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data

# 神经网络结构参数
INPUT_NODE = 784  # 输入层节点数。等于MNIST图片的像素
LAYER_NODE = 500  # 隐藏层节点数。只用一个隐藏层,含500个节点
OUTPUT_NODE = 10  # 输出层节点数。等于0~9对应的10个数字

# 优化方法参数
LEARNING_RATE_BASE = 0.8  # 基础学习率
LEARNING_RATE_DECAY = 0.99  # 学习率的衰减率
REGULARIZATION_RATE = 0.0001  # 正则化项在损失函数中的系数
MOVING_AVERAGE_DECAY = 0.99  # 滑动平均衰减率

# 训练参数
BATCH_SIZE = 100  # 一个训练batch中的图片数
TRAINING_STEPS = 30000  # 训练轮数


# 利用给定神经网络的输入和参数,返回前向传播结果
def</
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您介绍一下使用 TensorFlow 实现 MNIST 手写数字识别的人工神经网络。 首先,我们需要导入 TensorFlowMNIST 数据集: ```python import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data mnist = input_data.read_data_sets("MNIST_data/", one_hot=True) ``` 接下来,我们可以定义神经网络的结构。在这个例子中,我们使用两个隐藏层,每个隐藏层有 256 个神经元。输出层有 10 个神经元,对应于数字 0 到 9。 ```python input_size = 784 hidden_size = 256 output_size = 10 x = tf.placeholder(tf.float32, [None, input_size]) y = tf.placeholder(tf.float32, [None, output_size]) w1 = tf.Variable(tf.truncated_normal([input_size, hidden_size], stddev=0.1)) b1 = tf.Variable(tf.zeros([hidden_size])) h1 = tf.nn.relu(tf.matmul(x, w1) + b1) w2 = tf.Variable(tf.truncated_normal([hidden_size, hidden_size], stddev=0.1)) b2 = tf.Variable(tf.zeros([hidden_size])) h2 = tf.nn.relu(tf.matmul(h1, w2) + b2) w3 = tf.Variable(tf.truncated_normal([hidden_size, output_size], stddev=0.1)) b3 = tf.Variable(tf.zeros([output_size])) y_pred = tf.matmul(h2, w3) + b3 ``` 然后,我们可以定义损失函数和优化器,使用交叉熵作为损失函数,使用梯度下降优化器进行优化。 ```python cross_entropy = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y, logits=y_pred)) train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy) ``` 接下来,我们可以开始训练模型。在每个训练迭代中,我们会从数据集中随机选择一批样本进行训练,然后更新神经网络的参数。 ```python sess = tf.Session() sess.run(tf.global_variables_initializer()) batch_size = 100 num_epochs = 1000 for epoch in range(num_epochs): batch_xs, batch_ys = mnist.train.next_batch(batch_size) sess.run(train_step, feed_dict={x: batch_xs, y: batch_ys}) ``` 最后,我们可以在测试集上进行测试,计算模型的准确率。 ```python correct_prediction = tf.equal(tf.argmax(y_pred, 1), tf.argmax(y, 1)) accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32)) print("Accuracy:", sess.run(accuracy, feed_dict={x: mnist.test.images, y: mnist.test.labels})) ``` 这就是使用 TensorFlow 实现 MNIST 手写数字识别的人工神经网络的基本过程。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值