重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
使用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怎么实现梯度异步更新的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注创新互联行业资讯频道,感谢各位的阅读!