1.有监督学习的一般结构
-*-数据流图的高层,通用训练闭环:
*模型参数初始化:通常采用对参数随机赋值
*读取训练数据:读取每个数据样本及其期望输出
*在训练数据上执行推断模型:在当前模型参数配置下,每个训练样本都会得到一个输出值
*计算损失:损失函数有多种类型
*调整模型参数:最常见的策略是采用梯度下降法
当训练结束之后,便进入评估阶段。
一种常见的方法是将原始数据集一分为二,将70%的样本用于训练,其余30%的样本用于评估。
2.模型训练和评估的通用代码框架
import tensorflow as tf
#初始化变量和模型参数,定义训练闭环中的运算
def inference(X):
#计算推断模型在数据X上的输出,并将结果返回
def loss(X,Y):
#根据训练数据X及其期望输出Y计算损失
def inputs():
#读取或生成训练数据X及其期望输出Y
def train(total_loss):
#根据计算的总损失训练或调整模型参数
def evaluate(sess, X, Y):
#对训练得到模型进行评估
#在一个会话对象中启动数据流图,并运行训练闭环
with tf.Session() as tf:
#对所有变量初始化
tf.global_variables_initializer().run()
#获取训练数据X和期望输出Y
X, Y = inputs()
#计算总损失
total_loss = loss(X, Y)
total_op = train(total_loss)
coord = tf.train.Coordinator()
threads = tf.train.start_queue_runners(sess=sess, coord=coord)
#实际的训练迭代次数
train_steps = 1000
for step in range(training_steps):
sess.run([train_op])
#出于调试和学习的目的,查看损失在训练过程中递减的情况
if step % 10 == 0:
print ("loss: ", sess.run([total_loss]))
evaluate(sess, X, Y)
coord.request_stop()
coord.join(threads)
sess.close()