学习笔记 TF008:机器学习基础 线性回归 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
cralison
V2EX    TensorFlow

学习笔记 TF008:机器学习基础 线性回归

  •  
  •   cralison 2017-05-14 18:41:01 +08:00 2795 次点击
    这是一个创建于 3071 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有监督学习,带标注信息输入数据集,标注真实期望输出,训练推断模型,覆盖初始数据集,预测新样本输出。推断模型具体运算步骤代码设置。由给定问题解决模型确定。模型确定,运算固定。相关数据是模型参数,训练过程不断更新,模型学习,调整输出。

    训练闭环一般结构:初始化模型参数(随机赋值或全 0) -> 输入训练数据(样本及期望输出,随机打乱次序) ->训练数据执行推断模型(得到输出) -> 计算损失(输出与期望输出差距) ->调整模型参数(调整参数值,损失最小化,梯度下降算法)。依据学习速率、给定模型、输入数据,大量循环重复。

    评估阶段,不同测试集(期望输出)模型推断,评估模型数据集损失,了解训练集外推广能力。原始数据集 70%用于训练,30%用于评估。

    初始化变量和模型参数,定义训练闭环运算。计算返回推断模型输出(数据 X),计算损失(训练数据 X 及期望输出 Y),读取或生成训练数据 X 及期望输出 Y,训练或调整模型参数(计算总损失),评估训练模型。会话对象启动数据流图,搭建流程。

    训练模型,多个训练周期更新参数(变量)。tf.train.Saver 类保存变量到二进制文件。周期性保存所有变量,创建检查点(checkpoint)文件,从最近检查点恢复训练。启动会话对象前实例化 Saver 对象,每完成 1000 次训练迭代或训练结束,调用 tf.train.Saver.save 方法,创建遵循命名模板 my-model{step}检查点文件,保存每个变量当前值,默认只保留最近 5 个文件,更早的自动删除。tf. train.get_checkpoint_state 方法验证有无检查点文件。tf. trainSaver.restore 方法恢复变量值。检查是否有检查点文件存在,在开始训练闭环前恢复变量值,根据检查点文件名称恢复全局迭代次数。

    线性回归,给定数据点集合训练集,找到最吻合线性函数。2D 数据线性函数是一条直线。点代表训练数据,线代表模型推断结果。线性回归模型基本原理,Y 为待预测值。X 为一组独立预测变量样本。W 为模型从训练数据学到的参数,每个变量权值。b 也是模型从训练数据学到的参数,线性函数常量,模型偏置(bias)。

    计算损失,总平方误差,模型对训练样本预测值与期望输出之差平方总和。预测输出向量与期望向量之间欧氏距离平方。2D 数据集,总平方误差对应数据点垂直方向到所预测回归直线距离平方总和。L2 范数或 L2 损失函数。采用平方避免计算平方根,节省计算量。

    模型训练运算,梯度下降算法优化模型参数。损失函数值随训练步数增加逐渐减小。

    import tensorflow as tf import os #初始化变量和模型参数,定义训练闭环运算 W = tf.Variable(tf.zeros([2, 1]), name="weights")#变量权值 b = tf.Variable(0., name="bias")#线性函数常量,模型偏置 def inference(X):#计算返回推断模型输出(数据 X) print "function: inference" return tf.matmul(X, W) + b def loss(X, Y):#计算损失(训练数据 X 及期望输出 Y) print "function: loss" Y_predicted = inference(X) return tf.reduce_sum(tf.squared_difference(Y, Y_predicted)) def inputs():#读取或生成训练数据 X 及期望输出 Y print "function: inputs" # Data from http://people.sc.fsu.edu/~jburkardt/datasets/regression/x09.txt weight_age = [[84, 46], [73, 20], [65, 52], [70, 30], [76, 57], [69, 25], [63, 28], [72, 36], [79, 57], [75, 44], [27, 24], [89, 31], [65, 52], [57, 23], [59, 60], [69, 48], [60, 34], [79, 51], [75, 50], [82, 34], [59, 46], [67, 23], [85, 37], [55, 40], [63, 30]] blood_fat_cOntent= [354, 190, 405, 263, 451, 302, 288, 385, 402, 365, 209, 290, 346, 254, 395, 434, 220, 374, 308, 220, 311, 181, 274, 303, 244] return tf.to_float(weight_age), tf.to_float(blood_fat_content) def train(total_loss):#训练或调整模型参数(计算总损失) print "function: train" learning_rate = 0.0000001 return tf.train.GradientDescentOptimizer(learning_rate).minimize(total_loss) def evaluate(sess, X, Y):#评估训练模型 print "function: evaluate" print sess.run(inference([[80., 25.]]))# ~ 303 print sess.run(inference([[65., 25.]]))# ~ 256 saver = tf.train.Saver()#创建 Saver 对象 #会话对象启动数据流图,搭建流程 with tf.Session() as sess: print "Session: start" tf.global_variables_initializer().run() X, Y = inputs() total_loss = loss(X, Y) train_op = train(total_loss) coord = tf.train.Coordinator() threads = tf.train.start_queue_runners(sess=sess, coord=coord) training_steps = 1000#实际训练迭代次数 initial_step = 0 checkpoin_dir = "./" ckpt = tf.train.get_checkpoint_state(os.path.dirname(checkpoin_dir)) if ckpt and ckpt.model_checkpoint_path: print "checkpoint_path: " + ckpt.model_checkpoint_path saver.restore(sess, ckpt.model_checkpoint_path)#从检查点恢复模型参数 initial_step = int(ckpt.model_checkpoint_path.rsplit('-', 1)[1]) for step in range(initial_step, training_steps):#实际训练闭环 sess.run([train_op]) if step % 10 == 0:#查看训练过程损失递减 print str(step)+ " loss: ", sess.run([total_loss]) save_file = saver.save(sess, 'my-model', global_step=step)#创建遵循命名模板 my-model-{step}检查点文件 print str(step) + " save_file: ", save_file evaluate(sess, X, Y)#模型评估 coord.request_stop() coord.join(threads) saver.save(sess, 'my-model', global_step=training_steps) print str(training_steps) + " final loss: ", sess.run([total_loss]) sess.close() 

    参考资料: 《面向机器智能的 TensorFlow 实践》

    欢迎加我微信交流:qingxingfengzi

    我的微信公众号:qingxingfengzigz

    我老婆张幸清的微信公众号:qingqingfeifangz

    目前尚无回复
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     6042 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 02:33 PVG 10:33 LAX 19:33 JFK 22:33
    Do have faith in what you're doing.
    (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); ga('create', 'UA-11940834-2', 'v2ex.com'); ga('send', 'pageview'); ga('send', 'event', 'Node', 'topic', 'tensorflow'); ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86