Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.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
Tensorflow 在张量流中,可以分别计算两种梯度吗_Tensorflow_Deep Learning - Fatal编程技术网

Tensorflow 在张量流中,可以分别计算两种梯度吗

Tensorflow 在张量流中,可以分别计算两种梯度吗,tensorflow,deep-learning,Tensorflow,Deep Learning,我们知道,当我们运行“优化器”时,tensorflow将计算梯度并更新w_1和w_2 但我想做的是,首先,我想把w_1当作一个常数,我只想计算梯度,只更新w_2。其次,将w_2视为一个常数,计算梯度并仅更新w_1。我想轮流做这些事情 事实上,我以前见过这个:。但我使用的是BasicLSTMCell模块。我尝试了以下代码:print(tf.get\u collection(tf.GraphKeys.TRAINABLE\u VARIABLES)),它表明在我的神经网络中有四种参数,这意味着除了w\u

我们知道,当我们运行“优化器”时,tensorflow将计算梯度并更新w_1和w_2

但我想做的是,首先,我想把w_1当作一个常数,我只想计算梯度,只更新w_2。其次,将w_2视为一个常数,计算梯度并仅更新w_1。我想轮流做这些事情

事实上,我以前见过这个:。但我使用的是BasicLSTMCell模块。我尝试了以下代码:
print(tf.get\u collection(tf.GraphKeys.TRAINABLE\u VARIABLES))
,它表明在我的神经网络中有四种参数,这意味着除了w\u 1和w\u 2之外,在BasicLSTMCell中还有另外两个参数。
因此,如果我使用诸如
var\u list=[w\u 1]
,BasicLSTMCell中的其他两个参数无法优化,我该怎么做

有可能,甚至很可能,
BasicLSTMCell
以某种方式允许您访问其
变量的内部集合,您可以将其传递到
var\u list
。但更通用的方法也可以是直接从优化器界面获取梯度:

w_1   = tf.get_variable("w_1", shape)   
w_2   = tf.get_variable("w_2", shape) 
output = tf.mul(w_1, w_2)
.....
.....
optimizer = tf.train.AdamOptimizer(alpha).minimize(self.cost)
梯度和变量
是元组列表
(梯度,变量)
。您可以筛选出要保持固定的,然后应用其余的:

optimizer = tf.train.AdamOptimizer(alpha)

grads_and_vars = optimizer.compute_gradients(self.cost)

做你想做的事很棘手,但也是可能的。诀窍是定义一个
var_列表
,当你想保持它不变时,从列表中排除
w_1
(或
w_2
)。例如,可以使用列表理解根据变量(唯一)名称匹配变量,如下所示:

optimizer.apply_gradients(filtered_grads_and_vars)

您知道如何访问BasicLSTMCell内部变量集合吗?但这有一些限制-例如,无论出于何种原因,如果您想使用tf.stop_梯度,就我所知,无法区分您想要通过哪些梯度。
w_1 = tf.get_variable("w_1", shape)   
w_2 = tf.get_variable("w_2", shape) 
output = tf.mul(w_1, w_2)

variables_without_w_1 = [v for v in tf.trainable_variables() if v.name != w_1.name]
variables_without_w_2 = [v for v in tf.trainable_variables() if v.name != w_2.name]

optimizer_without_w_1 = tf.train.AdamOptimizer(alpha).minimize(
    self.cost, var_list=variables_without_w_1)
optimizer_without_w_2 = tf.train.AdamOptimizer(alpha).minimize(
    self.cost, var_list=variables_without_w_2)