深度学习笔记——TensorFlow学习笔记(三)使用TensorFlow实现的神经网络进行MNIST手写体数字识别

本文是TensorFlow学习的第三部分,参考的是《TensorFlow实战Google深度学习框架》一书,这部分讲述的是使用TensorFlow实现的神经网络进行MNIST手写体数字识别一个实例。

这个实例将第二部分讲述的激活函数、损失函数、优化算法、正则化等都运用上了。同时,使用TensorFlow中利用变量名称来创建/获取变量的机制将前向传播的过程抽象出来,使得训练和测试时不需要关心神经网络的结构或是参数;还使用了TensorFlow保存模型的方法将模型持久化(保存),以及加载模型进行预测。

总结来说,将神经网络的训练、测试和使用拆分成了不同的程序,并且将神经网络的前向传播过程抽象成了一个独立的库函数,通过这种方式可以将训练过程和测试。使用过程解耦合,从而使得整个过程更加灵活。

具体代码如下:

神经网络前向传播过程代码(mnist_inference.py):

#coding: utf-8
import tensorflow as tf

#define the variables of nerual network
INPUT_NODE = 784
OUTPUT_NODE = 10
LAYER1_NODE = 500
#通过tf.get_variable函数来获取变量,在训练时会创建这些变量,在测试时会通过保存的模型加载这些变量的取值。因为可以在变量加载时将滑动平均变量重命名,所以可以直接通过同样的名字在训练时使用变量自身,而在测试时使用变量的滑动平均值。这个函数也会将变量的正则化损失加入损失集合。
def get_weight_variable(shape, regularizer):
    weights = tf.get_variable("weights", shape, initializer=tf.truncated_normal_initializer(stddev=0.1))

    if regularizer != None:
        tf.add_to_collection('losses', regularizer(weights))

    return weights

#define the forward network
def inference(input_tensor, regularizer):
    with tf.variable_scope('layer1'):#声明第一层神经网络的变量并完成前向传播过程
        weights = get_weight_variable([INPUT_NODE, LAYER1_NODE], regularizer)
        biases = tf.get_variable("biases", [LAYER1_NODE], initializer=tf.constant_initializer(0.0))
        layer1 = tf.nn.rel
  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值