Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 操作次数随tf梯度的增加而增加_Python 3.x_Tensorflow_Keras_Deep Learning - Fatal编程技术网

Python 3.x 操作次数随tf梯度的增加而增加

Python 3.x 操作次数随tf梯度的增加而增加,python-3.x,tensorflow,keras,deep-learning,Python 3.x,Tensorflow,Keras,Deep Learning,所以我试图用Keras和tensorflow的组合计算梯度wrt输入: 代码(在循环中)如下所示: 我注意到“n_操作”会增加每次迭代的次数,从而增加时间成本。这正常吗?有没有办法防止这种情况 谢谢大家! 不,这不是期望的行为。您的问题是,您一次又一次地定义渐变操作,而您只需要执行该操作。tf.gradient函数将新操作推送到图形上,并返回这些渐变的句柄。因此,您只需执行它们即可获得所需的结果。通过多次运行函数,会生成多个操作,这最终会破坏您的性能。解决办法如下: # outside the

所以我试图用Keras和tensorflow的组合计算梯度wrt输入:

代码(在循环中)如下所示:

我注意到“n_操作”会增加每次迭代的次数,从而增加时间成本。这正常吗?有没有办法防止这种情况


谢谢大家!

不,这不是期望的行为。您的问题是,您一次又一次地定义渐变操作,而您只需要执行该操作。
tf.gradient
函数将新操作推送到图形上,并返回这些渐变的句柄。因此,您只需执行它们即可获得所需的结果。通过多次运行函数,会生成多个操作,这最终会破坏您的性能。解决办法如下:

# outside the loop
loss = K.categorical_crossentropy(model's output, target)
gradients = tf.gradients(loss, model.input, colocate_gradients_with_ops=True)

# inside the loop
gradient_np = sess.run([gradients],feed_dict={model.input: img}) # img is a numpy array that fits the dimension requirements
# outside the loop
loss = K.categorical_crossentropy(model's output, target)
gradients = tf.gradients(loss, model.input, colocate_gradients_with_ops=True)

# inside the loop
gradient_np = sess.run([gradients],feed_dict={model.input: img}) # img is a numpy array that fits the dimension requirements