TensorFlow入门之解决MNIST问题的一个样例程序

本文介绍了使用TensorFlow解决MNIST手写数字识别问题的实践,包括mnist_inference.py的前向传播算法,mnist_train.py的训练过程和mnist_eval.py的测试程序。通过训练,模型的损失逐渐减小,展示了神经网络的学习效果。
摘要由CSDN通过智能技术生成

  最近在学习《TensorFlow:实战Google深度学习框架》,在第五章后,已经对基础知识有了一个基本的了解,章节最后完成了一个单隐层的神经网络,作为对前面学到基础知识的回顾,我在其中的注释部分也添加了一些自己的理解。这次的代码会分为三个部分,第一个是mnist_iniference.py,定义了前向传播过程与神经网络中的参数;第二个是mnist_train.py,定义了神经网络的训练过程;第三个是mnist_eval.py,定义了测试过程。
mnist_inference.py:

#定义神经网络的结构和前向传播过程

import tensorflow as tf

#定义网络结构,输入、输出和隐藏层的节点数
#28*28,相当于图片的像素
INPUT_NODE = 784
#输出分类的个数
OUTPUT_NODE = 10
#隐藏层节点数
LAYER_NODE = 500

#通过tf.get_variable来获取变量,在训练神经网络时会创建这些变量,在测试时会通过保存的模型加载这些变量的取值。
#更方便的是,因为可以在变量加载时将滑动平均变量重命名,所以可以通过同样的名字在训练时使用变量自身,而在测试时
#使用变量的滑动平均值。在这个变量中,也将变量的正则化损失加入了损失集合。
def get_weight_variable(shape,regularizer):
    #tf.get_variable和tf.variable函数创建变量过程基本一样,名称(必填),维度信息,初始化参数
    weights = tf.get_variable(
            "weights",shape,initializer=tf.truncated_normal_initializer(stddev=0.1))
    #如果存在正则化函数,则将权重变量的正则化损失项加入到名为“losses”的损失集合。
    if regularizer != None:
        tf.add_to_collection("losses",regularizer(weights))
    return weights

#定义神经网络的前向传播过程
def inference(input_tensor,regularizer):
    #声明第一层神经网络的变量并完成前向传播过程。tf.variable_scope生成了一个上下文管理器,来管理已经创建的变量。
    with tf.variable_scope('layer1'):
        #这里通过tf.get_variable和tf.Variable没有本质区别,因为在训练或是测试中没有在同一个程序中多次调用这个
        #函数。如果在同一个程序中多次调用,第一次调用后要将reuse设置为True。
        #声明了输入到隐藏层的权重变量和偏执项
        weights = get_weight_variable([INPUT_NODE,LAYER_NODE],regularizer)
    
        biases = tf.get_variable("biases",[LAYER_NODE],initializer=tf.constant_initializer(0.0))
        #计算隐藏层的传播结果,这里使用了Relu激活函数来去线性化
        layer1 = tf.nn.relu(tf.matmul(input_tensor,weights)+biases)
        
    with tf.variable_scope('layer2'):
        #定义了隐藏层到输出层的权重变量和偏执项
        weights = get_weight_variable([LAYER_NODE,OUTPUT_NODE],regularizer)
        
        biases = tf.get_variable("biases",[OUTPUT_NODE],initializer=tf.constant_initializer(0.0))
        #计算输出层的前向传播结果,因为在计算损失函数时会一并计算softma
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值