MNIST手写体识别,利用神经网络解决的过程:
1、前向传播模块
首先将前向传播过程抽象出来,作为一个可以作为训练测试共享的模块,取名为mnist_inference_5_5.py
,将这个过程抽象出来的好处是,一是可以保证在训练或者测试的过程中前向传播的一致性,提高代码的复用性。还有一点是我们可以更好地将其与滑动平均模型与模型持久化功能结合,更加灵活的来检验新的模型。
mnist_inference_5_5.py
:
# -*- coding:utf-8 -*-
import tensorflow as tf
INPUT_NODE=784
OUTPUT_NODE=10
LAYER1_NODE=500
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
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.relu(tf.matmul(input_tensor,weights)+biases)
with tf.variable_scope('layer2'):
weights=get_weight_variable(
[LAYER1_NODE,OUTPUT_NODE],regularizer
)
biases=tf.get_vari