我希望稍后根据两个神经元输出的梯度更新 trainable_variables ,如下所示:

X = tf.placeholder(dtype=tf.float32, shape=(None, 5), name='X')

with tf.name_scope('DNN') as scope:
    hidden1 = tf.layers.dense(X, 4, name= 'hidden1', activation= tf.nn.relu )
    output = tf.layers.dense(hidden1, 2, activation= None ,name = 'outs')

再次注意,输出层有2个神经元 . 但是,为了更新权重,我将选择其中一个神经元并采用渐变 . 第一个问题:我不确定是否可以使用 minimizecompute_gradientsapply_gradients 来实现同样的效果,因为它们需要一个仅输出一个变量的损失函数 . 它是否正确?我将使用变量 act 执行此操作,我将在运行步骤中更新:

act = tf.Variable(1, dtype = tf.int32, name='act', trainable=False)
with tf.name_scope('grads') as scope:
    optimizer = tf.train.GradientDescentOptimizer(0.01)

以下是我如何选择输出变量来获取渐变:

grads_and_vars = optimizer.compute_gradients(output[0][act])
 new_grads = [(grad*1000, var) for grad,var in grads_and_vars]

最后,我更新了trainable_variables:

training_op = [tf.assign(train_var, grad[0]) for train_var, grad in zip(tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES), new_grads)]

第二个问题 . 这是更新图表中可训练权重的正确方法吗?

init = tf.global_variables_initializer()
with tf.Session() as sess:
    init.run()
    sess.run(train_op, feed_dict = {X : np.array([11,20,45,20,40]).reshape(1,5), act: np.random.choice([0,1],p = [0.4,0.6])

第三个问题:这个程序有意义吗?或者这是Tensorflow的不当使用?