BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / ml-dm / #23569同步于 2017/4/11
该镜像源已超过 30 天没有更新,可能在源站已被删除。
ML_DM机器人发帖

求助tensorflow自定义梯度算法,跑的非常慢?

xuehuanran
2017/4/11镜像同步6 回复
楼主毕设用tensorflow做关于图像的,老师让在momentum算法上加参数矫正,就是m = m / (1 - u ** t),所以我就用tensorflow自己写了一个momentum算法以及其矫正算法(因为要两个算法比较嘛,两个算法都是自己写的感觉会比较好),但是非常奇怪,自己写的跑的特别慢,而且是越来越慢,我测了时间,问题出现在session.run(train_step)这一步,就是这一步越来越慢。实验室提供了一块titanX的gpu,跑官网的demo超级快,1分钟左右就可以跑完10多个epochs了,但是我自己的算法2个小时,也就1/3个epoch,这两天纠结这个问题,严重影响毕设的进度呀[ema1][ema1] 我的momentum的算法: def momentum(loss, t, parameter_list): opt = GradientDescentOptimizer(1e-3) grads_and_vars = opt.compute_gradients(loss, parameter_list) capped_grads_and_vars = [] for i in range(len(grads_and_vars)): gradient = grads_and_vars[i][0] variable = grads_and_vars[i][1] if t != 0: momentum = gradient + mu * last_momentum0[i] capped_grads_and_vars.append((momentum, variable)) else: momentum = gradient capped_grads_and_vars.append((momentum, variable)) if t != 0: for i in range(len(grads_and_vars)): last_momentum0[i] = capped_grads_and_vars[i][0] else: for i in range(len(grads_and_vars)): last_momentum0.append(capped_grads_and_vars[i][0]) return opt.apply_gradients(capped_grads_and_vars) 改进的momentum def momentum_modified(loss, t, parameter_list): opt = GradientDescentOptimizer(1e-3) grads_and_vars = opt.compute_gradients(loss, parameter_list) capped_grads_and_vars = [] for i in range(len(grads_and_vars)): gradient = grads_and_vars[i][0] variable = grads_and_vars[i][1] if t != 0: momentum = (gradient + mu * last_momentum1[i]) / (1 - mu ** t) capped_grads_and_vars.append((momentum, variable)) else: momentum = gradient capped_grads_and_vars.append((momentum, variable)) if t != 0: for i in range(len(grads_and_vars)): last_momentum1[i] = capped_grads_and_vars[i][0] else: for i in range(len(grads_and_vars)): last_momentum1.append(capped_grads_and_vars[i][0]) return opt.apply_gradients(capped_grads_and_vars)
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
czct机器人#1 · 2017/4/11
图片特征维度很高吧?是用的偏光性随机梯度下降么?
xuehuanran机器人#2 · 2017/4/11
没有呀 用的mnist[ema1][ema1] 【 在 czct 的大作中提到: 】 : 图片特征维度很高吧?是用的偏光性随机梯度下降么?
LayneH机器人#3 · 2017/4/11
LZ你这样就每次都新建一个train_op,然后tf每次都要编译一次计算图了。。 【 在 xuehuanran 的大作中提到: 】 : 楼主毕设用tensorflow做关于图像的,老师让在momentum算法上加参数矫正,就是m = m / (1 - u ** t),所以我就用tensorflow自己写了一个momentum算法以及其矫正算法(因为要两个算法比较嘛,两个算法都是自己写的感觉会比较好),但是非常奇怪,自己写的跑的特别慢,而且是越来越慢,我测了时间,问题出现在session.run(train_step)这一步,就是这一步越来越慢。实验室提供了一块titanX的gpu,跑官网的demo超级快,1分钟左右就可以跑完10多个epochs了,但是我自己的算法2个小时,也就1/3个epoch,这两天纠结这个问题,严重影响毕设的进度呀 : 我的momentum的算法: : def momentum(loss, t, parameter_list): : ...................
xuehuanran机器人#4 · 2017/4/11
我现在也觉得是这个问题....但是有的算法比如momentum需要用到上一步的梯度或者是迭代次数的 如何在循环外面一次定义好呢?tensorflow里momentum的源码看不太懂 【 在 LayneH 的大作中提到: 】 : LZ你这样就每次都新建一个train_op,然后tf每次都要编译一次计算图了。。 :
LayneH机器人#5 · 2017/4/12
试一下`tf.train..exponential_decay()`,像下面这样应该可以: ```python def momentum_modified(loss, mu): t= tf.Variable(0, trainable=False) exp_mu= tf.train.exponential_decay(mu, t, 1, mu) adaptive_mu = mu / (1 - exp_mu) opt = tf.train.MomentumOptimizer(learning_rate, adaptive_mu) return opt.minimize(loss, global_step=t) ``` 只要在第一次定义一个opt就行了 【 在 xuehuanran 的大作中提到: 】 : 我现在也觉得是这个问题....但是有的算法比如momentum需要用到上一步的梯度或者是迭代次数的 如何在循环外面一次定义好呢?tensorflow里momentum的源码看不太懂 : :
xuehuanran机器人#6 · 2017/4/12
好的,我去试试,谢谢![ema11][ema11] 【 在 LayneH 的大作中提到: 】 : [md] : 试一下`tf.train..exponential_decay()`,像下面这样应该可以: : ```python : ...................