一、TensorFlow为什么要存在变量收集的过程,主要目的就是把训练过程中的数据,比如loss、权重、偏置等数据通过图形展示的方式呈现在开发者的眼前。

    自定义参数:自定义参数,主要是通过Python去执行,然后传入对应的参数。常见的有路径、训练次数等。

    梯度下降:这个应该是最常见的训练手段了,在监督学习中,基本上都是采用这种方式,所以了解其中的使用过程还是很多必要的。

  二、变量收集

    tf.summary.scalar(<name>, <tensor>):通过标量的方式来统计数据(简单一点有点像曲线图的方式,一般用于loss、accuary的收集)

    tf.summary.histogram(<name>, <values>):直方图的形式展示、一般用于高纬度的数据收集。

    merged = tf.summary.merge_all():合并数据,返回收集到的数据

    summary = sess.run(merged):运行收集到数据

    file_write = tf.summary.FileWriter(<logdir>,<graph=None>):记录收集数据的writer

    file_write.add_summary(<summary>, <global_step=None>):写入收集的数据,global_step为每一步长

  三、自定义命令参数

    1)首先声明需要传入的参数   

tf.flags.DEFINE_integer("max_step", 2000, "最大训练次数")

FLAGS = tf.flags.FLAGS

    注意:这里的数据类型,可以自己更具需要传入

tf.flags.DEFINE_integer(<name>, <default_value>, <desc>)
tf.flags.DEFINE_string(<name>, <default_value>, <desc>)

    2)替换需要手动传入的部分

for i in range(FLAGS.max_step):   
获取参数:
定义:
FLAGS = tf.flags.FLAGS
获取:
FLAGS.<name>

    3)通过Python的方式去执行*.py文件,带入参数

python <py_name> --<name>=<value>

  四、矩阵运算

矩阵运算:
乘法:tf.matmul(x, y)
平方:tf.square(error)
均值:tf.reduce_mean(error)

  说明:矩阵运算,这里只是一少部分,实际开发中用到的需要自行查阅

  五、梯度下降

线性回归步骤:
1、准备特征数据和目标值
2、建立模型 y = wx + b,主要求解w,b的值
3、计算损失值:误差loss均方误差(y1-y1')^2 + ... + (yn - yn')^2 / n 其中:yn为特征值矩阵,yn'为平均值矩阵
4、梯度下降,优化损失过程,需要指定学习率
梯度下降:
tf.train.GradientDescentOptimizer(learning_rate)
method: minimize(loss)
return: 梯度下降op
学习率:
如果学习率过大会出现梯度消失/梯度爆炸导致NaN
优化:
1、重新设计网络
2、调整学习率
3、使用梯度截断
4、使用激活函数

  六、代码演示

import os
import tensorflow as tf # tf.flags.DEFINE_integer("max_step", 2000, "最大训练次数")
#
# FLAGS = tf.flags.FLAGS def tensorflow_linear_regression():
with tf.variable_scope("data"):
# 1、准备特征值和目标值
x = tf.random_normal([100, 1], mean=1.75, stddev=0.5, name="x")
# 矩阵相乘必须是二维(为了模拟效果而设定固定值来训练)
y_true = tf.matmul(x, [[0.7]]) + 0.8 with tf.variable_scope("model"):
# 2、建立回归模型,随机给权重值和偏置的值,让他去计算损失,然后在当前状态下优化
# 模型 y = wx + b, w的个数根据特征数据而定,b随机
# 其中Variable的参数trainable可以指定变量是否跟着梯度下降一起优化(默认True)
w = tf.Variable(tf.random_normal([1, 1], mean=0.0, stddev=1.0), name="w", trainable=True)
b = tf.Variable(0.0, name="b")
# 预测值
y_predict = tf.matmul(x, w) + b with tf.variable_scope("loss"):
# 3、建立损失函数,均方误差
loss = tf.reduce_mean(tf.square(y_true - y_predict)) with tf.variable_scope("optimizer"):
# 4、梯度下降优化损失
# 学习率的控制非常重要,如果过大会出现梯度消失/梯度爆炸导致NaN
train_op = tf.train.GradientDescentOptimizer(learning_rate=0.1).minimize(loss) # 1)收集变量
tf.summary.scalar("losses", loss)
tf.summary.histogram("ws", w) # 2)合并变量
merged = tf.summary.merge_all() tf.add_to_collection("y_predict", y_predict) # 定义一个初始化变量的op
init_op = tf.global_variables_initializer() # 定义保存模型
saver = tf.train.Saver() # 通过绘画运行程序
with tf.Session() as sess:
sess.run(init_op)
print("运行前,权重值:%f, 偏置:%f" % (w.eval(), b.eval()))
file_write = tf.summary.FileWriter("tmp/summary/regression", sess.graph) # 加载上次训练的模型结果
if os.path.exists("model/checkpoint/checkpoint"):
saver.restore(sess, "model/checkpoint/model") # 循环训练
for i in range(2000):
# python tensorflow_linear_regression_demo.py --max_step=1000
# for i in range(FLAGS.max_step):
sess.run(train_op)
print("运行 %d 后,权重值:%f, 偏置:%f" % (i + 1, w.eval(), b.eval())) # 运行合并后的数据
summary = sess.run(merged)
file_write.add_summary(summary, i) # 保存模型
if (i + 1) % 100 == 0:
saver.save(sess, "model/checkpoint/model")

