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写的服务监控程序实例
Jan 31 Python
python使用正则表达式的search()函数实现指定位置搜索功能
Nov 10 Python
Python竟能画这么漂亮的花,帅呆了(代码分享)
Nov 15 Python
详解python中的json和字典dict
Jun 22 Python
python中使用print输出中文的方法
Jul 16 Python
Python+PyQT5的子线程更新UI界面的实例
Jun 14 Python
Python实现socket非阻塞通讯功能示例
Nov 06 Python
python接口自动化如何封装获取常量的类
Dec 24 Python
PyTorch中的Variable变量详解
Jan 07 Python
pytorch实现mnist分类的示例讲解
Jan 10 Python
python 实现图像快速替换某种颜色
Jun 04 Python
python opencv通过按键采集图片源码
May 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
动态生成gif格式的图像要注意?
2006/10/09 PHP
php 结果集的分页实现代码
2009/03/10 PHP
php数组函数序列之array_unique() - 去除数组中重复的元素值
2011/10/29 PHP
PHP获取时间排除周六、周日的两个方法
2014/06/30 PHP
php实现网站留言板功能
2015/11/04 PHP
Thinkphp微信公众号支付接口
2016/08/04 PHP
PHP用mysql_insert_id()函数获得刚插入数据或当前发布文章的ID
2016/11/25 PHP
Js 刷新框架页的代码
2010/04/13 Javascript
深入理解javascript学习笔记(一) 编写高质量代码
2012/08/09 Javascript
javascript简单性能问题及学习笔记
2014/02/04 Javascript
JS常用字符串处理方法应用总结
2014/05/22 Javascript
Extjs Label的 fieldLabel和html属性值对齐的方法
2014/06/15 Javascript
js分页工具实例
2015/01/28 Javascript
jQuery实现的登录浮动框效果代码
2015/09/26 Javascript
jQuery Tags Input Plugin(添加/删除标签插件)详解
2016/06/20 Javascript
jQuery上传多张图片带进度条样式(DEMO)
2017/03/02 Javascript
微信小程序 设置启动页面的两种方法
2017/03/09 Javascript
原生js实现简单的Ripple按钮实例代码
2017/03/24 Javascript
React-Router如何进行页面权限管理的方法
2017/12/06 Javascript
ES6基础之 Promise 对象用法实例详解
2019/08/22 Javascript
JavaScript中的this妙用实例分析
2020/05/09 Javascript
JavaScript中的几种继承方法示例
2020/12/06 Javascript
mapboxgl实现带箭头轨迹线的代码
2021/01/04 Javascript
Python通过解析网页实现看报程序的方法
2014/08/04 Python
在Python中操作文件之truncate()方法的使用教程
2015/05/25 Python
对python list 遍历删除的正确方法详解
2018/06/29 Python
Ubuntu18.04中Python2.7与Python3.6环境切换
2019/06/14 Python
解决Django layui {{}}冲突的问题
2019/08/29 Python
python 非线性规划方式(scipy.optimize.minimize)
2020/02/11 Python
使用HTML5技术开发一个属于自己的超酷颜色选择器
2013/09/22 HTML / CSS
税务专业毕业生自荐信
2013/11/10 职场文书
校庆筹备方案
2014/03/30 职场文书
副处级干部考察材料
2014/05/17 职场文书
银行求职信怎么写
2014/05/26 职场文书
经济贸易专业自荐信
2014/06/11 职场文书
windows安装 redis 6.2.6最新步骤详解
2022/04/26 Redis