MNIST数据识别--全连接神经网络

本文档详细介绍了如何使用TensorFlow构建一个3层全连接神经网络,处理MNIST数据集,包括定义前向传播过程、训练模型、参数优化以及评估模型性能。在训练过程中,采用了L2正则化防止过拟合,并利用滑动平均模型进行预测,以提高测试准确率。
摘要由CSDN通过智能技术生成
# 定义神经网络的前向传播过程# -*- coding: utf-8 -*-


import tensorflow as tf #载入tensorflow


INPUT_NODE = 784
# 输入层x的节点数,784=28*28为MNIST数据集图片的像素矩阵
OUTPUT_NODE = 10
# 输出层y的节点数和真实结果y_的矩阵大小,区分0~9这是个数字
LAYER1_NODE = 500
# 此处只使用一个隐藏层,这个隐藏层有500个节点


def get_weight_variables(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






#=========================================================================================================================================
#==========================================================inference()====================================================================
#=========================================================================================================================================
# 函数inference()在预测时使用,计算神经网络的前向传播结果,
# 这里定义了一个使用ReLU激活函数的3层全连接神经网络,通过加入隐藏层实现多层结构,通过使用ReLU激活函数实现去线性化
# 该辅助函数中也支持传入“用于计算参数平均值”的类,这样方便在“测试时”使用滑动平均模型
def inference(input_tensor, regularizer):
with tf.variable_scope('layer1'):
weights = get_weight_variables([INPUT_NODE, LAYER1_NODE], regularizer)
biases = tf.get_variable("biases", [LAYER1_NODE], initializer=tf.constant_initializer(0.0))
layer1 = tf.nn.relu(tf.matmul(input_tensor, weights) + biases)


with tf.variable_scope('layer2'):
weights = get_weight_variables([LAYER1_NODE, OUTPUT_NODE], regularizer)
biases = tf.get_variable("biases", [OUTPUT_NODE], initializer=tf.constant_initializer(0.0))
layer2 = tf.matmul(layer1, weights) + biases


return layer2



# 定义神经网络的模型训练、参数优化过程
# -*- coding: utf-8 -*-
import os


import tensorflow as tf #载入tensorflow
from tensorflow.examples.tutorials.mnist import input_data #载入数据集MNIST模块
import test5_1_mnist_inference




BATCH_SIZE = 100
# 一个训练batch中的训练个数
# batch值越小,训练过程越接近‘随机’梯度下降‘;batch值越大,训练过程越接近’梯度下降‘


LEARNING_RATE_BASE = 0.8
# 基础的学习率
LEARNING_RATE_DECAY = 0.99
# 学习率的衰减率


REGULARIZATION_RATE = 0.0001
# 描述模型复杂度的正则化项,在总损失函数中的权重


TRAINING_STEPS = 20002
# 训练轮数


MOVING_AVERAGE_DECAY = 0.99
# 滑动平均衰减率


MODEL_SAVE_PATH = "/Users/deltasimon/Desktop/Mch_Learn/02test/05MNIST_dealing/to/model/"


MODEL_NAME = "model_mnist_001.ckpt"




# 注意:在一轮训练过程中,会处理一共batch组样本
#    x      为(batch_size * 784)的矩阵,表示一个batch的图片输入
#   y_      为(batch_size * 10 )的矩阵,表示一个batch的真实答案
#    y      为(batch_size * 10 )的矩阵,表示一个batch的(无滑动平均softmax层)神经网络前向传播输出
# average_y 为(batch_size * 10 )的矩阵,表示一个batch的(有滑动平均softmax层)神经网络前向传播输出


#=========================================================================================================================================
#==========================================================train(mnist)===================================================================
#=========================================================================================================================================
# 函数train()在训练时使用,训练模型、优化参数
def train(mnist):
# 数据集
x = tf.placeholder(tf.float32, [None, test5_1_mnist_inference.INPUT_NODE], name='x-input')
y_ = tf.placeholder(tf.float32, [None, test5_1_mnist_inference.OUTPUT_NODE], name='y-input')



regularizer = tf.contrib.layers.l2_regularizer(REGULARIZATION_RATE)


#=
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值