Python之TensorFlow的变量收集、自定义命令参数、矩阵运算、梯度下降-4的更多相关文章

  1. python+pytest,通过自定义命令行参数,实现浏览器兼容性跑用例

    场景拓展: UI自动化可能需要指定浏览器进行测试,为了做成自定义配置浏览器,可以通过动态添加pytest的命令行参数,在执行的时候,获取命令行传入的参数,在对应的浏览器执行用例. 1.自动化用例需要支 ...

  2. TensorFlow进阶(六)---模型保存与恢复、自定义命令行参数

    模型保存与恢复.自定义命令行参数. 在我们训练或者测试过程中,总会遇到需要保存训练完成的模型,然后从中恢复继续我们的测试或者其它使用.模型的保存和恢复也是通过tf.train.Saver类去实现,它主 ...

  3. Python基础笔记系列九:变量、自定义函数以及局部变量和全局变量

    本系列教程供个人学习笔记使用,如果您要浏览可能需要其它编程语言基础(如C语言),why?因为我写得烂啊,只有我自己看得懂!! 变量在前面的系列中也许就可以发现,python中的变量和C中的变量有些许不 ...

  4. Linux常用基本命令:三剑客命令之-awk内置变量与自定义变量

    AWK中,变量分为两种:内置变量与自定义变量. 常见的内置变量有: FS:输入字段分隔符, 默认为空白字符 OFS:输出字段分隔符, 默认为空白字符 RS:输入记录分隔符(输入换行符), 指定输入时的 ...

  5. 如何使用python自定义命令

    dir.tree.cd等等,都是我们常见的命令.这些命令是开发者开发出来的,如果我们自己想按照自己的想法开发一个命令,应该怎么做呢? 以python语言来实现,问题就是:如何使用python自定义命令 ...

  6. Python学习5——抽象,涉及抽象和结构、函数的自定义、参数、作用域、递归

    此处将抽象和结构.自定义函数.参数的使用.作用域.递归放在一起学习,看起来很怪是不是? 但实际上这几者之间是有紧密联系的,不然Python基础教程(第三版)的作者为什么会把它们放在一起哪?手动滑稽 好 ...

  7. 华为OPS,自定义命令,动态执行命令

     OPS     开放可编程系统OPS(Open Programmability System)是指设备通过提供统一的应用程序接口API(Application Programming Interfa ...

  8. node生成自定义命令(yargs/commander)

    第一部分可以生成一个自定义命令,例如常见的”express”,yargs和commander则可以在生成的自定义命令上做扩展,yargs将命令扩展成类似express --l xx的形式;而comma ...

  9. 15SpringMvc_在业务控制方法中写入模型变量收集参数,且使用@InitBind来解决字符串转日期类型

    之前第12篇文章中提到过在业务控制方法中写入普通变量收集参数的方式,也提到了这种凡方式的弊端(参数很多怎么办),所以这篇文章讲的是在业务控制方法中写入模型变量来收集参数.本文的案例实现的功能是,在注册 ...

随机推荐

  1. 第06组 Beta冲刺(5/5)

    队名:拾光组 组长博客链接 作业博客链接 团队项目情况 燃尽图(组内共享) 组长:宋奕 过去两天完成了哪些任务 继续维护后端代码 准备beta版本的答辩 GitHub签入记录 接下来的计划 整理任务, ...

  2. Java线程的wait(), notify()和notifyAll()

    Java线程生命周期 类java.lang.Thread包含一个静态的State enum用于定义每种可能的状态. 在任意的时间点, 线程会处于以下的状态之一: NEW – 新创建的线程, 还未启动( ...

  3. jar第三方组件Dependency-check依赖检查工具

    jar第三方组件Dependency-check依赖检查工具 http://www.mianhuage.com/913.html 工具下载 http://dl.bintray.com/jeremy-l ...

  4. Excel 如何查找 问号 “?” 、星号“*” 、 “~”号

    若需要查找问号“?”,则在查找内容文本框中输入“~?”.“?”为通配符,代替单个任意字符,如果直接查找,会找到包含数据的所有单元格. 若需要查找星号“*”,则在查找内容文本框中输入“~*”.“*”为通 ...

  5. Spring cloud微服务安全实战-7-8ELK+SpringBoot环境搭建

    采集不可聚合的离散的.日志信息的e ELK是三个系统的简称 LogStash:用来做日志的收集.过滤.格式转换 Kibana:和普罗米修斯的grafana一个意思.主要用来展示数据. 用docker来 ...

  6. Linux云主机(离线)搭建本地yum源

    下载CentOS镜像 http://mirror.nsc.liu.se/centos-store/7.3.1611/isos/x86_64/ 离线yum源的配置 1.上传下载的镜像源iso 2.挂载i ...

  7. docker search mysql Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

    1.docker search mysql 报错 [root@localhost usr]# docker search mysqlCannot connect to the Docker daemo ...

  8. Java面试题大汇总(附答案)

    下列面试题都是在网上收集的,本人抱着学习的态度找了下参考答案,有不足的地方还请指正,更多精彩内容可以关注我的微信公众号:Java团长 相关概念 面向对象的三个特征 封装,继承,多态.这个应该是人人皆知 ...

  9. idea的groovy设置

    idea的groovy设置 groovy使用的是java的jdk 新建groovy项目,第一次新建的时候,Groovy library是空的,需要点击右边的Create...新建. 但是由于brew ...

  10. Theano入门

    由于自己的一个小项目需要Theano部分的开源代码,所以学习一下并记录入门的经典网站. 入门中文博客:https://blog.csdn.net/hjimce/article/details/4680 ...