Tensorflow的梯度异步更新示例


Posted in Python onJanuary 23, 2020

背景:

先说一下应用吧,一般我们进行网络训练时,都有一个batchsize设置,也就是一个batch一个batch的更新梯度,能有这个batch的前提是这个batch中所有的图片的大小一致,这样才能组成一个placeholder。那么若一个网络对图片的输入没有要求,任意尺寸的都可以,但是我们又想一个batch一个batch的更新梯度怎么办呢?

操作如下:

先计算梯度:

# 模型部分
Optimizer = tf.train.GradientDescentOptimizer(1)
gradient = Optimizer.compute_gradients(loss)  # 每次计算所有变量的梯度
grads_holder = [(tf.placeholder(tf.float32, shape=g.get_shape()), v) for (g, v) in gradient]# 将每次计算的梯度保存
optm = Optimizer.apply_gradients(grads_holder) # 进行梯度更新

# 初始化部分
sess = tf.Session()
init = tf.global_variables_initializer()
sess.run(init)

# 实际训练部分
grads = []         # 定义一个空的列表用于存储每次计算的梯度
for i in range(batchsize): # batchsize设置在这里
  x_i = ...       # 输入
  y_real = ...      # 标签
  grad_i = sess.run(gradient, feed_dict={inputs: x_i, outputs: y_real}) #梯度计算
  grads.append(grad_i)  # 梯度存储
# 定义一个空的字典用于存储,batchsize中所有梯度的和
grads_sum = {}     
# 将网络中每个需要更新梯度的变量都遍历一遍  
for i in range(len(grads_holder)): 
  k = grads_holder[i][0] # 得到该变量名
  # 将该变量名下的所有梯度求和,这里也可以求平均,求平均只需要除以batchsize
  grads_sum[k] = sum([g[i][0] for g in grads]) 
# 完成梯度更新
sess.run(optm,feed_dict=grads_sum)

以上这篇Tensorflow的梯度异步更新示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
让 python 命令行也可以自动补全
Nov 30 Python
Python实现的排列组合计算操作示例
Oct 13 Python
Django model序列化为json的方法示例
Oct 16 Python
python之验证码生成(gvcode与captcha)
Jan 02 Python
Python实现使用request模块下载图片demo示例
May 24 Python
django如何实现视图重定向
Jul 24 Python
Python实现银行账户资金交易管理系统
Jan 03 Python
python opencv根据颜色进行目标检测的方法示例
Jan 15 Python
Python接口自动化判断元素原理解析
Feb 24 Python
python实现扑克牌交互式界面发牌程序
Apr 22 Python
如何理解python中数字列表
May 29 Python
再谈python_tkinter弹出对话框创建
Mar 20 Python
在Tensorflow中实现梯度下降法更新参数值
Jan 23 #Python
Tensorflow实现部分参数梯度更新操作
Jan 23 #Python
将tensorflow模型打包成PB文件及PB文件读取方式
Jan 23 #Python
使用tensorflow显示pb模型的所有网络结点方式
Jan 23 #Python
tensorflow 实现打印pb模型的所有节点
Jan 23 #Python
TensorFlow命名空间和TensorBoard图节点实例
Jan 23 #Python
tensorflow通过模型文件,使用tensorboard查看其模型图Graph方式
Jan 23 #Python
You might like
利用php绘制饼状图的实现代码
2013/06/07 PHP
php自定义类fsocket模拟post或get请求的方法
2015/07/31 PHP
PHP中如何使用session实现保存用户登录信息
2015/10/20 PHP
PHP获取文件扩展名的常用方法小结【五种方式】
2018/04/27 PHP
一个简单的JavaScript数据缓存系统实现代码
2010/10/24 Javascript
javascript和HTML5利用canvas构建猜牌游戏实现算法
2013/07/17 Javascript
jquery中get和post的简单实例
2014/02/04 Javascript
JS获取时间的方法
2015/01/21 Javascript
JavaScript控制按钮可用或不可用的方法
2015/04/03 Javascript
基于JavaScript的操作系统你听说过吗?
2016/01/28 Javascript
Bootstrap CSS组件之按钮下拉菜单
2016/12/17 Javascript
ES6概念 ymbol.for()方法
2016/12/25 Javascript
js实现仿购物车加减效果
2017/03/01 Javascript
关于vue.js组件数据流的问题
2017/07/26 Javascript
Node.js利用断言模块assert进行单元测试的方法
2017/09/28 Javascript
微信小程序radio组件使用详解
2018/01/31 Javascript
详解Vue-cli3 项目在安卓低版本系统和IE上白屏问题解决
2019/04/14 Javascript
layui 实现table翻页滚动条位置保持不变的例子
2019/09/05 Javascript
JS字符串补全方法padStart()和padEnd()
2020/05/27 Javascript
如何区分vue中的v-show 与 v-if
2020/09/08 Javascript
Python break语句详解
2014/03/11 Python
跟老齐学Python之用Python计算
2014/09/12 Python
Python迭代器和生成器介绍
2015/03/06 Python
用Python展示动态规则法用以解决重叠子问题的示例
2015/04/02 Python
Django中日期处理注意事项与自定义时间格式转换详解
2018/08/06 Python
python实现图书借阅系统
2019/02/20 Python
WxPython实现无边框界面
2019/11/18 Python
python线程信号量semaphore使用解析
2019/11/30 Python
实例代码讲解Python 线程池
2020/08/24 Python
Hotels.com英国:全球领先的酒店住宿提供商
2019/01/24 全球购物
The Outnet亚太地区:折扣设计师时装店
2019/12/05 全球购物
什么是makefile? 如何编写makefile?
2012/08/08 面试题
中班开学寄语
2014/04/04 职场文书
师范毕业生求职信
2014/07/11 职场文书
辅导员学期工作总结
2015/08/14 职场文书
小学大队干部竞选稿
2015/11/20 职场文书