# 定义神经网络的前向传播过程# -*- 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)
#=