使用Tensorflow怎么实现梯度异步更新-创新互联

使用Tensorflow怎么实现梯度异步更新?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

创新互联长期为1000多家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为成县企业提供专业的网站制作、成都网站制作,成县网站改版等技术服务。拥有10多年丰富建站经验和众多成功案例,为您定制开发。

先计算梯度:

# 模型部分
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怎么实现梯度异步更新的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注创新互联行业资讯频道,感谢各位的阅读!


本文名称:使用Tensorflow怎么实现梯度异步更新-创新互联
网站地址:http://ybzwz.com/article/ceodio.html