以模块化的方式来定义一个NN
inference():
定义前向传播过程,即FP过程。因为tensorflow的NN构建可以理解为实际上前期工作都是在定义一张计算图,只有到session处才是开始图的运算。所以前向过程反映了整个NN的框架,包括多少层,有哪些层,各个层由哪些参数,使用什么激活函数都是在这个inference函数中完成的。
最终返回的是前向传播FP的结果,即输入通过前向传播NN的输出结果logits。
注意,这里前向的函数能传递的参数是有限的。因为本身其就不是一个用于整个NN自定义的通用的函数。其更多的是对一个给定的NN进行一些结构参数的配置。也就是说,对于一个inference函数,其对应的NN的结构从类型上来说是在这个函数的内部确定下来的,并不能作为参数进行传递,而传递的参数应该是一些反应整个NN结构大小的参数,例如第几层有几个神经节点等。
loss():
定义了用于NN的训练的loss function。包括数据项,正则项等等,最终返回的就是一个loss_func。可以有cross_entropy等形式
train():
定义了训练过程,包括训练过程中需要的一些操作(tensorflow在session之前的操作实际上可以理解为是不停地向计算图中加入操作,最后在session中完成这些操作的运算)。所以包括加入优化器Optimizer等操作,最后返回train_step。在这里,实际上相当于定义了反向传播梯度运算。这都是有tensorflow提供api去完成的。
evaluation():
定义了准确率的计算的操作:accuracy。最终返回的是测试的准确率。
placeholder_inputs():
定义了各个输入的占位符,用于数据集和标签的传递。用于最终的NN的训练。
define_constants():
定义各种NN所需要的常数。例如BATCH_SIZE、TRAINING_STEPS等等
=======================以上几个函数都只是向计算图中加入操作=======================
==============================并没有真正地去运算===============================
run_training():
在这个函数中,完成training的过程的运算。即在这里使用session会话。
main():
主函数。一切操作从主函数而起。这是为了和过程性编程的思想匹配。python是解释性语言,所以实际上并没有什么主函数之分,在这里强行按照过程性编程的思想规范化程序代码。一切都从main而起。最后还需要定义一个主函数入口。